【问题标题】:What should I do if an else statement is not executing after if/elif statements didn't meet the condition? [duplicate]if/elif 语句不满足条件后没有执行 else 语句怎么办? [复制]
【发布时间】:2019-12-06 11:13:37
【问题描述】:

我的代码有问题。每当rice_ingredients = input("How many ingredients: ") is > 8 而不是 else 语句的输出应该是“成分太多,不专业!”时,我都会收到一个用于 if 语句的输出。

def Chef() -> int:
    rice_ingredients = input("How many ingredients: ")
    for ingredients in rice_ingredients:
        if ingredients <= str(6):
            print("Professional")
        elif ingredients == str(7) or str(8):
            print("Well, can still be considered professional")
        else:
            print("Too much ingredients, unprofessional!")
        exit()

【问题讨论】:

  • elif ingredients == str(7) or str(8): == elif (ingredients == str(7)) or (str(8)):。你需要要么elif ingredients == str(7) or ingredients == str(8):要么elif ingredients in [str(7), str(8)]:

标签: python python-3.x if-statement visual-studio-code


【解决方案1】:

这个:

elif ingredients == str(7) or str(8):

不同于:

elif ingredients == str(7) or ingredients == str(8):

还有这个:

elif ingredients == (str(7) or str(8)):

第二种形式大概就是你要实现的逻辑,也可以写成:

elif any(ingredients == str(x) for x in (7, 8)):

或:

elif ingredients in {str(7), str(8)}:

编辑

另外,也许您想检查整个代码:

  • Chef() 不遵循 PEP8 命名约定并且不返回 int(与您的注释相反)。
  • rice_ingredients 包含一个应该包含单个数字的字符串(基于您提出的问题 "How many ingredients: "),循环遍历它会导致您分别考虑输入的每个字符,因此如果您键入 123,@987654332 @ 在每次迭代中将是 123。很可能,您想要做的是将rice_ingredients 转换为int,例如rice_ingredients = input("How many ingredients: ") 变成 rice_ingredients = int(input("How many ingredients: "))
  • 现在rice_ingredientsint,您无需将其与字符串进行比较
  • exit() 将完全退出解释器,如果您只想退出函数,请改用 return。请注意,不需要在函数末尾显式退出 - 它会自动退出
  • if-elif-else 子句的逻辑可以进一步简化

可能的清理代码如下所示:

def chef():
    rice_ingredients = int(input("How many ingredients: "))
    if rice_ingredients <= 6:
        print("Professional")
    elif rice_ingredients <= 8:
        print("Well, can still be considered professional")
    else:
        print("Too much ingredients, unprofessional!")

【讨论】:

    【解决方案2】:

    我不确定我是否理解你的问题,但有一个逻辑错误:

    def Chef() -> int:
        rice_ingredients = input("How many ingredients: ")
        for ingredients in rice_ingredients:
            if ingredients <= str(6):
                print("Professional")
            #elif ingredients == str(7) or str(8): please note
            elif ingredients == str(7) or ingredients == str(8):
                print("Well, can still be considered professional")
            else:
                print("Too much ingredients, unprofessional!")
            exit()
    

    还请注意,在这种情况下,您应该考虑使用不同的检查方式,例如(&lt;&gt;)或 in

    【讨论】:

      【解决方案3】:

      这也可以解决您的问题。本质上你想比较数字,转换为整数是合乎逻辑的。

      def Chef() -> int:
          rice_ingredients = input("How many ingredients: ")
          for ingredients in rice_ingredients:
              value = int(ingredients)
              if value < 7:
                  print("Professional")
              elif value < 9:
                  print("Well, can still be considered professional")
              else:
                  print("Too much ingredients, unprofessional!")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-17
        • 2020-06-07
        • 2017-07-03
        • 1970-01-01
        • 2016-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多