基于类的命令行notebook的实现

在看一本书《PYTHON3 面向对象编程》

内容丰富,作作记录。

notebook.py

__author__ = ‘chengang882‘

import datetime

# Store the next available id for all new note
last_id = 0

class Note(object):
    """Represent a note in the notebook. Match against a
    string in searches and store tags for each note."""

    def __init__(self, memo, tags=‘‘):
        """initialize a note with memo and optional
        space-separated tags. Automatically set the note‘s
        creation date and a unique id."""
        self.memo = memo
        self.tags = tags
        self.creation_date = datetime.date.today()
        global last_id
        last_id += 1
        self.id = last_id

    def match(self, filter):
        """Determine if this note matches the filter
        text. Return True if it matches, False otherwise.
        Search is case sensitive and matches both text and
        tags."""
        return filter in self.memo or filter in self.tags

class Notebook(object):

    def __init__(self):
        self.notes = []

    def new_note(self, memo, tags=‘‘):
        self.notes.append(Note(memo, tags))

    def _find_note(self, note_id):
        for note in self.notes:
            if str(note.id) == str(note_id):
                return note
        return None

    def modify_memo(self, note_id, memo):
        note = self._find_note(note_id)
        if note:
            note.memo = memo
            return True
        return False

    def modify_tags(self, note_id, tags):
        self._find_note(note_id).tags = tags

    def search(self, filter):
        return [note for note in self.notes if
                note.match(filter)]

menu.py

__author__ = ‘chengang882‘

import sys
from notebook import Notebook, Note

class Menu:
    def __init__(self):
        self.notebook = Notebook()
        self.choices = {
            "1": self.show_notes,
            "2": self.search_notes,
            "3": self.add_note,
            "4": self.modify_note,
            "5": self.quit
        }

    def display_menu(self):
        print("""
        Notebook Menu

        1. Show all Notes
        2. Search Notes
        3. Add Note
        4. Modify Note
        5. Quit
        """)

    def run(self):
        while True:
            self.display_menu()
            choice = raw_input("Enter an option: ")
            action = self.choices.get(str(choice))
            if action:
                action()
            else:
                print("{0} is note a valid choice".format(choice))

    def show_notes(self, notes=None):
        if not notes:
            notes = self.notebook.notes
        for note in notes:
            print("{0}: {1}\n{2}".format(
                note.id, note.tags, note.memo))

    def search_notes(self):
        filter = raw_input("Search for: ")
        notes = self.notebook.search(filter)
        self.show_notes(notes)

    def add_note(self):
        memo = raw_input("Enter a memo: ")
        print(memo)
        self.notebook.new_note(memo)
        print("Your note has been added.")

    def modify_note(self):
        id = raw_input("Enter a note id: ")
        memo = raw_input("Enter a memo: ")
        tags = raw_input("Enter tags: ")
        if memo:
            self.notebook.modify_memo(id, memo)
        if tags:
            self.notebook.modify_tags(id, tags)

    def quit(self):
        print("Thank you for using your notebook today.")
        sys.exit(0)

if __name__ == "__main__":
    Menu().run()

时间: 2024-10-05 23:09:04

基于类的命令行notebook的实现的相关文章

基于DEV的命令行调试

这个在main函数参数使用挺有用的. 在电脑里面找到Dev-Cpp安装位置(或许在C:\Program Files(x86)) 戳进去,在Dev-Cpp目录里面搜索bin文件夹地址,并记着(或不记也行,等下要用再找=.=) 右键我的电脑,选择属性 选择高级系统设置 选环境变量(在弹出框较下部分) 点Path后点编辑 把一开始那些地址和加上\bin的地址都新建加入这个框内 各种确定 保存~ 菜单键+R 输入cmd打开命令行 输入 g++ -o exeName CppFileAddress地址可以拖

xsd、wsdl生成C#类的命令行工具使用方法

1.xsd生成C#类命令 示例:xsd <xsd文件路径> /c /o:<生成CS文件目录> <其他参数> 参数说明: /c 生成为cs文件,/d 生成DataSet (生成文件类型只能一种,要么使用/c,要么使用/d,并且必填) /o 生成文件存放目录(非文件路径) <其他参数> 如果xsd中有引入其他xsd,需要在后面加上所有引入的相关xsd的文件路径,每个文件路径用空格分开 2.wsdl生成C#类命令 示例:wsdl <wsdl文件路径> 

(转载)基于Bash命令行的百度云上传下载工具

原文链接:http://hi.baidu.com/meoow/item/aef5814bbd5be3e1bcf451e9 这是我根据百度云PCS的API写的一个基于bash的命令行工具, 使用了curl, awk, sed, xxd, bash,没有使用任何其他的语言解释器做辅助 目前,上传下载,文件列表,文件信息,创建文件夹,删除文件都没问题 复制和移动总是返回参数错误,实在找不出来哪里跟API不一致了,暂时放弃. 另外离线下载相关的API也都添加了,但是因为现在百度云不能申请,我是用的是by

命令行

学习Bash的基础知识.具体来说,输入 man bash 并至少全文浏览一遍; 它很简单并且不长.其他的shell可能很好用,但Bash功能强大且几乎所有情况下都是可用的 ( 只学习 zsh,fish或其他的shell的话,在你自己的电脑上会显得很方便,但在很多情况下会限制你,比如当你需要在服务器上工作时). 学习并掌握至少一个基于文本的编辑器.通常 Vim (vi) 会是你最好的选择. 学会如何使用man命令去阅读文档.学会使用apropos去查找文档.了解有些命令并不对应可执行文件,而是Ba

超级轻量的远程命令行客户端和服务端(含文件传输)

功能:实现基于TCPIP的命令行操作远程计算机,并且支持远程文件传输 平台:windows   (linux同理) 原理:客户端连接上服务端之后,先监听键盘输入,将键盘输入的cmd指令保存并发送给服务端:服务端保存并通过调用命令行执行,获取命令行执行结果发送给客户端.如果是   获取文件命令,则读取文件,并将文件发送给客户端 代码:源码下载链接 // 核心代码 int getfile(const char *path,SOCKET ClientSocket,const char *file) {

QT中QProcess调用命令行的痛苦经历

阅读目录 创建压缩包的方法 在QT中调用命令行 在QT中调用C++创建的dll 在QT程序中需要将某些目录和文件压缩为一个rar的压缩包,于是想到了在QT中通过QProcess类调用命令行的rar.exe来达到效果,但是没想到QProcess类用起来很麻烦,而且达不到效果,折腾了2天仍然没找到原因,使用另外一种办法解决了. 回到顶部 创建压缩包的方法 在windows平台创建压缩包,可以直接使用rar.exe,该程序在安装winrar之后,在其安装目录下就可以找到.该程序是winrar对应的命令

命令行视频下载工具you-get和youtube-dl

you-get和youtube-dl都是基于python的命令行媒体文件下载工具,完全开源免费跨平台.用户只需使用简单命令并提供在线视频的网页地址即可让程序自动进行嗅探.下载.合并.命名和清理,最终得到已经命名的完整视频文件.两者搭配使用几乎可以下载所有主流视频网站的视频及有关资源,配合本地播放器还可直接播放在线视频,彻底避免广告和浏览器插件的困扰. 在安装使用之前需要进行以下部署工作: 安装python3和pip 安装媒体处理工具FFmpeg you-get 官网:https://you-ge

Node.js 命令行程序开发教程

nodejs开发命令行程序非常方便,具体操作方式查看下面几篇文章 http://www.ruanyifeng.com/blog/2015/05/command-line-with-node.html 基于node构建命令行工具

如何在Linux命令行中创建以及展示演示稿

你在准备一场演讲的时候,脑海可能会先被图文并茂.形象华丽的演示图稿所占据.诚然,没有人会否认一份生动形象的演讲稿所带来的积极作用.然而,并非所有的演讲都需要TED Talk的质量.更多时候,演讲稿只为传达特定的信息. 而这个,使用文本信息足以完成.在这种情况下,你的时间可以更好的花在信息的搜集和核实上面,而不是在谷歌图片搜索(Google Image)上寻找好看的图片. 在Linux的世界里,有几个不同的方式供你选择来做演讲.比如带有大量多媒体展示.视觉冲击效果极佳的Impress.js,专为L