我正在尝试编写一个程序,要求用户输入颜色,并根据他们选择的颜色,python将其转换为数字并打印该数字。
这是我的代码:
def main():
brown1 = 5
red1 = 6
orange1 = 3
color1 = input("Color on resistor? (separated by comma) : ")
if color1 == "Brown" or "brown":
color1 = brown1
if color1 == "Red" or "red":
color1 = red1
if color1 == "Orange" or "orange":
color1 = orange1
print(color1)
main()
问题是Python只返回最后一种颜色,即3。 我刚开始编程,我真的不知道该代码还能做什么工作。有什么建议?谢谢。
答案 0 :(得分:4)
问题在于if
语句是嵌套的,而不应该嵌套。只有在外部条件为真时才会到达内部if
您也可以使用词典:
colors = {'brown': brown1, 'red': red1, 'orange': orange1}
color1 = colors[color1.lower()]
答案 1 :(得分:3)
您的代码存在的问题是您已将if
置于其他if
内。因此,如果第一个条件满足,则仅检查第二个条件,依此类推。而且你使用了color1 == "Brown" or "brown"
,这将始终返回True
,因为非空字符串的布尔值是True
。你应该这样做:
def main():
brown1 = 5
red1 = 6
orange1 = 3
color1 = input("Color on resistor? (separated by comma) : ")
if color1 == "Brown" or color1 == "brown":
color1 = brown1
elif color1 == "Red" or color1 == "red":
color1 = red1
elif color1 == "Orange" or color1 == "orange":
color1 = orange1
print(color1)
main()
更好的解决方案是使用字典。
color_dict = {'brown':5, 'red':6 ,'orange':3}
color1 = input("Color on resistor? (separated by comma) : ")
print color_dict[color1.lower()]
答案 2 :(得分:0)
您的代码存在的问题是if
语句应该是这样的:
if color1 == "Brown" or color1 == "brown":
...
这是因为“brown”是非空字符串,因此返回True
,这意味着您的if
条件将始终为真。因此,它会一直输入if语句,直到它到达最后一个语句。
以下是我们如何纠正这个特殊错误:
1. brown1 = 5
2. red1 = 6
3. orange1 = 3
4. color1 = input("Color on resistor? (separated by comma) : ")
5. if color1 == "Brown" or color1 == "brown":
6. color1 = brown1
7. if color1 == "Red" or color1 == "red":
8. color1 = red1
9. if color1 == "Orange" or color1 == "orange":
10. color1 = orange1
11. print(color1)
让我们尝试干这个程序(手动逐行查看正在发生的事情)。如果color1 = "brown"
,我们将在if
行输入5
语句。然后我们将前往6
行。这意味着color1
现在被定义为5。因此,color1
永远不会是“红色”或“红色”。另外,如果color1
不是“棕色”或“棕色”,那么它会转到具有相同缩进的下一行,或11
,这意味着它永远不会检查红色和橙色
你想要完成的事情可以这样做:
if color1 == "brown" or color1 == "Brown":
color = 5
if color1 == "brown" or color1 == "Brown":
color1 = 6
if color1 == "brown" or color1 == "Brown":
color1 = 3
现在,问题在于,如果我们更改第2行或第4行中color1的值,即使您不想再次检查它们,其余条件也可能为真(例如:{{1} }将颜色重置为1,因为第二个条件再次为真。这就是推荐if color==1: color=2; if color==2: color=1
或elif
的原因,即制作我们的新计划:
else if
答案 3 :(得分:0)
我会将color1
属于colors
的检查添加到Lev Levitsky的解决方案中。
为了避免丑陋的KeyError
例外。
def main():
color = {"brown": 5, "red": 6, "orange": 3}
c = input("Color on resistor? (separated by comma) : ")
c = c.lower()
if c in color:
print(color[c])
else:
print("Color not found")
可选择以pythonic方式编写
def main():
color = {"brown": 5, "red": 6, "orange": 3}
c = input("Color on resistor? (separated by comma) : ")
c = c.lower()
try:
print(color[c])
except KeyError:
print("Color not found")