基于类的命令行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 20:16:41

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

命令行的艺术

流畅地使用命令行是一个常被忽略的技能,或被认为是神秘的奥义.但是,它会以明显而微妙的方式改善你作为工程师的灵活度和生产力.这是我在 Linux 上工作时发现的有用的命令行使用小窍门和笔记的精粹.有些小窍门是很基础的,而有些是相当地特别.复杂.或者晦涩难懂.这篇文章不长,但是如果你可以使用 并记得这里的所有内容,那么你就懂得很多了. 其中大部分最初出现在Quora上,但是考虑到兴趣所在,似乎更应该放到 Github 上,这里的人比我更能提出改进建议.如果你看到一个错误,或者更好的某种东西,请提交问

命令行艺术

curl -s 'https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md' | egrep -o '`\w+`' | tr -d '`' | cowsay -W50 流畅地使用命令行是一个常被忽略的技能,或被认为是神秘的奥义.但是,它会以明显而微妙的方式改善你作为工程师的灵活度和生产力.这是我在 Linux 上工作时发现的有用的命令行使用小窍门和笔记的精粹.有些小窍门是很基础的,而有些是相当

命令行的艺术:linux bash命令大全详解

熟练使用命令行是一种常常被忽视,或被认为难以掌握的技能,但实际上,它会提高你作为工程师的灵活性以及生产力.本文是一份我在 Linux 上工作时,发现的一些命令行使用技巧的摘要.有些技巧非常基础,而另一些则相当复杂,甚至晦涩难懂.这篇文章并不长,但当你能够熟练掌握这里列出的所有技巧时,你就学会了很多关于命令行的东西了. 这篇文章是 许多作者和译者 共同的成果. 这里的部分内容 首次 出现 于 Quora , 但已经迁移到了 Github,并由众多高手做出了许多改进. 如果你在本文中发现了错误或者存

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

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

Linux命令行创建以及展示Mdp演示稿图文教程

在Linux的世界里,有几个不同的方式供你选择来做演讲.比如带有大量多媒体展示.视觉冲击效果极佳的Impress.js,专为LaTex用户提供的Beamer,等等.而如果你苦于寻找一种简单的方式来创建并且展示文本演示稿,mdp 就能帮你实现. 什么是Mdp? mdp是Linux下一款基于ncurses的命令行演示工具.我喜欢mdp在于它对markdown的支持,使得我很容易以熟悉的markdown格式来创建幻灯片.自然,它还可以很轻松地用HTML格式来发布幻灯片.另一个好处是它支持UTF-8字符

学生信息管理系统-java基于命令行的学生成绩管理系统

问题描述 java基于命令行的学生成绩管理系统 1.设计学生类接口: 2.使用集合框架,实现学生成绩的插入.通过名字查询.显示各科成绩排名列表.显示各科成绩通过学生学号的排名列表. 3.将内存中的集合框架对象进行持久化,下一次运行系统时可直接调用(基础比较差,希望在线指导,不要求源代码,但求思路指导,) 解决方案 成绩录入.可以录入文件.黑屏 输入姓名+各科成绩.直接流写入txt文件. 查询.可以先将文件按行读出,存储在list或者map中.遍历查询输出即可. 解决方案二: 1.持久化 可以持久

基于命令行执行带参数的php脚本并取得参数的方法_php技巧

本文分析了基于命令行执行带参数的php脚本并取得参数的方法.分享给大家供大家参考,具体如下: 一.为什么我们要在命令行下运行php脚本呢? 个人理解,主要有二个原因: 1. 利用crontab去跑php,可以给服务器减压,当然在这里有一个条件,就是实时性要求不高.比如:sns中的好友动态,这个实时要求不高,但是数据量比较大,这个时候定时跑的话,会给web服务器,数据库服务器分担不小的压力. 2. 就是我们要定时去完成某一事情,比如:我要删除一个月前,用户留言,这个时候,写的php脚本在cront

使用Python编写类UNIX系统的命令行工具的教程_python

引言 您是否能编写命令行工具?也许您可以,但您能编写出真正好用的命令行工具吗?本文讨论使用 Python 来创建一个强健的命令行工具,并带有内置的帮助菜单.错误处理和选项处理.由于一些奇怪的原因,很多人并不了解 Python? 的标准库具有制作功能极其强大的 *NIX 命令行工具所需的全部工具. 可以这样说,Python 是制作 *NIX 命令行工具的最佳语言,因为它依照"batteries-included"的哲学方式工作,并且强调提供可读性高的代码.但仅作为提醒,当您发现使用 Py

pass:一款简单的基于Linux命令行的密码管理工具

现如今要记住类似 email.银行.社交媒体.在线支付.ftp 等等这么多的密码相信对每一个人来说都是一个巨大的挑战. 由于需求和使用,密码管理器现如今变得非常的流行.在 Linux 中我们可以有很多选择,包括基于 GUI 和基于 CLI 两种.今天我们要讲的是一款基于 CLI 的密码管理器叫做 pass . pass 是 Linux 上的一个简单的命令行密码管理器,它将密码存储在一个 gpg 加密后的文件里.这些加密后的文件很好地组织按目录结构存放. 所有密码都存在于 ~/.password-