你的代码有几个问题。主要的有这些:
while
不While
- 坏压痕
rainbow
是一个字符串,而不是一个列表
rainbow
包含大写串
首先,Python是一种情况敏感的编程语言,如果您要在代码中使用While
而不是while
,那么它将会我给你一个错误。但是,我相信这只是一个复制粘贴错误,因为这不是您提出的问题。其次,您的代码没有正确缩进。尽管这两个部分是你的问题不相交的,我认为它是:
Counter = 1
while True:
rainbow="Red,Orange,Yellow,Green,Blue,Indigo,Voilet"
color = input ("Enter your rainbow color;")
if color.lower() in rainbow:
print (color)
if Counter == 4
break
Counter = Counter +1
这将意味着你的代码将仅仅停留在while True:
永远循环下去。我认为你打算做的是获得4个有效的用户输入,然后离开循环。在这种情况下,你应该缩进代码的while
循环之下:
Counter = 1
while True:
rainbow="Red,Orange,Yellow,Green,Blue,Indigo,Voilet"
color = input ("Enter your rainbow color;")
if color.lower() in rainbow:
print (color)
if Counter == 4
break
Counter = Counter +1
另一种方法是使用条件break
而不是True
:
Counter = 1
while Counter != 4:
rainbow="Red,Orange,Yellow,Green,Blue,Indigo,Voilet"
color = input ("Enter your rainbow color;")
if color.lower() in rainbow:
print (color)
Counter = Counter +1
第三,你会只想比赛您使用字符串定义的颜色不会剪切。当您使用一个字符串,下面的表达式求值True
:
"lue" in "Blue" # == True
对于Python只是检查是否值"lue"
是字符串"Blue"
英寸同样,如果您使用长字符串(如"Red,Orange,Yellow,Green,Blue,Indigo,Voilet"
),它也会执行相同的操作。
你想要的是一个列表。以下评估False
:
"lue" in ["Blue"] # == False
现在Python以不同的方式查看它。 "lue"
在列表中["Blue"]
?答案是不。所以,你应该使用:
["Red", "Orange", "Yellow", "Green", "Blue", "Indigo", "Voilet"]
或者,如果你想要做动态的,.split(",")
会产生为你:
"Red,Orange,Yellow,Green,Blue,Indigo,Voilet".split(",")
之后,你会得到这样的代码:
Counter = 1
while True:
rainbow=["Red", "Orange", "Yellow", "Green", "Blue", "Indigo", "Voilet"]
color = input("Enter your rainbow color;")
if color.lower() in rainbow:
print(color)
if Counter == 4
break
Counter = Counter +1
但是,它仍然不起作用,因为您一直在匹配诸如"Red"
到"red"
之类的词。您正在使用.lower()
来小写整个输入。相反,您可以.capitalize()
输入,或小写的"Red"
它匹配:
# .capitalize() the input
if color.capitalize in rainbow:
# code...
# lowercase the "Red"
rainbow = ["red", "orange", "yellow", "green", "blue", "indigo", "voilet"]
这将这样的伎俩。请注意紫罗兰是拼音,我不确定这是否是另一种语言,所以我保持不变。
,你应该注意的其他事情是:
- 变量命名的惯例是用下划线小写。大写的名字通常用于类。您可以在PEP 8中阅读有关约定的更多信息。
- 有一个
+=
,当你想要做的counter = counter + 1
在什么宇宙将颜色强制小写(像'red')有史以来匹配的颜色'Red'在该字符串? :-) – paxdiablo
另外大写的'Print'应该引发'NameError'。在发布之前,您是否**运行**代码? – Gribouillis
好的,谢谢,但从我被教导的“.lower()”对象可以将大写字符串转换为小写字母。 –