条件表达式
算术运算符:+、-、*、/、//、%、**
关系运算符:>、<、==、<=、>=、!=
,可以连续使用,
如:>>>1 < 2 < 3【有的编译环境不同需要在前面加个print,变成:print(1 < 2 < 3) ,下面也是一样】
True
>>>1 < 2 > 3
False
>>>1 < 3 > 2
True
测试运算符:in、not in、is、 is not
逻辑运算符:and、or、not
,注意短路求值
位运算符:~、&、l、^、<<、>>
矩阵乘法运算符:@
在选择和循环结构中,条件表达式的值只要不是False、0(或0.0、0j等)、空值None、空列表、空元组、空集合、空字典、空字符串、空 range对象或其他空迭代对象,Python解释器均认为与True等价。
从这个意义上来讲,几乎所有的Python合法表达式都可以作为条件表达式,包括含有函数调用的表达式
>>> if 3: #使用整数作为条件表达式
print(5)
# 输出结果:5
>>> a = [1, 2, 3]
>>> if a: #使用列表作为条件表达式
print(a)
# 输出结果:[1, 2, 3]
>>> a = []
>>> if a:
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
>>> print(s)
# 输出结果:55
>>> s = 0
>>> for i in range(0, 11, 1): #遍历迭代对象中的所有元素
s += i
>>> print(s)
# 输出结果:55
关系运算符具有短路求值或惰性求值的特点,只计算必须计算的表达式的值。
以"and"为例,对于表达式"表达式1 and 表达式2"而言,如果"表达式1"的值为"False"或其他等价值时,不论"表达式2"的值是什么,整个表达式的值都是"False"
此时"表达式2"的值不影响整个表达式的值,因此将不会被计算,从而减少不必要的计算和判断
选择语句
单分支选择结构
if 表达式:
语句块
x = input('Input two number:')
a, b = map(int, x.split())
if a > b:
a, b = b, a #序列解包,交换两个变量的值
print(a, b)
代码如下(示例):
a = 3
b = 5
if a>b:
a, b = b, a
print(a,b)
# 输出结果:3 5
双分支结构
if 表达式:
语句块1
else:
语句块2
代码如下(示例):
>>> a = ['1', '2', '3', '4', '5']
>>> if a:
print(a)
else:
print('Empty')
# 输出结果:['1', '2', '3', '4', '5']
a = 3
b = 5
if a>b:
print("the max no is",a)
else:
print("the max no is",b)
# 输出结果:the max no is 5
多分支结构
关键字 elif 是else if 的缩写。
if 表达式1:
语句块1
elif 表达式2:
语句块2
elif 表达式3:
语句块3
else:
语句块4
利用多分支选择结构将成绩从百分制变换到等级制
score=int(input('input score:'))
if score > 100:
print('wrong score.must <= 100.')
elif score >= 80:
print('A')
elif score >= 60:
print('B')
elif score >= 0:
print('C')
else:
print('wrong score.must >0')
选择结构的嵌套
注意:缩进必须要正确并且一致。
if 表达式1:
语句块1
if 表达式2:
语句块2
else:
语句块3
else:
if 表达式4:
语句块4
使用嵌套的选择结构实现百分制成绩到等级制的转换
score=int(input('input score:'))
if score > 100 or score < 0:
print('wrong score.must between 0 and 100.')
else:
if score >= 80:
print('A')
elif score >= 60:
print('B')
elif score >= 0:
print('C')
循环结构
for循环
for 取值 in 序列或迭代对象:
循环体
[else:
else子句代码块]
for循环一般用于循环次数可以提前确定的情况,尤其是用于枚举序列或迭代对象中的元素。
一般优先考虑使用for循环。
若循环因为条件表达式不成立而自然结束,则执行else结构中的子句;如果因为执行了break语句导致的提前结束,则不执行else子句。
#循环正常结束,执行else语句块
for i in [1,2,3,4]:
print(i)
else:
print('else')
#break跳出循环后else语句块不执行
for i in [1,2,3,4]:
print(i)
if i>2:
break
else:
print('else')
for 循环示例:
求1-2+3-4+5 … 99的所有数的和
sum=0
for i in range(0,100):
if i%2==0:
sum-=i
else:
sum+=i
print(sum)
while循环
while 条件表达式:
循环体
[else:
else子句代码块]
while循环一般用于循环次数难以提前确定的情况,也可以用于循环次数确定的情况。
若循环因为条件表达式不成立而自然结束,则执行else结构中的子句;如果因为执行了break语句导致的提前结束,则不执行else子句。
相同或不同的循环结构之间都可以互相嵌套,实现更为复杂的逻辑。
while循环示例:
用while循环来实现计算100以内所有奇数之和。
sum=0
n=99
while n>0:
sum=sum+n
n=n-2
print(sum)
break和continue语句
break语句在while循环和for循环中都可以使用,一般放在if选择结构中,一旦break语句被执行,将使得整个循环提前结束。
continue语句的作用是终止当前循环,并忽略continue之后的语句,然后回到循环的顶端,提前进入下一次循环。
除非break语句让代码更简单或更清晰,否则不要轻易使用。
计算小于100的最大素数,注意break语句和else子句的用法
for n in range(100,1,-1):
for i in range(2,n):
if n%i == 0:
break
else:
print(n)
break
删除上面代码中最后一个break语句,则可以用来输出100以内的所有素数。
for n in range(100,1,-1):
for i in range(2,n):
if n%i == 0:
break
else:
print(n)
警惕continue可能带来的问题:输出10以内的奇数
i=0
while i<10:
if i%2 == 0:
continue
print(i,end=' ')
i+=1
# 永不结束的死循环,Ctrl+C强行终止。