2 回答

TA貢獻(xiàn)1803條經(jīng)驗 獲得超6個贊
該腳本包含一些錯誤。我將嘗試一一解決它們。我給它們編號以供參考。
[1] 您不要在這兩個函數(shù)上使用相同的文件名。在一處使用
./venv/birthday_log.txt', and in another place you use
birthday_log.txt`(不帶子文件夾)。這可以通過將文件名移動到全局變量或函數(shù)參數(shù)中來解決。特別是當(dāng)您開始編程時,我非常不鼓勵使用全局變量,所以讓我們使用函數(shù)參數(shù)(見下文)
[2] 使用時,
date.today()
您將今天的日期作為“日期”類型的變量獲取。但是當(dāng)你想將其與文本進(jìn)行比較時,你需要將其轉(zhuǎn)換為“str”。你通過調(diào)用它來正確地做到這一點.strftime(...)
。但該調(diào)用將返回字符串值。它不會修改現(xiàn)有的日期對象。因此,您需要將結(jié)果存儲在一個新變量中,以便稍后使用。[3] 當(dāng)測試是否找到今天的日期時,您使用
in
帶有日期對象(如[2]中提到的)和文件對象的運算符,這是不起作用的。我們需要在運算符的兩側(cè)使用“字符串”in
。在左側(cè),我們可以使用在[2]中創(chuàng)建的新變量,在右側(cè),我們可以使用line
它代表我們正在循環(huán)的當(dāng)前行。
還有一些提示:
您可以使用
print(type(variable))
查看變量的類型除了使用之外,
birthday_dict.update({name: date_str})
您還可以簡單地編寫birthday_dict[name] = date_str
小“練習(xí)”
將我在腳本最后編寫的兩行移動到“main”函數(shù)中。這樣您就可以使用一個變量作為文件名并刪除重復(fù)的值。您也可以使用全局變量,但正如前面提到的,最好避免使用。將這些行包裝在“主”函數(shù)中將解決該問題。
關(guān)于全局變量:您有一個全局變量
birthday_dict
。考慮如何使其成為“局部”變量。提示:這與對文件名所做的更改非常相似。
import datetime
from datetime import date, timedelta
birthday_dict = {}
def add_to_log(filename):
name = input("Name: ")
date_str = input("Birthday (day/month) :")
birthday_dict.update({name: date_str})
# [1] Using a variable here makes it easier to ensure we only specify the
# filename once
with open(filename, mode='a') as birthday_log:
file = birthday_log.write(f'\n {name}:{date_str}')
print ('Birthday added!')
def reminder(filename):
# [1] Using a variable here makes it easier to ensure we only specify the
# filename once
file = open(filename, 'r')
today = date.today()
# [2] After creating a reference for "today", you need to store the
# "string" conversion in a new variable and use that later
today_str = today.strftime("%d/%m")
flag = 0
for line in file:
# [3] You want to check that the date you need is contained in the
# line, not the file object
if today_str in line:
line = line.split(':')
flag = 1
print (f'Today is {line[1]}\'s birthday!')
add_to_log("birthday_log.txt")
reminder("birthday_log.txt")

TA貢獻(xiàn)1797條經(jīng)驗 獲得超6個贊
要查看文件中的所有行,您需要.readlines()
從變量運行 with open()
,這將生成一個列表,如下所示:
file = open("test.txt", "r") lines = file.readlines() # lines = ['hello','test']
該lines
變量將是一個列表,您可以執(zhí)行以下操作:
for line in lines: print(line)
另外,您可能想for today in line
在第二個函數(shù)中編寫 , 。
添加回答
舉報