Python 中单个变量(if 语句)的多种可能性



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

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

您也可以使用字典:

colors = {'brown': brown1, 'red': red1, 'orange': orange1}
color1 = colors[color1.lower()]

你的代码的问题在于你把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()]

代码的问题在于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",那么我们将在第 5 行输入 if 语句。然后我们将转到第 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 的值,即使您不想再次检查它们,其余条件也可能为真(例如:if color==1: color=2; if color==2: color=1将颜色重置为 1,因为第二个条件再次为真)。这就是为什么建议使用elifelse 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

我会添加一个检查,color1属于列夫·莱维茨基解决方案的colors。为了避免丑陋的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")

最新更新