Python程序,while循环没有执行?

时间:2012-03-24 15:26:32

标签: python

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>

无论输入什么名称,都会返回“否,他们没有最高分”的消息。我认为它可能与循环有关,但不确定是什么。

6 个答案:

答案 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(因此评估为TrueFalse)但是没有做任何事情。结果

答案 4 :(得分:1)

你的代码永远不会进入循环内部,因为最初的Current = 1和Max = 4,所以它们不相等。

答案 5 :(得分:1)

您是否尝试在Python中编写BASIC? : - )

其他人已经回答了为什么它不起作用。即使你进行了这些更改,你的程序看起来更像是BASIC而不是Python。

您应该执行以下操作:

  1. 也使用索引0。您分配0..4并使用1..4。只需使用0..3。
  2. 使用for item in listobject:而不是while循环遍历列表。
  3. 不要if Found==True:,只需使用if Found:
  4. 不要以大写字母命名变量 - 这些名称用于类。使用found代替Found