日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Python_文件_日记管理系统

發布時間:2024/4/11 windows 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python_文件_日记管理系统 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

日記管理系統

  • 函數式編程
    • 詳解版
    • 精華版
    • Singleton版

函數式編程

詳解版

將程序拆分為一個個小的函數----“分而治之”

def main():""" 完成一系列操作的主函數 """load() # 調用load函數while True: print("我的日記系統v1.0".center(20, '-') +"\n1. 添加日記 \\n2. 刪除日記 \\n3. 修改日記信息 \\n4. 查詢日記信息 \\n5. 顯示所有日記信息\\n6. 退出")try:if (menu_option := int(input("請輸入您需要的功能選項:"))-1) == 5: # ValueErrorsave()print("退出")breakexcept ValueError:print("請你從新輸入一個數字: ")continue#? func + () -> func()func_ls = [add, remove, modify, search, show_all]func_ls[menu_option]()#? 為什么不把 () 放到 func_ls 里面?#? func() -> 執行def sub_add():""" 讓用戶輸入日記內容 """middle=[] #? 中間變量cnt=0 #? 行號while diary:=input(':'): #? ':'提示用戶輸入, 不輸入任何字符按回車結束middle.append(str(cnt)+' '+diary)cnt+=1middle.append('end_of_diary') # ? 添加一篇日記結束的標志return middledef add():""" 讓用戶輸入整篇日記 """global diary_ls#! 不聲明下一句不能添加 why? 如果局部要對全局變量*修改*,則在局部聲明該全局變量diary_ls.extend(['date:'+input(' ˙ω˙ 今天是幾月幾號?(eg.6/8): '),'wheather:'+input('今天天氣怎么樣: '),'mood:'+input('今天心情怎么樣: '),'theme:'+input('日記的主題是: ')]) #? 字符串listprint('好,現在開始愉快地寫日記吧!')diary_ls.extend(sub_add())def save():""" 保存 diary_ls 中的數據到 txt """#? 以"寫"的方式,打開當前目錄下的'diary.txt'with open('./diary.txt', 'w', encoding='utf-8') as d:d.write('\n'.join(diary_ls))#? 把 dairy_ls 轉換成字符串,中間用換行回車隔開,再寫入文件def search():""" 根據索引查找date所在行 """while True:try:(choice := int(input('請輸入索引:\n1. 日期\n2. 主題'))) in [1, 2]breakexcept ValueError: # 確保用戶輸入的是1或2print("請你輸入一個數字: 1 或 2")continueif not choice-1:s = input('請輸入日期: ') # 以日期為搜索標志# global diary_ls # 非必要index = 0 # 找到了就要返回的下標值for i in range(len(diary_ls)): # 下標從0 -> len(diary_ls)-1 遍歷 diary_lsif (aim1 := diary_ls[i]) == (aim2 := 'date:'+s): # eg. 輸入 6/9 -> date:6/9 再去和diary_ls里面的比較index = i # 相等的時候得到下標值breakelse: # 如果循環了一圈都沒找到print('沒有找到!')return -1 # 返回 -1 表示沒找的, 這里就退出函數了i = index # 下標付給 i 作返回值, index 拿去作為循環變量while diary_ls[index].strip() != 'end_of_diary': # # IndexError: 'end_of_diary\n'print(diary_ls[index]) # 打印找到的結果index += 1return i # 返回找到的下標值else:s = input('請輸入主題: ') # ***index = 0for i in range(len(diary_ls)):if diary_ls[i] == 'theme:'+s: # ***index = ibreakelse:print('沒有找到!')return -1i = (index :=index-3) # ***while diary_ls[index].strip() != 'end_of_diary':print(diary_ls[index])index += 1return i #? 返回的還是datedef remove(index=-2):""" 刪除 """#? 如果remove有參數傳入 index=傳入的參數 , 否則調用searc去找if index != -2 or (index := search()) != -1: #* 沒找的,或沒傳入下標就不執行while diary_ls[index] != 'end_of_diary': # 從date刪到end_of_diarydel diary_ls[index]del diary_ls[index] # 刪除 end_of_diary#! index += 1 after del ls shrink or list index out of rangedef modify():""" 修改日記內容 """# 調用search去找要修改的,沒找到就show_menu#? 為什么不直接removeif (index := search()) != -1: remove(index+4) # 找到了就刪掉其類容global diary_lsdiary_ls=diary_ls[:index+4]+sub_add()+diary_ls[index+4:]# 然添加新的def load():""" 加載 txt 中數據到 dairy_ls """#? 以"添加"的方式,打開當前目錄下的'diary.txt' 創建新文件時,可用參數:w,w+,a,a+#? 為什么不以"讀"的方式打開文件 -> 不能新建文件with open('./diary.txt', 'a+', encoding='utf-8') as d:global diary_ls # !必要#? 讀取文件全部類容->str, 去掉兩邊的空格和空行,按 \n 分割->listd.seek(0) #? 文件指針回到文件開頭diary_ls = d.read().strip().split('\n')print(diary_ls) # 輸出以前的 diary_ls 里面的類容def show_all():""" 打印所有日記信息 """ # global diary_lsfor i in diary_ls:print([i,''][i=='end_of_diary'])# i== 'end_of_diary' -> print('')diary_ls = [] if __name__ == '__main__': #? 程序主入口try:main()except KeyboardInterrupt:# Ctrl+C... # 不做任何事finally:print('謝謝使用 :)')

精華版

里面有個小彩蛋

def add():global diary_ls # ! 不聲明下一句不能添加 why? 如果局部要對全局變量*修改*,則在局部聲明該全局變量diary_ls.extend(['date:'+input(' ˙ω˙ 今天是幾月幾號?(eg.6/8): '),'wheather:'+input('今天天氣怎么樣: '),'mood:'+input('今天心情怎么樣: '),'theme:'+input('日記的主題是: ')])print('好,現在開始愉快地寫日記吧!')diary_ls.extend(sub_add())def save():with open('./diary.txt', 'w', encoding='utf-8') as d:d.write('\n'.join(diary_ls))def search():while True:try:(choice := int(input('請輸入索引:\n1. 日期 2. 主題: '))) in [1, 2]breakexcept ValueError:print("請你輸入一個數字: 1 或 2")continueif not choice-1:s = input('請輸入日期: ')index = 0for i in range(len(diary_ls)):if diary_ls[i] == 'date:'+s:index = ibreakelse:print('沒有找到!')return -1i = indexwhile diary_ls[index].strip() != 'end_of_diary': #! IndexError: 'end_of_diary\n'print(diary_ls[index])index += 1return ielse:s = input('請輸入主題: ') # ***index = 0for i in range(len(diary_ls)):if diary_ls[i] == 'theme:'+s: # ***index = ibreakelse:print('沒有找到!')return -1i = (index := index-3) # ***while diary_ls[index].strip() != 'end_of_diary': # IndexError: 'end_of_diary\n'print(diary_ls[index])index += 1return i # datedef remove(index=-2):if index != -2 or (index := search()) != -1:while diary_ls[index] != 'end_of_diary':del diary_ls[index]del diary_ls[index]print(diary_ls)def modify():if (index := search()) != -1:remove(index+4)global diary_lsdiary_ls=diary_ls[:index+4]+sub_add()+diary_ls[index+4:]def sub_add():middle=[]cnt=0while diary:=input(':'):middle.append(str(cnt)+' '+diary)cnt+=1middle.append('end_of_diary')return middledef load():try:d = open('./diary.txt', 'r', encoding='utf-8')except FileNotFoundError:open('./diary.txt', 'w').close()d = open('./diary.txt', 'r', encoding='utf-8')finally:global diary_ls # !必要diary_ls = d.read().strip().split('\n')d.close()print(diary_ls)def show_all():for i in diary_ls:print([i, ''][i == 'end_of_diary'])def main():load()while True:print("我的日記系統v8.3".center(20, '-') +"\n1. 添加日記 \\n2. 刪除日記 \\n3. 修改日記信息 \\n4. 查詢日記信息 \\n5. 顯示所有日記信息\\n6. 退出")try:if (menu_option := int(input("請輸入您需要的功能選項:"))-1) == 5: #! ValueErrorsave()print("退出")breakexcept ValueError:print("請你輸入一個數字")continuefunc_ls = [add, remove, modify, search, lambda:print('\n'.join([[i, '\n'][i == 'end_of_diary'] for i in diary_ls]))]func_ls[menu_option]()if __name__ == '__main__':try:main()except KeyboardInterrupt:...# except IndexError:finally:print('謝謝使用 :)')# todo Singleton

Singleton版

def singleton(cls):_instance = {}def inner():if cls not in _instance:_instance[cls] = cls()return _instance[cls]return inner@singleton class Diary(object):__diary_ls = []def __init__(self):# * 主程序入口try:self.__main()except KeyboardInterrupt:...finally:print('謝謝使用 :)')def add(self):Diary.__diary_ls.append('date:'+input(' ˙ω˙ 今天是幾月幾號?(eg.6/8): ')+'\n' +'wheather:'+input('今天天氣怎么樣: ')+'\n' +'mood:'+input('今天心情怎么樣: ')+'\n' +'theme:'+input('日記的主題是: '))print('好,現在開始愉快地寫日記吧!')cnt = 0while diary := input('>'):Diary.__diary_ls.append(str(cnt)+' '+diary)cnt += 1Diary.__diary_ls.append('end_of_diary\n')def save(self):with open('./diary.txt', 'w', encoding='utf-8') as d:d.write('\n'.join(Diary.__diary_ls))def search(self):s = input('請輸入日期: ')index = 0for i in range(len(Diary.__diary_ls)):if (ls := Diary.__diary_ls[i]) == (aim := 'date:'+s):index = ibreakelse:print('沒有找到!')return -1i = indexwhile Diary.__diary_ls[index] != 'end_of_diary':print(Diary.__diary_ls[index])index += 1return idef remove(self, index=-2):if index != -2 or (index := self.search()) != -1:while Diary.__diary_ls[index] != 'end_of_diary':del Diary.__diary_ls[index]del Diary.__diary_ls[index]def modify(self):if (index := self.search()) != -1:self.remove(index)self.add()def load(self):with open('./diary.txt', 'r', encoding='utf-8') as d:Diary.__diary_ls = d.read().strip().split('\n')print(Diary.__diary_ls)def __main(self):self.load()while True:print("我的日記系統v3.0".center(20, '-') +"\n1. 添加日記 \\n2. 刪除日記 \\n3. 修改日記信息 \\n4. 查詢日記信息 \\n5. 顯示所有日記信息\\n6. 退出")try:if (menu_option := int(input("請輸入您需要的功能選項:"))-1) == 5:self.save()print("退出")breakexcept ValueError:print("請你輸入一個數字")continuefunc_ls = [self.add,self.remove,self.modify,self.search,lambda:print('\n'.join([[i, ''][i == 'end_of_diary']for i in Diary.__diary_ls]))]func_ls[menu_option]()Diary1 = Diary() # print(__diary_ls)

總結

以上是生活随笔為你收集整理的Python_文件_日记管理系统的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。