我正在做以下练习:
程序:足部骨骼测验
创建一个函数,该函数将迭代foot_bones以寻找 匹配字符串参数
使用脚骨名两次调用该函数,并为每个答案提供反馈(正确-错误)
打印已识别的foot_bones的总数#该程序将使用foot_bones列表:
foot_bones = ["calcaneus", "talus", "cuboid", "navicular", "lateral cuneiform", "intermediate cuneiform", "medial cuneiform"]
奖金:如果正确,则从列表中删除正确的响应项目,这样用户就不能回答相同的项目两次
这是我为“跟骨”编写的代码:
foot_bones = ["calcaneus", "talus", "cuboid", "navicular", "lateral cuneiform", "intermediate cuneiform", "medial cuneiform"]
def quiz_bones(bone_insert,foot_bones = ["calcaneus", "talus", "cuboid", "navicular", "lateral cuneiform", "intermediate cuneiform", "medial cuneiform"]):
for bone in foot_bones:
if bone==bone_insert:
print("There is",foot_bones.count(bone_insert),bone_insert,"in",foot_bones)
foot_bones=foot_bones.remove(bone_insert)
return True
else:
print("There is ",foot_bones.count(bone_insert),bone_insert,"in",foot_bones)
return False
print("It is: ",quiz_bones(bone_insert=input("Type a bone: ")),"that calcaneus","is in",foot_bones)
print("It is: ",quiz_bones(bone_insert=input("Type a bone: ")),"that calcaneus","is in",foot_bones)
哪些给了我以下内容:
Type a bone: calcaneus
There is 1 calcaneus in ['calcaneus', 'talus', 'cuboid', 'navicular', 'lateral cuneiform', 'intermediate cuneiform', 'medial cuneiform']
It is: True that calcaneus is in ['calcaneus', 'talus', 'cuboid', 'navicular', 'lateral cuneiform', 'intermediate cuneiform', 'medial cuneiform']
Type a bone: calcaneus
There is 0 calcaneus in ['talus', 'cuboid', 'navicular', 'lateral cuneiform', 'intermediate cuneiform', 'medial cuneiform']
It is: False that calcaneus is in ['calcaneus', 'talus', 'cuboid', 'navicular', 'lateral cuneiform', 'intermediate cuneiform', 'medial cuneiform'] #The list hasn't been updated because it is not part of the function.
如何修改代码,以便在删除“跟骨”后最后一条语句显示更新的列表?
此外,在这种类型的陈述中:“是的,跟骨位于['跟骨','距骨','立方体','水母','侧楔形,'中间楔形, '内侧楔形文字']” 无论输入内容如何,我都想修改“跟骨”。但是,当我为以下内容修改代码的最后两行时:
print("It is: ",quiz_bones(bone_insert=input("Type a bone: ")),"that",bone_insert,"is in",foot_bones)
print("It is: ",quiz_bones(bone_insert=input("Type a bone: ")),"that",bone_insert,"is in",foot_bones)
我得到以下信息:
Type a bone: calcaneus
There is 1 calcaneus in ['calcaneus', 'talus', 'cuboid', 'navicular', 'lateral cuneiform', 'intermediate cuneiform', 'medial cuneiform']
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-7-8992c9c37974> in <module>()
14 return False
15
---> 16 print("It is: ",quiz_bones(bone_insert=input("Type a bone: ")),"that",bone_insert,"is in",foot_bones)
17 print("It is: ",quiz_bones(bone_insert=input("Type a bone: ")),"that",bone_insert,"is in",foot_bones)
NameError: name 'bone_insert' is not defined
如何解决此问题?谢谢!!!!!!
答案 0 :(得分:3)
print("It is: ",quiz_bones(bone_insert=input("Type a bone: ")),"that",bone_insert,"is in",foot_bones)
在此代码中,首先bone_insert
是传递给函数的参数名称,而不是变量。
要使其工作,只需多行即可完成>
bone_insert = input("Type a bone: ")
print("It is: ",quiz_bones(bone_insert=bone_insert),"that",bone_insert,"is in",foot_bones)
如何修改代码,以便在删除“跟骨”后最后一条语句显示更新的列表?
问题是您在函数内部和外部使用了不同的列表。
foot_bones = ["calcaneus", "talus", "cuboid", "navicular", "lateral cuneiform", "intermediate cuneiform", "medial cuneiform"]
def quiz_bones(bone_insert,foot_bones = ["calcaneus", "talus", "cuboid", "navicular", "lateral cuneiform", "intermediate cuneiform", "medial cuneiform"]):
这两个名称相同,但是一个是全局变量,另一个是局部变量。
只需删除第二个参数:
def quiz_bones(bone_insert):
现在该函数将看到在本地范围内没有foot_bones
,因此它将查找!
但是:
foot_bones=foot_bones.remove(bone_insert)
此行是错误的。 list.remove
不返回任何内容(您将用None
覆盖列表!),并且您不能不说自己就更改全局变量。
只需:
foot_bones.remove(bone_insert)
现在,您仅在列表的内部进行操作(之所以有效,因为列表是可变的)。
答案 1 :(得分:1)
我认为使用过滤器对您有所帮助。搜索后要删除该项目的提示。 有很多选择。 请注意,这只是一个示例,我试图使它看起来更好,然后我可能会删除一些变量。 但这是个人的品尝。
类似的东西
foot_bones = ["calcaneus", "talus", "cuboid", "navicular", "lateral cuneiform", "intermediate cuneiform", "medial cuneiform"]
selected_item = 'calcaneus' #for example
def look_for_match(item):
return selected_item not in item
list_without_selectd_item = list(filter(look_for_match, foot_bones))
number_of_apperences = len(foot_bones) - len(list_without_selectd_item)
print(f'the {selected_item} apper {number_of_apperences} times')
selected_item = 'talus'
list_after_two_filters = list(filter(look_for_match, list_without_selectd_item))
number_of_apperences_second_filter = len(list_without_selectd_item) - len(list_after_two_filters)
print(f'the {selected_item} apper {number_of_apperences_second_filter} times')
答案 2 :(得分:0)
您需要将输入分配给变量,并在结果后删除。
f_bones = ["calcaneus", "talus", "cuboid", "navicular", "lateral cuneiform", "intermediate cuneiform", "medial cuneiform"]
def quiz_bones(bone_insert, foot_bones):
for bone in foot_bones:
if bone == bone_insert:
print("There is",foot_bones.count(bone_insert),bone_insert,"in",foot_bones)
print('foot_bones')
return True, foot_bones
else:
print("There is ",foot_bones.count(bone_insert),bone_insert,"in",foot_bones)
return False, foot_bones
while True:
bone_insert = input("Type a bone: ") # assign input to a varialbe
res, f_bones = quiz_bones(bone_insert, foot_bones=f_bones) # return modified list
print("It is: ",res,"that", bone_insert, "is in",f_bones) # print Result
if res: # if result is True.
f_bones.remove(bone_insert) # remove item from list.