我正在学习Python学习。我写了下面你看到的代码:
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()函数定义中的第4行:
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
如果我在def read_file()周围放置一个try块,那么我可以运行该程序而不会出错:
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的定义有两个参数,但是包含它并且不包括它都会出错。
我做错了什么?
答案 0 :(得分:0)
请了解如何调试代码! 我只是给出一些提示。然而,这些并不会导致成功(正如Paul Cornelius指出的那样)
修复最后一行:
save_file(creature_race)
到
save_file(creatures)
简要说明: 你只保留种族,而你的职能等待:种族和性别。
您还应该查看hot以适当地将数据保存在文件中并阅读。 (例如检查python + csv)。
另外:你创建的函数很糟糕 - 它们没有封装。尝试以某种方式重新考虑代码,您的所有函数都不必调用或更改外部变量。然后,您可以在不执行任何功能的情况下启动代码,并逐个调用它们以查看它们的功能。观察您的全局变量,并随时修改代码。
答案 1 :(得分:0)
我弄明白了这个问题。我错过了代码中的一个小细节。在add_creature()定义中,我必须为sex分配一个默认值:
def add_creature(race, sex="male"):
creature = {"race": race, "creature_sex": sex}
creatures.append(creature)
这就是本教程只能使用race参数调用该函数的方法。添加="male"
代码后,代码按预期工作。