# Python 条件语句 > 原文: [https://javabeginnerstutorial.com/python-tutorial/python3-conditional-statements-2/](https://javabeginnerstutorial.com/python-tutorial/python3-conditional-statements-2/) ## 条件决策 在介绍了有关 Python 3 中变量的基本类型的大量介绍性文章之后,现在该继续介绍条件运算符了,这些条件运算符可帮助我们在运行时基于不同条件创建应用流。 到目前为止,我们只有一个流程:启动应用,(可能)需要用户输入并显示一个结果。 通过条件更改。 根据输入或运行时创建的其他参数(您知道,有时不需要输入),我们可以输出不同的结果。 我们来看一个简单的“游戏” **FizzBu​​zz** 示例。 游戏的描述非常简单:如果一个数字可以被 3 整除,那么我们将显示“`Fizz`”;当一个数字可以被 5 整除时,我们将显示“`Buzz`”;当一个数字被 3 和 5 整除时,我们将显示“`FizzBu​​zz`”。 ; 否则,我们显示数字。 让我们将以下代码保存到名为`fizzbuzz.py`的文件中: ```py n = int(input("Enter a number: ")) if n%15 == 0: print("FizzBuzz") elif n%3 == 0: print("Fizz") elif n%5 == 0: print("Buzz") else: print(n) ``` 如您所见,此应用现在受到了一定的限制,因为它在启动时仅执行一次,但是在下一篇文章中,我将介绍循环,然后我们将变得势不可挡,并且可以编写可以运行并运行的应用……希望您能理解这个想法。 如果我运行该应用,一些示例输出将如下所示: ```py MB:examples GHajba$ python3 fizzbuzz.py Enter a number: 5 Buzz MB:examples GHajba$ python3 fizzbuzz.py Enter a number: 6 Fizz MB:examples GHajba$ python3 fizzbuzz.py Enter a number: 2 2 MB:examples GHajba$ python3 fizzbuzz.py Enter a number: 45 FizzBuzz ``` ## 关于条件 条件句根据某些条件改变应用流程。 在大多数情况下,这是基于某些变量的值,有时是基于输入。 这一切都取决于您的应用的设计方式。 一些开发人员说,在应用流中没有分支的情况下编写应用很困难。 好吧,我们已经看到了可能,但是这以一种不好的方式降低了用户体验。 最好基于会改变编程状态的条件创建分支。 上面显示的“FizzBu​​zz”示例是一个不错的脚本,它显示了通过分支我们可以在编码时做很多不同。 但是,以上示例涵盖了 Python 中`if-then-else`构造的相同程序流。 `if`语句需要一个表达式,其值必须为`True`或`False`。 如果表达式的计算结果为`True`,则执行此语句后的代码块。 如果该语句的求值结果为`False`,则跳过此块。 `elif`语句再次要求一个求值结果为`True`或`False`的语句,并且仅在前一个语句被求值为`False`时才被求值。 否则,甚至不会求值该块。 如果先前的`if`块和所有先前的`elif`块的求值为`False`,则`else`块执行。 这里不需要任何语句进行求值。 如果所有以前的表达式求值为`False`,则`else`块是默认情况。 条件块的基本构造如下: * 一个`if`块 * 零到任何`elif`块 * 零或一个`else`块 这意味着`if`块必须始终存在。 但是,此`if`块不必后面带有任何`elif`或`else`语句。 但是,如果没有`if`块,则不能单独拥有`elif`或`else`块。 ```py if conditional_expression_1: statement_block_1 elif conditional_expression_2: statement_block_2 else: statement_block_3 ``` 而且,如果您有多个`if`语句,则将同时求值它们。 这意味着对于“FizzBu​​zz”示例,您不能使用简单的`if`块。 这是因为在这种情况下,每个`if`语句都会被求值,并且会导致您无法预期的结果。 ```py n = int(input("Enter a number: ")) if n%15 == 0: print("FizzBuzz") if n%3 == 0: print("Fizz") if n%5 == 0: print("Buzz") else: print(n) MB:examples GHajba$ python fizzbuzz_wrong.py Enter a number: 15 FizzBuzz Fizz Buzz MB:examples GHajba$ python fizzbuzz_wrong.py Enter a number: 3 Fizz 3 ``` 上面的代码示例演示了仅当前一个`if`块的值为`False`时,才对每个`if`块求值,并且执行最后的`else`。 ## 生活不仅是对还是错 不幸的是有人说相反,因为布尔条件不仅是对还是错。 使用 Python 时,在每种情况下 0 的求值结果均为`False`,其他所有数字均求值为`True`。 集合也是如此(当然也包括字符串)。 如果集合为空,则它在条件语句中求值为`False`,在任何其他情况下为`True`。 没有一个总是求值为`False`。 这就是为什么有人说很难用 Python 编写条件语句的原因。 但这始终取决于开发人员的口味。 “Python 禅宗”指出 显式胜于隐式。 但是,在这种情况下,隐式有时甚至更好。 这意味着您可以避免类似以下的构造: ```py if len(l) == 0: # do something if a == 0 or a is None: # do something else ``` 并用这些替换它们: ```py if not l: # do something if not a: # do something else ```