选择结果
选择结构通过判断条件是否成立,来决定执行哪个分支。选择结构有多种形式,分为:单分支、双分支、多分支。单分支选择结构
if语句单分支结果的语法形式如下:
if 条件表达式:
语句/语句块
其中:
- 条件表达式:可以是逻辑表达式、关系表达式、算术表达式等等
- 语句/语句块:可以是一条语句,也可以是多条语句。多条语句,缩进必须对齐一致
num = input('请输入一个数字:')
if int(num)<10:
print(num)
条件表达式详解
在选择和循环结构中,条件表达式的值为False的情况如下:
False 0 0.0 空值None、空序列对象(空列表 空元祖 空集合 空字典 空字符串) 、空range对象、空迭代对象
其他情况,均为True.
if 3: #整数作为条件表达式
print('ok')
a = [] #列表作为表达式 空列表为False
if a:
print('空列表 False')
s = 'False' #非空字符串
if s:
print('非空字符串')
c = 9
if 3<c and c<20:
print("3<c and c<20")
if True: #布尔值
print("True")
条件表达式中,不能有赋值操作符 =
双分支选择结构
if 条件表达式:
语句块/语句
else:
语句
num = input('请输入一个数字')
if int(num)<10:
print(num)
else:
print('数字太大')
三元条件运算符
python提供了三元运算符,用来在某些简单双分支赋值情况,三元条件运算符语法:
条件为真的值 if (条件表达式) else 条件为假时的值
num = input('请输入一个数字')
print(num if int(num)<10 else '数字太大')
多分支选择结构
if 条件表达式1:
语句/语句块
elif 条件表达式2:
语句/语句块
…
else:
语句/语句块
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zI3Enszj-1610702861355)(.\images\image-20210115160316557.png)]
score = int(input('请输入分数'))
grade = ''
if score<60:
grade = '不及格'
elif score>=60 and score<70:
grade='及格'
elif score>=70 and score<80:
grade = '良好'
else:
grade = '优秀'
print('分数是{0},等级是{1}'.format(score,grade))
选择结构嵌套
选择结构可以嵌套,使用时一定要注意控制好不同级别代码块的缩进,因为缩进决定了代码的从属关系。
if 表达式1:
语句块1
if 表达式2:
语句块2:
else:
语句块
else:
语句块
循环结构
循环结构用了重复执行一条或多条语句。表达式的逻辑:如果符合条件,则反复执行循环体中的语句。在每次执行完后都会判断一次条件是否为True,如果为True则循环重复执行。
循环体里面的语句至少应该包含改变条件表达式的语句,以使循环趋于结束,否则,就会变成一个死循环。
while循环
while 判断条件(condition): 执行语句(statements)……
n = 100
sum = 0
counter = 1
while counter <= n:
sum = sum + counter
counter += 1
print("1 到 %d 之和为: %d" % (n,sum))
无限循环
我们可以通过设置条件表达式永远不为 false 来实现无限循环
var = 1
while var == 1 : # 表达式永远为 true
num = int(input("输入一个数字 :"))
print ("你输入的数字是: ", num)
print ("Good bye!")
可以使用 CTRL+C 来退出当前的无限循环。
无限循环在服务器上客户端的实时请求非常有用。
for循环和可迭代对象遍历
for循环通常用于可迭代对象的遍历。for循环的语法格式如下:
for 变量 in 可迭代对象:
循环体语句
可迭代对象
- 序列:字符串 列表 元祖
- 字典
- 迭代器对齐
- 生成器对象
for x in list('slp'):
print(x)
d = {'name':'slp','age':18,'address':'bj'}
for x in d: #遍历所有的key
print(x)
for x in d.keys():#遍历字典所有的key
print(x)
for x in d.values():#遍历字典所有的value
print(x)
for x in d.items():#遍历字典所有的键值对
print(x)
range对象
range对象是一个迭代器对象,用了产生指定范围的数字序列,格式为:range(start,end [,step])
sum_all=0
sum_even=0
sum_odd=0
for num in range(101):
sum_all +=num
if num%2 ==0:
sum_even+=num
else:
sum_odd+=num
print(sum_all,sum_even,sum_odd)
嵌套循环
一个循环内可以嵌入另一个循环,一般称为嵌套循环,或者多重循环
eg:打印99乘法表:
for m in range(1,10):
for n in range(1,m+1):
print(m,'*',n,'=',m*n ,end='\t')
print('')
break语句
break语句可用于while和for循环,用了结束整个循环。当有嵌套时,break语句只能跳出最近一层的循环
while True:
a = input('输入Q退出')
if a.upper() == 'Q':
print('退出')
break
else:
print('继续')
continue语句
continue用于结束本次循环继续下一次,嵌套的时候也是应用与最近的一次循环。
n = 5
while n > 0:
n -= 1
if n == 2:
continue
print(n)
print('循环结束。')
empNum = 0
salarySum = 0;
salarys = []
while True:
s = input('请输入员工的工资(q或Q结束)')
if s.upper() =='Q':
print('录入完成 退出')
break;
if float(s)<0:
continue;
empNum+=1
salarys.append(float(s))
salarySum +=float(s)
print('员工数{0}'.format(empNum))
print('录入薪资',salarys)
print('平均薪资{0}'.format(salarySum/empNum))
pass语句
Python pass是空语句,是为了保持程序结构的完整性。
pass 不做任何事情,一般用做占位语句,
循环代码优化
- 尽量减少循环内部不必要的计算
- 嵌套循环中,尽量减少内层循环的计数,尽可能向外提
- 局部变量查询较快,尽量使用局部变量
其他优化手段
- 连接多个字符串,使用join而不使用+
- 列表进行元素插入和删除,尽量在尾部操作
使用zip()并行迭代
我们可以通过zip()函数对多个序列进行并行迭代,zip()函数再最短序列用完的时候会停止
names = ('a','b','c')
ages =(16,10)
jobs = ('teacher','programmer','drive')
for name,age,job in zip(names,ages,jobs):
print("{0}--{1}--{2}".format(name,age,job))