【Kaggle】Python - 3 布尔值和条件语句
布尔值(Booleans)
Python 有一种类型叫做 bool,它只有两个可能的取值:True 和 False。
x = True
print(x)
print(type(x))
通常我们不是直接在代码中写 True 或 False,而是通过布尔运算符来得到布尔值。
这些运算符用于回答是/否类型的问题。
下面我们将介绍常见的运算。
比较运算(Comparison Operations)
| 操作 | 含义 |
|---|---|
a == b |
a 等于 b |
a != b |
a 不等于 b |
a < b |
a 小于 b |
a > b |
a 大于 b |
a <= b |
a 小于或等于 b |
a >= b |
a 大于或等于 b |
def can_run_for_president(age):
"""判断给定年龄的人能否在美国竞选总统?"""
# 美国宪法规定必须至少 35 岁
return age >= 35
print("Can a 19-year-old run for president?", can_run_for_president(19))
print("Can a 45-year-old run for president?", can_run_for_president(45))
比较通常与预期一致:
print(3.0 == 3)
但有时也会令人困惑:
print('3' == 3)
比较运算可以与算术运算结合使用来表示各种数学测试。
例如,可以通过取模来检测奇数:
def is_odd(n):
return (n % 2) == 1
print("Is 100 odd?", is_odd(100))
print("Is -1 odd?", is_odd(-1))
记住在比较时使用 ==,不要用 =。
写 n == 2 是在询问 n 的值是否等于 2,而写 n = 2 则是把 2 赋值给 n。
布尔值的组合
可以使用 and、or、not 来组合布尔值。
下面把前面的函数做得更准确一些:
def can_run_for_president(age, is_natural_born_citizen):
"""判断给定年龄和公民身份的人是否能在美国竞选总统?"""
# 美国宪法规定必须是天生公民并且至少 35 岁
return is_natural_born_citizen and (age >= 35)
print(can_run_for_president(19, True))
print(can_run_for_president(55, False))
print(can_run_for_president(55, True))
快速猜一猜下面这个表达式的值:
print(True or True and False)
为了解这个表达式,需要知道运算优先级。and 在 or 之前被求值,所以上面的表达式是 True。
如果从左到右先算 True or True,结果为 True,再与 False 做 and 会得到 False,这不是正确的求值顺序。
你可以查看优先级说明,但更好的做法是多用括号,既能避免错误也能让代码更易读。
例如,考虑:
prepared_for_weather = have_umbrella or rain_level < 5 and have_hood or not rain_level > 0 and is_workday
我想表达的意思是:
- 如果我有伞就安全;
- 或者如果雨不大并且有帽子也安全;
- 否则,只有在下雨并且是工作日时我才不安全。
添加括号可以修复可读性与潜在错误:
prepared_for_weather = have_umbrella or (rain_level < 5 and have_hood) or not (rain_level > 0 and is_workday)
你也可以用更多括号或分行来增强可读性:
prepared_for_weather = (
have_umbrella
or ((rain_level < 5) and have_hood)
or (not (rain_level > 0 and is_workday))
)
条件语句(Conditionals)
布尔值最有用的场景之一是与条件语句结合,使用 if、elif 和 else。
条件语句允许根据布尔条件决定执行哪些代码。
例如:
def inspect(x):
if x == 0:
print(x, "is zero")
elif x > 0:
print(x, "is positive")
elif x < 0:
print(x, "is negative")
else:
print(x, "is unlike anything I've ever seen...")
inspect(0)
inspect(-15)
elif 是 “else if” 的缩写;elif 和 else 块都是可选的,可以有任意多个 elif。
注意
冒号(:)和缩进用于表示代码块,这与定义函数时的语法相同。
def f(x):
if x > 0:
print("Only printed when x is positive; x =", x)
print("Also only printed when x is positive; x =", x)
print("Always printed, regardless of x's value; x =", x)
f(1)
f(0)
布尔转换(Boolean conversion)
Python 有 bool() 函数,可以将值转换为布尔值:
print(bool(1)) # 除 0 外的数字都被视为 True
print(bool(0))
print(bool("asf")) # 非空字符串为 True
print(bool(""))
# 一般来说,空序列(字符串、列表、元组等)是 False,其他为 True
在需要布尔值的地方可以直接使用非布尔对象,Python 会隐式将其转换为相应的布尔值:
if 0:
print(0)
elif "spam":
print("spam")
更多推荐


所有评论(0)