第五章---Python流程控制

欢迎来到python的世界 
博客主页:卿云阁

欢迎关注点赞收藏⭐️留言

本文由卿云阁原创!

本阶段属于练气阶段,希望各位仙友顺利完成突破

首发时间:2021年3月12日

✉️希望可以和大家一起完成进阶之路!

作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢!


目录

选择结构

 循环结构

break和continue语句

打印九九乘法表

第五章---Python流程控制_第1张图片

1-顺序结构
2-选择结构
3-循环结构
if __name__ == '__main__':
很多时候,我们经常在python程序中看到这么一行语句,这里简要解释一下:
首先, __name__ 是所有模块都会有的一个内置属性,一个模块的 __name__ 值取决于你如何调用模块。 假如你有一个 test.py 文件,如果在 a.py 文件中使用import导入这个模块 import test.py ,那么 test.py 模块的 __name__ 属性的值就是 test ,不带路径或者文件扩展名。 其实顺序执行,简单来说就是代码按照从上到下的顺序来执行

选择结构

条件判断是通过一条或多条判断语句的执行结果(True或者False)来决定执行的代码块。
在Python语法中,使用if、elif和else三个关键字来进行条件判断。
单分支结构
a=int(input("请输入第一个数:"))
b=int(input("请输入第二个数:"))
print("输入值:{0},{1}",a,b)
if(a
is_single = 1
# 单分支
if is_single == 1:
   print("good.")
else: # 否则
    print("bad")
print("hhhh")


结果:
good.
hhhh


# tab 会被替换成4个空格
# - 顶级代码必须顶行写,即如果一行代码本身不依赖于任何条件,那它必须不能进行任何缩进
# - 同一级别的代码,缩进必须一致
# - 官方建议缩进用4个空格,当然你也可以用2个,如果你想被人笑话的话。

双分支结构

多分支结构

mark=int(input("请输入分数:"))
if(mark>=90): print("优秀")
elif (mark>=90): print("良")
elif (mark>=90): print("中")
elif (mark>=90): print("及格")
else: print("不及格")

结果:
请输入分数:98
优秀

 循环结构

for循环(知道循环次数)


black_gf_age = 24

for i in range(3):
    guess = int(input("猜猜黑姑娘多大了>>:"))
    if guess > black_gf_age:
        print("猜的太大了,往小里试试...")
    elif guess < black_gf_age:
        print("猜的太小了,往大里试试...")
    else:
        exit("恭喜你,猜对了...")  # 退出程序

结果:
猜猜黑姑娘多大了>>:21
猜的太小了,往大里试试...
猜猜黑姑娘多大了>>:24
恭喜你,猜对了...
sum_odd=0
sum_even=0
for i in range(1,101):
    if i%2!=0:
        sum_odd+=i
    else:
        sum_even+=i
print(sum_odd)
print(sum_even)

结果:
2500
2550

while循环

black_girl_age = 26

count = 0  # 计数器
while count < 3:
    count +=1
    guess = int(input("输入你的猜测:"))

    if guess > black_girl_age:  # 猜大了
        print("你讨厌,人家哪有这么老啊。。。。")
    elif guess < black_girl_age: # 猜小了
        print("真开心,但实际我比这个岁数要大呢...")
    else:
        print("恭喜你,猜对了,可以今天把我领回家了。。。。")
        break

结果:
输入你的猜测:25
真开心,但实际我比这个岁数要大呢...
输入你的猜测:26
恭喜你,猜对了,可以今天把我领回家了。。。。
sum_odd=0
sum_even=0
i=1
while(i<=100):
    if i%2!=0:
        sum_odd+=i
    else:
        sum_even+=i
    i+=1
print(sum_odd)
print(sum_even)

结果:
2500
2550
while的else从句:
while循环还可以增加一个else从句。当while循环正常执行完毕,会执行else语句。注意else与while平级的缩进 方式!
number = 10 
i = 0 
while i < number:
    print(i,end=' ') 
    i += 1 
else:
    print("执行完毕!")
结果:
0 1 2 3 4 5 6 7 8 9 执行完毕!

break和continue语句

举个栗子

第五章---Python流程控制_第2张图片

宿管要来5栋查寝,要求遍历所有的房间,来寻找一只小猫

for floor in range(1, 7):
     print(f"欢迎来到第{floor}层")
     for room in range(1, 7):
         print(f"{floor}0{room}")
         
结果:
欢迎来到第1层
101
102
103
104
105
106
欢迎来到第2层
201
202
203
204
205
206
欢迎来到第3层
301
302
303
304
305
306
欢迎来到第4层
401
402
403
404
405
406
欢迎来到第5层
501
502
503
504
505
506
欢迎来到第6层
601
602
603
604
605
606

3层已经被查过了,要跳过

for floor in range(1, 7):
     if floor==3:
         continue
     print(f"欢迎来到第{floor}层")  #f的作用是格式化字符串
     for room in range(1, 7):
         print(f"{floor}0{room}")


结果:
欢迎来到第1层
101
102
103
104
105
106
欢迎来到第2层
201
202
203
204
205
206
欢迎来到第4层
401
402
403
404
405
406
欢迎来到第5层
501
502
503
504
505
506
欢迎来到第6层
601
602
603
604
605
606

后来在404房间发现了这只猫,宿管阿姨停下了脚步

for floor in range(1, 7):
     print(f"欢迎来到第{floor}层")
     for room in range(1, 7):
         print(f"{floor}0{room}")
         if(floor==4 and room==4):
             print("停下了脚步")
             break
                   
结果:
欢迎来到第1层
101
102
103
104
105
106
欢迎来到第2层
201
202
203
204
205
206
欢迎来到第3层
301
302
303
304
305
306
欢迎来到第4层
401
402
403
404
停下了脚步
欢迎来到第5层
501
502
503
504
505
506
欢迎来到第6层
601
602
603
604
605
606
for floor in range(1, 7):
     print(f"欢迎来到第{floor}层")
     for room in range(1, 7):
         print(f"{floor}0{room}")
         if(floor==4 and room==4):
             print("停下了脚步")
         break
结果
欢迎来到第1层
101
欢迎来到第2层
201
欢迎来到第3层
301
欢迎来到第4层
401
欢迎来到第5层
501
欢迎来到第6层
601

显然这样是不对的,即python中的break只能跳出当前层的循环,无法全部跳出。那如果有这么需求怎么办?

flag = True
for floor in range(1, 7):
     if flag != True:
         break
     print(f"欢迎来到第{floor}层")
     for room in range(1, 7):
         print(f"{floor}0{room}")
         if floor == 4 and room == 4:
             print("停下了脚步")
             flag = False
             break

结果:
欢迎来到第1层
101
102
103
104
105
106
欢迎来到第2层
201
202
203
204
205
206
欢迎来到第3层
301
302
303
304
305
306
欢迎来到第4层
401
402
403
404
停下了脚步

再举个栗子

sum=0
for i in range(1,101):
     sum=sum+i
     if i==2:
         print("执行continue")
         continue 
     if i==4:
         print("执行break")
         break
print("sum={0}".format(sum))
print("循环结束")


结果:
执行continue
执行break
sum=10
循环结束

练习

1.打印九九乘法表

for i in range(1,10):
    s=" "
    for j in range(1,10):
         s+=str.format("{0:1}*{1:1}={2:<2} ",i,j,i*j)
    print(s)

1.{2:<2}

表示第三个字符占两格左对齐。

2.{0:1}*{1:1}={2:<2}之后是有空格的。

3.外循环for i in range(1,10):由三个语句构成(包括一个内循环)

注意:当i取不同值时一定要把三条语句执行完。

补充:输出九九乘法表的上三角和下三角的显示效果

#下三角
for i in range(1,10):
    s=''
    for j in range(1,i+1):
        s+=str.format("{0:1}*{1:1}={2:<2} ",i,j,i*j)
    print(s)
    
print('-------------------------------------------------------------------')
    
#上三角
for i in range(1,10):
    s=''
    for k in range(1,i):
        print(end="       ")
    for j in range(i,10):
        s+=str.format("{0:1}*{1:1}={2:<2} ",i,j,i*j)
    print(s)

注意:在上三角中

print(end="       ")

有7个空格=一个表达式(6个)+空格

2.京牌摇号⼩程序

第五章---Python流程控制_第3张图片

需求:
1. 允许⽤户最多选 3
2. 每次放出 20 个⻋牌供⽤户选择
想实现这个程序 ,有 2 个问题要解决
1. 如果实现输出随机值
2. 随机值需限定在⼤写字⺟,和数字范围内,不能有其它特殊字符。
这就要⽤到⼀些超纲知识, random 模块和 string 模块。 Python 的模块库是个宝藏,想实现任何功能它
都有现成的模块供你调⽤
random 模块
可以产⽣指定范围内的随机数、字符串等
import random# 导⼊random模块
print(random.choice("abcdefghi"))# 参数也可以是⼀个列表
s = "abcdefghijklmn"
print(random.sample(s,3))# 从数据源s中随机取出3个值
print(random.randint(1,100)) # 打印⼀个随机数

结果:
g
['j', 'd', 'e']
5
string 模块
import string # 导⼊string模块
print(string.ascii_letters)
print(string.ascii_uppercase)
print(string.ascii_lowercase) # ⼩写字⺟
print(string.punctuation) # 打印特殊字符
print(string.digits) # 打印数字

结果:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
0123456789

字符串的拼接

print("-".join(["a","b","c"]))

结果:
a-b-c

import random
import string
count = 0
while count < 3:
    car_nums = []  # 存储供用户选择的号
    for i in range(20):
        n1 = random.choice(string.ascii_uppercase)  # 生成车牌的第一个字母
        n2 = "".join(random.sample(string.ascii_uppercase+string.digits, 5))
        c_num = f"京{n1}-{n2}"
        car_nums.append(c_num)  # 把生成的号码添加到列表
        print(i+1,c_num)
    choice = input("输入你喜欢的号:").strip()
    if choice in car_nums: # 代表选择是合法的
        print(f"恭喜你选择了新车牌号:{choice}")
        exit("Good luck.")
    else:
        print("不合法的选择....")

    count += 1


结果:
1 京Q-4AEV8
2 京T-DFQ6I
3 京U-XQ8R3
4 京J-KZ1T5
5 京C-Z8R9L
6 京V-LNTU0
7 京F-R9KNT
8 京P-YCESN
9 京W-O40U9
10 京W-7PNOM
11 京I-WP2X4
12 京Z-A80K3
13 京V-40SEK
14 京U-U5QJ6
15 京A-VCEB7
16 京V-V2HUB
17 京X-MVRKG
18 京Y-B6Y2P
19 京N-NGZ3F
20 京R-JH4FO
输入你喜欢的号:京Z-A80K3
恭喜你选择了新车牌号:京Z-A80K3
Good luck.
3.年会抽奖程序
张三科技有限公司有 300 员⼯,开年会抽奖,奖项如下:
⼀等奖 3 名, 泰国 5 ⽇游
⼆等奖 6 名, Iphone ⼿机
三等奖 30 名,避孕套⼀盒
规则:
1. 共抽 3 次,第⼀次抽 3 等奖,第 2 次抽 2 等奖,第 3 次压轴抽 1 等奖
2. 每个员⼯限中奖⼀次,不能重复
解题思路:
1. ⽣成⼀个员⼯列表,⽤ random 模块从⾥⾯取随机值
2. 取完值之后,⽴刻从员⼯⼤列表⾥把中奖⼈删掉,即可防⽌其再次中奖
import random
import string
import faker
import random
alex = faker.Faker(locale="zh_CN")
staff_list = []
for i in range(1, 301):
    staff_list.append(alex.name())
print(staff_list)
level = [30, 6, 3]
for i in range(3):
    winner_list = random.sample(staff_list, level[i])
    for wc in winner_list:
        staff_list.remove(wc)
    print(f"抽中{3 - i}等奖的人是", winner_list)




结果:
['卢磊', '冯丽丽', '吴岩', '李建军', '陈杰', '姚晨', '马桂芝', '李娜', '赵玉英', '齐慧', '王娟', '王娜', '王建平', '马艳', '李梅', '陈建华', '盛旭', '魏楠', '葛芳', '萧燕', '萧莉', '陈秀华', '罗凯', '蒋桂香', '毕宇', '丁倩', '江杰', '余林', '李红', '任建华', '雷宇', '黄玉', '杨彬', '张淑华', '周秀芳', '马荣', '劳璐', '周玉梅', '吕艳', '张英', '李娜', '夏金凤', '彭兵', '钱云', '牛成', '易冬梅', '蒋小红', '冯婷', '韦丽娟', '秦峰', '谭雪梅', '胡慧', '张健', '杨楠', '翟柳', '巫淑珍', '张利', '张荣', '刘欢', '唐龙', '杨阳', '霍建平', '吴彬', '黄龙', '李玉兰', '阎芳', '金红', '郑红梅', '梁桂芳', '宋建华', '张建平', '罗雷', '魏欣', '金桂芳', '李婷', '王磊', '骆荣', '朱丽娟', '杨玉珍', '余建华', '张桂荣', '王桂芝', '丁婷', '童鹏', '黄梅', '王慧', '徐静', '陶阳', '谭萍', '黄玉英', '李海燕', '李金凤', '孙建', '时艳', '李杰', '华丽华', '蔡颖', '朱红梅', '刘杰', '陈雪', '陈淑英', '郭想', '刘秀荣', '舒莉', '周娜', '王峰', '陈秀云', '万玉兰', '韩刚', '吴飞', '戚瑞', '车萍', '王健', '吴萍', '林淑华', '杨玉兰', '王璐', '洪红', '曾秀英', '姚瑞', '田欣', '葛彬', '李丽华', '张明', '邓波', '王桂花', '王秀华', '牛琴', '曾玲', '李建', '魏健', '王荣', '李淑珍', '孙桂荣', '黄慧', '欧阳宇', '姚伟', '周淑华', '马兰英', '宋淑华', '王艳', '罗娟', '潘桂珍', '杨帅', '伍淑华', '赵云', '郭秀荣', '李秀梅', '关建军', '李秀兰', '李兰英', '覃瑜', '章辉', '沈敏', '宋玲', '唐淑珍', '孙淑珍', '杨利', '张桂荣', '郝波', '张建平', '顾欢', '白萍', '陈秀珍', '赵桂芝', '齐春梅', '王想', '茅莹', '张璐', '吴玉兰', '汪阳', '熊晨', '张华', '聂霞', '龙金凤', '马桂荣', '王丽丽', '王梅', '石英', '樊丽华', '赖桂芝', '李鹏', '苏伟', '钟秀梅', '王丹丹', '赵想', '廖涛', '刘芳', '姚静', '余刚', '朱琴', '王丽华', '宋楠', '林艳', '蓝辉', '樊淑兰', '田雷', '任兵', '何辉', '林雪', '李玲', '贺慧', '钟建', '姚秀珍', '鞠建平', '叶玉梅', '胡桂珍', '夏辉', '傅淑兰', '凌强', '俞飞', '唐春梅', '徐建', '陈霞', '曹辉', '林阳', '邢杨', '阮波', '张丽', '金军', '邓雪', '吕桂英', '陈云', '刘玉梅', '黄亮', '王波', '陈秀芳', '阎冬梅', '桑红', '胡浩', '王兰英', '罗桂珍', '谭帆', '李波', '杨涛', '何欣', '李林', '蔡旭', '陈雷', '覃小红', '吴瑞', '张辉', '赖成', '谢燕', '王秀华', '王静', '宫旭', '冯春梅', '季东', '聂桂芳', '张婷婷', '管杨', '邱红梅', '杨桂英', '陈海燕', '苏楠', '巩建军', '谭艳', '周兵', '林丽', '李玉华', '窦璐', '李桂花', '徐金凤', '杜颖', '耿柳', '陈刚', '邓桂花', '孙玉兰', '陈冬梅', '刘亮', '孙宇', '杨琴', '李明', '马宇', '龙林', '孟柳', '蔡颖', '王宇', '林文', '刘颖', '汪龙', '李婷婷', '曾志强', '张欣', '姚洋', '李秀华', '杨凯', '蒋军', '聂娜', '宋伟', '周红霞', '刘杰', '易欣', '李玉华', '姜宇', '张倩', '朱鹏', '邓成', '蔡丽丽']
抽中3等奖的人是 ['杨桂英', '张辉', '马兰英', '蒋小红', '吴彬', '杨玉兰', '李秀华', '陈冬梅', '廖涛', '谭雪梅', '宋淑华', '赵桂芝', '李玉兰', '章辉', '周娜', '李梅', '茅莹', '龙林', '张璐', '聂霞', '牛成', '彭兵', '何欣', '王娜', '蔡丽丽', '王璐', '邓波', '管杨', '吕桂英', '关建军']
抽中2等奖的人是 ['刘亮', '杨琴', '张婷婷', '孙建', '刘杰', '李娜']
抽中1等奖的人是 ['张桂荣', '陈杰', '李丽华']

Faker 是一个生成伪造数据的 Python 库,Faka 数据通常用于测试或用一些伪数据填充数据库。 

你可能感兴趣的:(python,python)