Names=[0,1,2,3,4]
Names[1]=='Ben'
Names[2]=='Thor'
Names[3]=='Zoe'
Names[4]=='Katie'
Max=4
Current=1
Found=False
PlayerName=input('What player are you looking for?')
while Found==False and Current==Max:
if Names[Current]==PlayerName:
Found=True
else:
Current+=1
if Found==True:
print('Yes, they have a top score')
else:
print('No, they do not have a top score')
这是该计划。当输入顶部的4个名字中的任何一个时,程序应该打印,“是的,他们有一个最高分”,但是当输入任何其他内容时,它应该打印出来,“不,他们没有最高分”。 / p>
无论输入什么名称,都会返回“否,他们没有最高分”的消息。我认为它可能与循环有关,但不确定是什么。
答案 0 :(得分:6)
你的第二个条件是倒置的。你想要
while Found==False and Current!=Max:
也就是说,在Python中,您可以使用in
运算符更简单地执行此操作:
names = ['Ben', 'Thor', 'Zoe', 'Katie']
player_name = input('What player are you looking for?')
if player_name in names:
print('Yes, they have a top score')
else:
print('No, they do not have a top score')
这样,您根本不需要while
循环。
答案 1 :(得分:2)
Names[1]=='Ben'
...
不是赋值,它是等式检查(它返回False
,虽然这是无关紧要的)
因此,您的列表不会被修改,并且会根据列表[0,1,2,3,4]
检查名称,并且它们永远不会匹配,这并不奇怪。
此外,您的循环条件不正确,并且那里的代码永远不会运行。
但是,您应该考虑使用上面建议的in
运算符,或者至少使用for
循环来编写您的程序是一种更加pythonic的方式,迭代您的列表。
答案 2 :(得分:1)
在while
循环中,您正在进行这些比较:
Found==False and Current==Max
条件的第二部分永远不会评估为True
,因为Current
在循环之前始终设置为1
,即!=
到Max
- 因此,循环中的代码永远不会评估。
答案 3 :(得分:1)
看这里:
Names=[0,1,2,3,4] Names[1]=='Ben' Names[2]=='Thor' Names[3]=='Zoe' Names[4]=='Katie'
这不符合你的想法。之后,Names
等于[0, 1, 2, 3, 4]
。接下来的几行不会为Names
指定名称,而只检查元素是否等于名称。例如,Names[1]=='Ben'
检查Names
中的第二个元素是否等于Ben
(因此评估为True
或False
)但是没有做任何事情。结果
答案 4 :(得分:1)
你的代码永远不会进入循环内部,因为最初的Current = 1和Max = 4,所以它们不相等。
答案 5 :(得分:1)
您是否尝试在Python中编写BASIC? : - )
其他人已经回答了为什么它不起作用。即使你进行了这些更改,你的程序看起来更像是BASIC而不是Python。
您应该执行以下操作:
for item in listobject:
而不是while循环遍历列表。if Found==True:
,只需使用if Found:
found
代替Found
。