我在Python中有这个代码,而我想在用户输入的颜色中打印一个文本,可以在变量中找到。这就是代码的样子
Counter = 1
While True:
rainbow="Red,Orange,Yellow,Green,Blue,Indigo,Voilet"
color = input ("Enter your rainbow color;")
即使条件评估为true,此打印颜色代码也不起作用。
if color.lower () in rainbow:
print (color)
if Counter == 4
break
Counter = Counter +1
答案 0 :(得分:1)
不是解决问题的最简单方法。我认为你的代码应该看起来像这样
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
?
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 += 1
另外如果你想把你的第一个字母大写,只需改变这样的语句(如果你还没有读取字符串切片)
if color[0] + color[1:len(color)].lower() in rainbow:
print(color)
最简单的方法:
Counter = 1
while Counter < 4:
rainbow="Red,Orange,Yellow,Green,Blue,Indigo,Voilet"
color = input ("Enter your rainbow color ")
l = rainbow.split(",")
if color.title() in l:
print(color)
Counter += 1
答案 1 :(得分:0)
您的代码中存在一些问题。主要是这些:
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以不同的方式看待它。 {strong>列表<{strong> "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"]
这样就可以了。请注意,紫罗兰拼写为voilet,我不确定这是否是另一种语言所以我保持不变。
您应该注意的其他事项是:
+=
counter = counter + 1
醇>