列表循环的逻辑错误

时间:2016-05-25 09:17:44

标签: python

一旦用户说“是”或“是”,该程序应该停止并显示“你最喜欢的颜色是”他们回答“是”的颜色。

如果用户说“不”或“否”,程序应该循环直到用户说“是”。

我的问题是它询问用户颜色是否是列表中的下一个颜色而没有注意用户是否说“是”!

import sys

colourList = ["Pink", "Orange", "Brown", "Black", "Green", "Yellow", "White", "Blue", "Red", "Grey"]
finished = False
i = 0

while not finished:
    for i in range (0,9):
        favColour=input("Is your favourite colour ?".format(colourList[i]))
        if favColour == ("Yes") or ("yes"):
            finished = True
        else:
            i = i + 1

print("Your favorite colour is {}.".format(colourList[i]))

2 个答案:

答案 0 :(得分:2)

以下是代码的一个工作示例,其中考虑了在列表用完项目后可能出现的IndexError:

  colorList = ['pink', 'blue', 'red']
  finished=False
  import sys

  i=0

  while not finished:
      for i in range(0, len(colorList)):
          favColour=input("Is your favourite color {}?:".format(colorList[i]))
        if favColour == "Yes" or favColour == "yes":
            print favColour
            finished = True
            print("Your favourite color is {}".format(colorList[i]))
            break
        else:
            i=i+1
  • 对于Python 2.7,使用raw_input()代替input()
  • 我们需要更加重复这个条件if favColour == "Yes" or favColour == "yes":(请参阅下面的minocha作为另一个例子的答案)
  • 使用break,我们正在关闭程序,因为需要正确的结果。 (您的标志`finished = True"当然,如果您还有其他代码可以执行,也可以使用。)
  • 我们使用列表的长度(len(colorList))而不是设定的数字,因为这会使列表在我们达到最后一项/颜色后重新开始。

答案 1 :(得分:1)

如果其python2.7输入应更改为raw_input

favColour==("Yes")or("yes") - 是写条件的正确方法,因为这总是正确的,这里发生了2个断言favColour ==(“是”)或(“是” )。 不是favColour ==(“是”)

一个独立的字符串是正的,并且断言为true,你应该将它改为 -

favColour in ["yes", "Yes"] 要么 favColour == "Yes" or favColour == "yes"