控制语句就是把语句组合成能完成一定功能的小逻辑模块,分为如下三类:
“顺序结构”代表 “先执行a,再执行b” 的逻辑。比如,先找个女朋友,再给女朋友打电话;先订婚,再结婚;前面写的代码基本都是顺序结构
“条件判断结构”代表 “如果…,则…” 的逻辑。比如,如果女朋友来电,则迅速接电话;如果看到红灯,则停车;
“循环结构”代表 “如果…,则重复执行…” 的逻辑。比如,如果没打通女朋友电话,则再继续打一次; 如果没找到喜欢的人,则再继续找
选择结构
选择结构通过判断条件是否成立,来决定执行哪个分支。选择结构有多种形式,分为:单分支、双分支、多分支。
单分支
# 单分支
num = input("输入一个数字:")
if int(num)<10:
print("小于10的数:"+num)
条件表达式:Python所有的合法表达式都可以看做条件表达式,甚至包括函数调用的表达式
False:False、0、0.0、空值None、空序列对象(空列表、空元祖、空集合、空字典、空字符串)、空range对象、空迭代对象。
True:其他都是True
双分支结构
# 双分支
num = input("输入一个数字:")
if int(num) < 10:
print(num)
else:
print("数字太大")
三元条件运算符
将上面的代码用三元条件运算符实现:
num = input("输入一个数字:")
print(num if int(num)<10 else "数字太大")
多分支
# 多分支
score = int(input("请输入分数:"))
grade = ''
# if score<60:
# grade = "不及格"
# elif 60<=score<80:
# grade = "及格"
# elif 80<=score<90:
# grade = "良好"
# elif 90<=score<=100:
# grade = "优秀"
# print("分数是{0},等级是{1}".format(score, grade))
if score<60:
grade = "不及格"
elif score<80:
grade = "及格"
elif score<90:
grade = "良好"
elif score<=100:
grade = "优秀"
print("分数是{0},等级是{1}".format(score, grade))
选择结构嵌套
# 选择结构嵌套
score = int(input("请输入一个在0-100之间的数字:"))
grade = ""
if 0<=score<=100:
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >=60:
grade = "D"
else:
grade = "E"
else:
print("输入的分数有误,分数应该在0-100之间")
print(grade)
# 实现二:
score = int(input("请输入一个在0-100之间的数字:"))
grade = "ABCDE"
num = 0
if 0 <= score <= 100:
num = score//10
if num<6:num=5
else:
print("输入的分数有误,分数应该在0-100之间")
print(grade[9-num])
循环结构
循环结构用来重复执行一条或多条语句。表达这样的逻辑:如果符合条件,则反复执行循环体里的语句。在每次执行完后都会判断一次条件是否为True,如果为True则重复执行循环体里的语句。图示如下:
循环体里面的语句至少应该包含改变条件表达式的语句,以使循环趋于结束;否则,就会变成一个死循环。
while循环
# 打印1-10
num = 0
while num<=10:
print(num,end=" ")
num +=1
print()
# 1-100求和
num = 1
sum_all = 0
while(num<=100):
sum_all += num
num+=1
print(sum_all)
for循环
可迭代对象:序列。包含:字符串、列表、元组、字典、集合、迭代器对象、生成器函数、文件对象
# 遍历元组
for x in (20,30,40):
print(x*3,end=" ") # 60 90 120
print()
# 遍历字符串
for x in "sxt001":
print(x,end=" ") # s x t 0 0 1
print()
# 遍历字典
d = {'name':'hhc','age':18,'address':'广东省东莞市'}
# 遍历所有的key
for key in d.keys():
print(key,end=" ") # name age address
print()
# 遍历所有的value
for value in d.values():
print(value, end=" ") # hhc 18 广东省东莞市
print()
# 遍历所有的键值对
for item in d.items():
print(item, end=" ") # ('name', 'hhc') ('age', 18) ('address', '广东省东莞市')
print()
# range迭代器对象:range(start, end [,step])
sum_all = 0 # 1-100所有数的累加和
sum_even = 0 # 1-100偶数的累加和
sum_odd = 0 # 1-100奇数的累加和
for num in range(1,101):
sum_all += num
if num % 2 == 0:
sum_even += num
else:
sum_odd += num
print(sum_all, sum_even, sum_odd) # 5050 2550 2500
嵌套循环
# 嵌套循环
"""
0 0 0 0 0
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
"""
for i in range(5):
for j in range(5):
print(i,end=" ")
print()
# 九九乘法表
for i in range(1,10):
for j in range(1,i+1):
print(f"{i} * {j} = {i*j}",end="\t")
print()
break和continue
break:结束离自己最近的循环
while True:
a = input("输入字符q/Q退出:")
if a.upper() == 'Q':
break
print(a)
continue:结束当前循环,进入下一次循环
empNum = 0
salarySum= 0
salarys = []
while True:
s = input("请输入员工的薪资(按Q或q结束)")
if s.upper()=='Q':
print("录入结束")
break
if float(s)<0:
print("无效!继续录入!")
continue
print("录入成功!")
empNum +=1
salarys.append(float(s))
salarySum += float(s)
print("员工数{0}".format(empNum))
print("录入薪资:",salarys)
print("总发薪资:",salarySum)
print("平均薪资{0}".format(salarySum/empNum))
else语句
while、for循环可以附带一个else语句(可选)。如果for、while语句没有被break语句结束,则会执行else子句,否则不执行。语法格式如下:
推导式创建序列
列表推导式
print([x for x in range(1,5)]) # [1, 2, 3, 4]
print([x for x in "abcedf"]) # ['a', 'b', 'c', 'e', 'd', 'f']
字典推导式
# 字典推导式
values = ["北京","上海","深圳","广州"]
cities = {id*100:city for id,city in zip(range(1,5),values)}
print(cities) # {100: '北京', 200: '上海', 300: '深圳', 400: '广州'}
统计文本中字符串出现的次数
my_text = ' i love you, i love sxt, i love hhc'
char_count = {c:my_text.count(c) for c in my_text}
print(char_count)
# {' ': 9, 'i': 3, 'l': 3, 'o': 4, 'v': 3, 'e': 3, 'y': 1, 'u': 1, ',': # 2, 's': 1, 'x': 1, 't': 1, 'h': 2, 'c': 1}
集合推导式
# {99, 36, 72, 9, 45, 81, 18, 54, 90, 27, 63}
print({x for x in range(1,100) if x%9 ==0})
生成器推导式
a = (x for x in range(1,100) if x%9 ==0 )
print(a) # <generator object <genexpr> at 0x0000016647B730D0>
# b = list(a)
# print(b) # [9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99]
# c = tuple(a)
# print(c) # (9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99)
for x in a :
print(x,end=" ") # 9 18 27 36 45 54 63 72 81 90 99
生成器推导式并不会直接生成序列,而是一个序列器。它可以是列表,也可以是元组