1.条件和条件语句

1 )布尔值的用武之地

False None 0 "" () [] {}

>>> True
True
>>> False
False
>>> True == 1
True
>>> False == 0
True
>>> True + False + 42
43

>>> bool('I think, therefore I am')
True
>>> bool(42)
True
>>> bool('')
False
>>> bool(0)
False

2)有条件地执行和 if 语句

name = input('What is your name? ')
if name.endswith('Gumby'):
print('Hello, Mr. Gumby')

3）else 子句

name = input('What is your name?')
if name.endswith('Gumby'):
print('Hello, Mr. Gumby')
else:
print('Hello, stranger')

status = "friend" if name.endswith("Gumby") else "stranger"

4）elif 子句

num = int(input('Enter a number: '))
ifnum > 0:
print('The number is positive')
elifnum < 0:
print('The number is negative')
else:
print('The number is zero')

5）代码块嵌套

name = input('What is your name? ')
if name.endswith('Gumby'):
if name.startswith('Mr.'):
print('Hello, Mr. Gumby')
elif name.startswith('Mrs.'):
print('Hello, Mrs. Gumby')
else:
print('Hello, Gumby')
else:
print('Hello, stranger')

6）更复杂的条件
1. 比较运算符

Python比较运算符

*  相等运算符

>>> "foo" == "foo"
True
>>> "foo" == "bar"
False

>>> "foo" = "foo"
SyntaxError: can't assign to literal

*  is：相同运算符

>>> x = y = [1, 2, 3]
>>> z = [1, 2, 3]
>>> x == y
True
>>> x == z
True
>>> x is y
True
>>> x is z
False

z的结果却为False。为何会这样呢？因为is检查两个对象是否相同（而不是相等）。变量x和y指向同一个列表，而z指向另一个列表（其中包含的值以及这些值的排列顺序都与前一个列表相同）。这两个列表虽然相等，但并非同一个对象。这好像不可理喻？请看下面的示例：
>>> x = [1, 2, 3]
>>> y = [2, 4]
>>> x is not y
True
>>> del x[2]
>>> y[1] = 1
>>> y.reverse()

y相反）的结果为True，接下来，我稍微修改了这两个列表，现在它们虽然相等，但依然是两个不同的列表。
>>> x == y
True
>>> x is y
False

* in：成员资格运算符

name = input('What is your name?')
if 's' in name:
print('Your name contains the letter "s".')
else:
print('Your name does not contain the letter "s".')

*  字符串和序列的比较

>>> "alpha" < "beta"
True

>>> "a" < "B"
False

>>> "a".lower() < "B".lower()
True
>>> 'FnOrD'.lower() == 'Fnord'.lower()
True

>>> [1, 2] < [2, 1]
True

>>> [2, [1, 4]] < [2, [1, 5]]
True

2. 布尔运算符

number = int(input('Enter a number between 1 and 10: '))
if number <= 10:

if number >= 1:
print('Great!')
else:
print('Wrong!')
else:
print('Wrong!')

number = int(input('Enter a number between 1 and 10: '))
if number <= 10 and number >= 1:
print('Great!')
else:
print('Wrong!')

if ((cash > price) or customer_has_good_credit) and not out_of_stock:
give_goods()

y才为真。因此如果x为假，这个表达式将立即返回假，而不关心y。实际上，如果x为假，这个表达式将返回x，否则返回y。这种行为称为短路逻辑（或者延迟求值）：布尔运算符常被称为逻辑运算符，在有些情况下将“绕过”第二个值。对于运算符or，情况亦如此。在表达式x
or y中，如果x为真，就返回x，否则返回y。请注意，这意味着位于布尔运算符后面的代码（如函数调用）可能根本不会执行。像下面这样的代码就利用了这种行为：

GitHub

Gitee