控制语句

93 阅读6分钟

控制语句就是把语句组合成能完成一定功能的小逻辑模块,分为如下三类:
“顺序结构”代表 “先执行a,再执行b” 的逻辑。比如,先找个女朋友,再给女朋友打电话;先订婚,再结婚;前面写的代码基本都是顺序结构

“条件判断结构”代表 “如果…,则…” 的逻辑。比如,如果女朋友来电,则迅速接电话;如果看到红灯,则停车;

“循环结构”代表 “如果…,则重复执行…” 的逻辑。比如,如果没打通女朋友电话,则再继续打一次; 如果没找到喜欢的人,则再继续找

选择结构

选择结构通过判断条件是否成立,来决定执行哪个分支。选择结构有多种形式,分为:单分支、双分支、多分支。

单分支

image.png

image.png

# 单分支  
num = input("输入一个数字:")  
if int(num)<10:  
print("小于10的数:"+num)

条件表达式:Python所有的合法表达式都可以看做条件表达式,甚至包括函数调用的表达式
False:False、0、0.0、空值None、空序列对象(空列表、空元祖、空集合、空字典、空字符串)、空range对象、空迭代对象。

True:其他都是True

双分支结构

image.png

image.png

image.png

# 双分支  
num = input("输入一个数字:")  
if int(num) < 10:  
print(num)  
else:  
print("数字太大")

三元条件运算符

image.png

将上面的代码用三元条件运算符实现:

num = input("输入一个数字:")  
print(num if int(num)<10 else "数字太大")

多分支

image.png

image.png

# 多分支  
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则重复执行循环体里的语句。图示如下: image.png
循环体里面的语句至少应该包含改变条件表达式的语句,以使循环趋于结束;否则,就会变成一个死循环。

while循环

image.png

# 打印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循环

image.png
可迭代对象:序列。包含:字符串、列表、元组、字典、集合、迭代器对象、生成器函数、文件对象

# 遍历元组  
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))

image.png

else语句

while、for循环可以附带一个else语句(可选)。如果for、while语句没有被break语句结束,则会执行else子句,否则不执行。语法格式如下:

image.png

推导式创建序列

列表推导式

image.png

print([x for x in range(1,5)]) # [1, 2, 3, 4]  
print([x for x in "abcedf"]) # ['a', 'b', 'c', 'e', 'd', 'f']

字典推导式

image.png

# 字典推导式  
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}

集合推导式

image.png

# {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

生成器推导式并不会直接生成序列,而是一个序列器。它可以是列表,也可以是元组