欢迎来到python的世界
博客主页:卿云阁欢迎关注点赞收藏⭐️留言
本文由卿云阁原创!
本阶段属于练气阶段,希望各位仙友顺利完成突破
首发时间:2021年3月12日
✉️希望可以和大家一起完成进阶之路!
作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢!
目录
选择结构
循环结构
break和continue语句
打印九九乘法表
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语句
举个栗子
宿管要来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.京牌摇号⼩程序
需求: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 数据通常用于测试或用一些伪数据填充数据库。