Python 编程/决策控制
Python,像许多其他计算机编程语言一样,使用布尔逻辑进行其决策控制。也就是说,Python 解释器比较一个或多个值,以决定是否执行一段代码,前提是语法和指令正确。
决策控制被进一步分为两大类,条件和重复。条件逻辑简单地使用关键字if和布尔表达式来决定是否执行代码块。重复在条件结构的基础上,为我们提供了一种简单的方法,在布尔表达式计算结果为true时,重复执行代码块。
这里有一个布尔表达式的小例子(你不必输入它)
a = 6
b = 7
c = 42
print (1, a == 6)
print (2, a == 7)
print (3, a == 6 and b == 7)
print (4, a == 7 and b == 7)
print (5, not a == 7 and b == 7)
print (6, a == 7 or b == 7)
print (7, a == 7 or b == 6)
print (8, not (a == 7 and b == 6))
print (9, not a == 7 and b == 6)
输出结果为
1 True 2 False 3 True 4 False 5 True 6 True 7 False 8 True 9 False
发生了什么?程序包含一堆奇怪的print语句。每个print语句打印一个数字和一个表达式。数字用于帮助跟踪我正在处理哪个语句。请注意每个表达式最终都是 True 还是 False;这些是 Python 的内置值。这些行
print (1, a == 6)
print (2, a == 7)
分别打印出 True 和 False,正如预期的那样,因为第一个是真,第二个是假。第三个 print 语句,print (3, a == 6 and b == 7),有点不同。运算符and表示如果之前和之后的语句都为真,那么整个表达式为真,否则整个表达式为假。下一行,print (4, a == 7 and b == 7),展示了如果表达式的一部分为假,那么整个表达式都为假。运算符andandand的行为可以总结如下
表达式 | 结果 |
---|---|
true and true | true |
true and false | false |
false and true | false |
false and false | false |
请注意,如果第一个表达式为假,Python 不会检查第二个表达式,因为它知道整个表达式为假。
下一行,print (5, not a == 7 and b == 7),使用了not运算符。not它只是给出表达式的相反(表达式可以改写为print (5, a != 7 and b == 7))。这里是表格
表达式 | 结果 |
---|---|
not true | false |
not false | true |
接下来的两行,print (6, a == 7 or b == 7)andprint (7, a == 7 or b == 6),使用了or运算符。运算符oror
表达式 | 结果 |
---|---|
如果第一个表达式为真,或者第二个表达式为真,或者两者都为真,则返回真。如果两者都不为真,则返回假。这里是表格 | true |
true or true | true |
true or false | true |
false or true | false |
false or falseor请注意,如果第一个表达式为真,Python 不会检查第二个表达式,因为它知道整个表达式为真。这是因为
or如果至少一个表达式为真,则为真。第一部分为真,所以第二部分可以是假或真,但整个表达式仍然为真。and接下来的两行,print (8, not (a == 7 and b == 6))notprint (9, not a == 7 and b == 6),展示了括号可以用来分组表达式,并强制先评估一部分。请注意,括号将表达式从假变为真。这是因为括号强制运算符not
应用于整个表达式,而不是仅仅应用于
list = ["Life","The Universe","Everything","Jack","Jill","Life","Jill"]
# Make a copy of the list.
copy = list[:]
# Sort the copy
copy.sort()
prev = copy[0]
del copy[0]
count = 0
# Go through the list searching for a match
while count < len(copy) and copy[count] != prev:
prev = copy[count]
count = count + 1
# If a match was not found then count can't be < len
# since the while loop continues while count is < len
# and no match is found
if count < len(copy):
print ("First Match:",prev)
a == 7
部分。
First Match: Jill
这是一个使用布尔表达式的例子请参见列表章节,以了解 copy = list[:]
中出现的切片运算符 [:] 的解释。这里是输出结果这个程序通过持续检查匹配来工作while count < len(copy) and copy[count] != prev。当countand大于copy的最后一个索引,或者找到匹配项时,while不再为真,所以循环退出。然后
ifand简单地检查以确保andwhile退出是因为找到了匹配项。这个例子中使用了另一个“技巧”。如果你查看and的表格,你会注意到第三个条目是“false and won't check”。如果andcount >= len(copy)and(换句话说,这个程序通过持续检查匹配来工作count < len(copy)。当为假),那么就不会查看 copy[count]。这是因为 Python 知道,如果第一个为假,那么两者不可能都为真。这被称为短路,如果第二个表达式在出现错误时会导致错误,它将非常有用。我使用了第一个表达式(count < len(copy))来检查count.)
是否为
copy
的有效索引。(如果你不信,请删除匹配项“Jill”和“Life”,检查它是否仍然有效,然后反转count < len(copy) and copy[count] != prev
## This programs asks a user for a name and a password.
# It then checks them to make sure that the user is allowed in.
# Note that this is a simple and insecure example,
# real password code should never be implemented this way.
name = raw_input("What is your name? ")
password = raw_input("What is the password? ")
if name == "Josh" and password == "Friday":
print ("Welcome Josh")
elif name == "Fred" and password == "Rock":
print ("Welcome Fred")
else:
print ("I don't know you.")
的顺序为
What is your name? Josh What is the password? Friday Welcome Josh What is your name? Bill What is the password? Saturday I don't know you.
copy[count] != prev and count < len(copy)
布尔表达式可以在你需要同时检查两个或更多不同事物时使用。- 示例