我正在學習Python的教程。我寫的代碼,你看到如下:爲什麼PyCharm給我一個未解決的參考名稱錯誤
creatures = []
def get_creature_race():
creature_race = []
for creature in creatures:
creature_race.append(creature["race"].title())
return creature_race
def print_creature_race():
creature_race = get_creature_race()
print(creature_race)
def add_creature(race, sex):
creature = {"race": race, "creature_sex": sex}
creatures.append(creature)
def save_file(creature):
try:
f = open("creatures.txt", "a")
f.write(creature + "\n")
f.close()
except Exception:
print("Could not save file")
def read_file():
f = open("creatures.txt", "r")
for creature in f.readlines():
add_creature(creature)
f.close()
read_file()
print_creature_race()
creature_race = input("Enter creature race: ")
creature_sex = input("Enter creature sex: ")
add_creature(creature_race, creature_sex)
print_creature_race()
save_file(creature_race)
當我嘗試運行此我得到如下:
...line 32, in read_file
add_creature(creature)
TypeError: add_creature() missing 1 required positional argument: 'sex'
第32行是在READ_FILE()函數定義四號線:
add_creature(creature)
如果我將鼠標懸停在最右邊的括號 ')' 我得到:
Parameter 'sex' unfilled
如果我把第二個參數:
def read_file():
f = open("creatures.txt", "r")
for creature in f.readlines():
add_creature(creature, sex)
f.close()
print("Could not read file")
我得到:
line 32, in read_file
add_creature(creature, sex)
NameError: name 'sex' is not defined
當我將鼠標懸停在性愛這讓我:
Unresolved reference sex
如果我把一個try塊def def read_file(),所以我可以運行程序,而不會出錯:
def read_file():
try:
f = open("creatures.txt", "r")
for creature in f.readlines():
add_creature(creature, sex)
f.close()
except Exception:
print("Could not read file")
並運行它,我得到以下幾點:
Could not read file
[]
Enter creature race: giant
Enter creature sex: male
['Giant']
Process finished with exit code 0
第一行是從READ_FILE()函數的異常,因爲creatures.txt尚不存在(或因此我想)。 []是print_creature_race()函數的輸出,因爲它當前爲空。接下來的兩個「Enter ...」語句應該是不言自明的。 ['Giant']是第二個print_creature_race()函數調用的輸出。我現在有一個creatures.txt文件,其中包含「巨人」一詞。
現在,按照教程,如果我跑這第二次是我應該得到的是:
giant
Enter creature race: elf
Enter creature sex: female
有沒有異常,因爲文件creatures.txt現在存在。 print_creature_race()函數調用導致「巨人」被打印。我得到兩個提示進入另一場比賽和性別。不過,我實際上得到的是:
Could not read file
[]
Enter creature race:
如果我繼續提示我得到:
Could not read file
[]
Enter creature race: elf
Enter creature sex: female
['Elf']
我creatures.txt文件有巨人,精靈(各自成一行),但是,很明顯,我仍然無法讀取文件。 add_creature的定義有兩個參數,但是包含它並且不包含它會導致錯誤。
我在做什麼錯?
要麼你有下面的教程有問題,要麼你不明白。沒有生物的性別,你不能使用'add_creature'。如果文件只包含可能的物種,那麼你可能不應該添加到生物列表。而且,如果不告訴我們這是哪個教程,我們不能說你是錯的還是教程簡單地被破壞了。 – Bakuriu
您可能需要在'creature'旁邊的文件中將'creature_sex'寫入空格,並在讀取文件時使用'line.split()'解析每行。不要忘記在每個函數中添加新參數:save_file ...並且當你打電話給他們時 – PRMoureu
Bakuriu,顯然我不明白。這就是我問這個問題的原因。我明白函數調用如何與其他語言一起工作,這就是爲什麼我不明白爲什麼教程只用一個參數調用函數。我不明白Python,所以我在問希望有人能向我解釋'爲什麼'。不知道爲什麼僅僅提出問題就需要反對投票。即使它不是你... –