python3面对对象编程:简单的记事本

import datetime, sys

last_id = 0

class Note:
    '''定义一个note类,定义一个接口方法
    用于返回是否匹配'''
    def __init__(self, memo, tags=''):
        '''初始化一些实例属性,引入全局的变量id'''
        self.memo = memo
        self.tags = tags
        self.create_date = datetime.date.today()
        global last_id
        # 引入全局变量last_id,可以在类创建实例的时候改编它
        last_id += 1
        # 实际上每创建一个类的实例,都会使全句变量last_id增加1
        self.id = last_id

    def match(self, filter):
        '''传入字符串,看是否有匹配的memo或是tags'''
        return filter in self.memo or filter in self.tags

class NoteBook:
    '''定义一个笔记本类,这个笔记本的类可以生成一个
    装在有所有备注的实例的数组,而且该笔记本类还可以
    通过方法修改实例的memo和tags'''
    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 note.id == note_id:
                return note
            return None
    # 直接写一个定位note的方法,然后修改其中的实例属性
    def modify_memo(self, note_id, memo):
        '''当输入正确的note_id时,就会根据参数修改这个
        id的memo'''
        self._find_note(note_id).memo = memo
    def modify_tags(self, note_id, tags):
        '''同上'''
        self._find_note(note_id).tags = tags
    def search(self, filter):
        '''找到所有和filter匹配的note,并用列表返回'''
        return [note for note in self.notes if
                note.match(filter)]

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 = input("Enter an option: ")
            # 注意input返回的是一个字符串
            action = self.choices.get(choice)
            if action:
                action()
                # 这个我感觉是精华
            else:
                print('{choice} is not a valid choice'.format(choice=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 = input('Search for :')
        notes = self.notebook.search(filter)
        self.show_notes(notes)

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

    def modify_note(self):
        id = input("Enter a note id:")
        memo = input("Enter a memo:")
        tags = input("Enter a 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 you notebook today")
        sys.exit(0)

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




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值