Python基础知识(三)
Python基础知识(三)
(一)循环结构和选择结构
1. 条件表达式
绝大部分合法的Python表达式都可以作为条件表达式。
在选择和循环结构中,条件表达式的值只要不是False、0(或0.0、0 j等)、空值None、空列表、空元组、空集合、空字典、空字符串、空range对象或其他空迭代对象,Python解释器均认为与True等价。
>>> if 666: #使用整数作为条件表达式
print(9)
9
>>> a = [3, 2, 1]
>>> if a: #使用列表作为条件表达式
print(a)
[3, 2, 1]
>>> a = []
>>> if a: #空列表等价于False
print(a)
else:
print('empty')
empty
>>> i = s = 0
>>> while i <= 10: #使用关系表达式作为条件表达式
s += i
i += 1
>>> print(s)
55
>>> i = s = 0
>>> while True: #使用常量True作为条件表达式
s += i
i += 1
if i > 10: #符合特定条件时使用break语句退出循环
break
>>> print(s)
55
>>> s = 0
>>> for i in range(0, 11, 1): #遍历序列元素
s += i
>>> print(s)
55
(1)关系运算符
Python中的关系运算符可以连续使用,这样不仅可以减少代码量,也比较符合人类的思维方式。
>>> print(1<2<3) #等价于1<2 and 2<3
True
>>> print(1<2>3)
False
>>> print(1<3>2)
True
在Python语法中,条件表达式中不允许使用赋值运算符“=”,避免了误将关系运算符“==”写作赋值运算符“=”带来的麻烦。在条件表达式中使用赋值运算符“=”将抛出异常,提示语法错误。
>>> if a=3: #条件表达式中不允许使用赋值运算符
SyntaxError: invalid syntax
>>> if (a=3) and (b=4):
SyntaxError: invalid syntax
(2)逻辑运算符
逻辑运算符and、or、not分别表示逻辑与、逻辑或、逻辑非。对于and而言,必须两侧的表达式都等价于True,整个表达式才等价于True。
对于or而言,只要两侧的表达式中有一个等价于True,整个表达式就等价于True;对于not而言,如果后面的表达式等价于False,整个表达式就等价于True。
逻辑运算符and和or具有短路求值或惰性求值的特点,可能不会对所有表达式进行求值,而是只计算必须计算的表达式的值。
>>> 3 and 5 #整个表达式的值是最后一个计算的子表达式的值
5
>>> 3 or 5
3
>>> 0 and 5 #0等价于False
0
>>> 0 or 5
5
>>> not [1, 2, 3] #非空列表等价于True
False
>>> not {
} #空字典等价于False
True
2. 选择结构
常见的选择结构有单分支选择结构、双分支选择结构、多分支选择结构以及嵌套的分支结构,也可以构造跳转表来实现类似的逻辑。
循环结构和异常处理结构中也可以带有“else”子句,可以看作是特殊形式的选择结构。
2.1 单分支选择结构
编写程序,输入使用空格分隔的两个整数,然后按升序输出。
x = input('Input two number:')
a, b = map(int, x.split())
if a > b:
a, b = b, a #序列解包,交换两个变量的值
print(a, b)
2.2 双分支选择结构
求解鸡兔同笼问题。
jitu, tui = map(int, input('请输入鸡兔总数和腿总数:').split())
tu = (tui - jitu*2) / 2
if int(tu) == tu:
print('鸡:{0},兔:{1}'.format(int(jitu-tu), int(tu)))
else:
print('数据不正确,无解')
Python还提供了一个三元运算符,并且在三元运算符构成的表达式中还可以嵌套三元运算符,可以实现与选择结构相似的效果。语法为
value1 if condition else value2
当条件表达式condition的值与True等价时,表达式的值为value1,否则表达式的值为value2。
>>> b = 6 if 5>13 else 9 #赋值运算符优先级非常低
>>> b
9
2.3 多分支选择结构
使用多分支选择结构将成绩从百分制变换到等级制。
def func(score):
if score > 100 or score < 0:
return 'wrong score.must between 0 and 100.'
elif score >= 90:
return 'A'
elif score >= 80:
return 'B'
elif score >= 70:
return 'C'
elif score >= 60:
return 'D'
else:
return 'F'
2.4 选择结构的嵌套
使用嵌套选择结构将成绩从百分制变换到等级制。
def func(score):
degree = 'DCBAAE'
if score > 100 or score < 0:
return 'wrong score.must between 0 and 100.'
else:
index = (score - 60) // 10
if index >= 0:
return degree[index]
else:
return degree[-1]
3. 循环结构
Python主要有for循环和while循环两种形式的循环结构,多个循环可以嵌套使用,并且还经常和选择结构嵌套使用来实现复杂的业务逻辑。
while循环一般用于循环次数难以提前确定的情况,当然也可以用于循环次数确定的情况;
for循环一般用于循环次数可以提前确定的情况,尤其适用于枚举或遍历序列或迭代对象中元素的场合。
对于带有else子句的循环结构,如果循环因为条件表达式不成立或序列遍历结束而自然结束时则执行else结构中的语句,如果循环是因为执行了break语句而导致循环提前结束则不会执行else中的语句。
两种循环结构的完整语法形式分别为:
while 条件表达式:
循环体
[else:
else子句代码块]
和
for 取值 in 序列或迭代对象:
循环体
[else:
else子句代码块]
3.1 for循环和while循环
编写程序,输出1~100之间能被7整除但不能同时被5整除的所有整数。
for i in range(1, 101):
if i%7==0 and i%5!=0:
print(i)
编写程序,打印九九乘法表。
for i in range(1, 10):
for j in range(1, i+1):
print('{0}*{1}={2}'.format(i,j,i*j), end=' ')
print() #打印空行
3.2 break和continue语句
一旦break语句被执行,将使得break语句所属层次的循环提前结束;
continue语句的作用是提前结束本次循环,忽略continue之后的所有语句,提前进入下一次循环。
编写程序,计算小于100的最大素数。
for n in range(100, 1, -1):
if n%2 == 0:
continue
for i in range(3, int(n**0.5)+1, 2):
if n%i ==