1

我正在尝试编写一个程序,要求用户输入颜色,并根据他们选择的颜色,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。我刚刚开始编程,我真的不知道还要对这段代码做什么才能让它工作。有什么建议么?谢谢。

4

4 回答 4

4

您的问题是if语句是嵌套的,而它们不应该嵌套。if仅当外部条件为真时才到达内部

您还可以使用字典:

colors = {'brown': brown1, 'red': red1, 'orange': orange1}
color1 = colors[color1.lower()]
于 2013-09-12T21:22:48.333 回答
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()]
于 2013-09-12T21:20:52.703 回答
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)

让我们尝试空运行这个程序(手动逐行查看发生了什么)。if color1 = "brown"then 我们将if在 line 处输入语句5。那我们就去排队6。这意味着color1现在定义为 5。因此,color1永远不可能是“红色”或“红色”。此外,如果color1不是 "brown" 或 "Brown",那么它将转到具有相同缩进的下一行,或者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 的值,即使您不想再次检查它们,其余条件也可能为真(例如:if color==1: color=2; if color==2: color=1将颜色重置为 1,因为第二条件再次为真)。这就是为什么elif或被else if推荐,使我们的新程序:

if color1 == "brown" or color1 == "Brown":
    color = 5
elif color1 == "brown" or color1 == "Brown":
    color1 = 6
elif color1 == "brown" or color1 == "Brown":
    color1 = 3
于 2013-09-12T21:28:29.383 回答
0

我会添加一张color1属于colorsLev 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")
于 2013-09-12T21:44:50.757 回答