控制语句与循环语句
在程序开发中,一共有三种流程方式:
顺序 —— 从上向下,顺序执行代码
分支—— 根据条件判断,决定执行代码的分支
循环—— 让特定代码 重复执行
条件判断
判断语句又被称为分支语句,正是因为有了判断,才让程序有了很多的分支,如果条件满足,才能做某件事情,如果条件不满足,就做另外一件事情,或者什么也不做;
if...单分支
if 条件:
满足条件后要执行的代码
if 2<1: print("不满足条件,所以不打印!") print("哈哈")
if...else双分支
if 条件:
满足条件执行代码
else:
if条件不满足就走这段
if 3>2: print("满足条件,执行") else: print("不满足执行")
If...elif: python 并不支持 switch 语句
n=4 if n==3: print("不成立") elif n==5: print("条件不成立") elif n==4: print("条件成立") else: print("其他值")
条件判断练习:
# 判断语句练习 n = 3 if n == 3: print("n和3相等") print("if代码块结束!") #用户名判断 name = input("姓名:") if name == "huahua": print("欢迎花花") else: print("输入错误") # 嵌套 name = input("请输入您的名字:") if name.startswith("zhao"): if name.endswith("flowers"): print("欢迎flowers") elif name.endswith('yu'): print("欢迎yu") else: print("未知姓名") print("退出") #判断练习 x = 20 y = 40 if x > y: print("x>y") else: print("x<y") s1 = "hello" s2 = "Hell" if s1 > s2 and x > y: print("条件满足") elif not s1 < s2: print("基本条件满足") # 条件满足 else: print("不满足条件") '''1. 定义一个整数变量记录年龄 2. 判断是否满 18 岁 (**>=**) 3. 如果满 18 岁,允许进网吧嗨皮''' # age=eval(input("请说明你的年龄:")) # if age>=18: # print("欢迎进入网吧") # else: # print("不满18岁未成年人禁止入内!") # print("都会执行") # 定义一个整数变量 `age`,编写代码判断年龄是否正确,要求人的年龄在 0-120 之间 age = 15 if age >= 0 and age <= 120: print("年龄正确") else: print("年龄不符") # 定义两个整数变量 `python_score`、`c_score`,编写代码判断成绩要求只要有一门成绩 > 60 分就算合格 python_score = 30 c_score = 70 if python_score >= 60 or c_score >= 60: print("满足条件") # 定义一个布尔型变量 `is_employee`,编写代码判断是否是本公司员工如果不是提示不允许入内 is_employee = True if not is_employee: # 当条件不满足时才会执行not print("禁止入内") ''' 定义 `holiday_name` 字符串变量记录节日名称 2. 如果是 **情人节** 应该 **买玫瑰**/**看电影** 3. 如果是 **平安夜** 应该 **买苹果**/**吃大餐** 4. 如果是 **生日** 应该 **买蛋糕** 5. 其他的日子每天都是节日啊…… ''' holiday_name = "情人节" if holiday_name == "情人节": print(f"{holiday_name}应该买玫瑰,看电影!") elif holiday_name == "平安夜": print(f"{holiday_name}应该买苹果,吃大餐!") elif holiday_name == "生日": print(f"{holiday_name}应该买蛋糕!") else: print(f"{holiday_name}其他的日子每天都是节日啊") ''' 1. 定义布尔型变量 `has_ticket` 表示是否有车票 2. 定义整型变量 `knife_length` 表示刀的长度,单位:厘米 3. 首先检查是否有车票,如果有,才允许进行 **安检** 4. 安检时,需要检查刀的长度,判断是否超过 20 厘米 * 如果超过 20 厘米,提示刀的长度,不允许上车 * 如果不超过 20 厘米,安检通过 5. 如果没有车票,不允许进门 ''' has_ticket = True knife_length = 10 if has_ticket: print("有车票,请开始安检......") if knife_length >= 20: print(f"刀的长度为{knife_length}厘米,不允许上车") else: print("安检通过") else: print("无车票,请先买票") # 1、输入一个数,判断一个数n能同时被3和5整除 n = eval(input("请输入数字:")) if n % 5 == 0 and n % 3 == 0: print("可以整除") else: print("不能整除") ''' 1. 从控制台输入要出的拳 —— 石头(1)/剪刀(2)/布(3) 2. 电脑 **随机** 出拳 3. 比较胜负 | 序号 | 规则 | | :---: | :---: | | 1 | 石头 胜 剪刀 | | 2 | 剪刀 胜 布 | | 3 | 布 胜 石头 | ''' import random player = int(input("输入要出的拳 —— 石头1/剪刀2/布3:")) computer = random.randint(1, 3) # `random.randint(a, b)` ,返回 `[a, b]` 之间的整数,包含 `a` 和 `b` print(f"电脑输出的是{computer}") if ((player == 1 and computer == 2) or (player == 2 and computer == 3) or (player == 3 and computer == 1)): print("欧耶,我赢了") elif player == computer: print("平局了") else: print("不行,我要和你决战到天亮!") ''' 定义一个函数,成绩作为参数传入。如果成绩小于60,则输出不及格。 如果成绩在60到80之间,则输出良好;如果成绩高于80分, 则输出优秀,如果成绩不在0-100之间,则输出 成绩输入错误''' grade = eval(input("请输入成绩:")) def a(grade): if grade > 80: print("优秀") elif 60 <= grade <= 80: print("良好") elif grade < 60: print("不及格") return a(grade) # 根据用户输入内容打印其权限 name = input('请输入用户名字:') if name == 'flowers': print('超级管理员') elif name == 'mr': print('普通管理员') elif name == 'lan' or name == 'coli': print('业务主管') else: print('普通用户') '''用三行print,完成以下信息的显示: ================================== = 欢迎进入到身份认证系统V1.0 = 1. 登录 = 2. 退出 = 3. 认证 = 4. 修改密码 ================================== ''' print("="*25) print("=\t欢迎进入身份认证系统V1.0\n= 1. 登录\n= 2.退出\n= 3.认证\n= 4.修改密码") print("="*25) # 编写程序,从键盘获取一个个信息,然后按照下面格式显示 '''================================== 姓名: dongGe QQ:xxxxxxx 手机号:131xxxxxx 公司地址:北京市xxxx ==================================''' name = input("姓名:") QQ = input("QQ:") phone_num = input("手机号:") addr = input("地址:") print("=" * 25) print(f"姓名:{name}\nQQ:{QQ}\n手机号:{phone_num}\n公司地址{addr}") print("=" * 25) # 编写程序从键盘获取用户名、密码,如果用户名和密码都正确(预先设定一个用户名和密码),那么就显示“欢迎登陆xxx”,否则提示密码或者用户名错误 name = "flowers" pw = "123" username = input("输入用户名:") password = input("输入密码:") if username == name and password == pw: print(f"欢迎{username}") else: print("用户名或密码错误!") #嵌套:判断验证码之后在判断用户名密码 username = input("请输入用户名:") password = input("请输入密码:") code = 'qwer' your_code = input("请输入验证吗:") if your_code == code: if username =='flower' and password=='123': print('登录成功') else: print('登录失败') else: print('验证码错误')
循环语句
while 循环 在给定的判断条件为 true 时执行循环体,否则退出循环体。另外,在 Python 中没有 do..while 循环。
循环的作用就是让指定的代码重复的执行
for 循环 重复执行语句
嵌套循环 你可以在while循环体中嵌套for循环
while 循环如何终止:
改变条件、break、系统命令;
1.While 循环语句
初始条件设置 —— 通常是重复执行的 计数器
while 条件(判断 计数器 是否达到 目标次数):
条件满足时,做的事情1
条件满足时,做的事情2
条件满足时,做的事情3
...(省略)...
处理条件(计数器 + 1)
# 1. 定义重复次数计数器 i = 0 #程序计数法从 `0` 开始)—— 几乎所有的程序语言都选择从 0 开始计数 # 2. 使用 while 判断条件 while i< 5: # 重复执行的代码 print("hello") # 处理计数器 i i+=1 print(f"循环结束后输出i的值是:{i}") #注意:循环结束后,之前定义的计数器条件的数值是依旧存在的
循环使用 else 语句
当while循环体不满足条件时执行else
#while循环和for循环中使用else语句,使用了随机整数,每次运行结果都不同 import random x=0 while x<10: x+=1 if x==random.randint(1,20): print(x) break else: print("没有中断循环") #例子2 count = 0 while count < 5: print (count, " 小于 5") count = count + 1 else: print (count, " 大于或等于 5") #while else 当while循环被break打断,就不会执行else得结果 count=0 while count<5: count+=1 if count==3:break #跳出循环 print(count) else: print("循环正常执行完了") print("------out of while loop--------")


循环控制语句
`break` 和 `continue` 是专门在循环中使用的关键字,只针对 当前所在循环有效;
`break` 某一条件满足时,退出循环,不再执行后续重复的代码;
`continue` 某一条件满足时,不执行后续重复的代码;
pass 语句:Python pass是空语句,是为了保持程序结构的完整性,pass 不做任何事情,一般用做占位语句。
#break某一条件满足时,退出循环,不再执行后续重复的代码 i=0 while i<=10: if i==3: break print(i) i+=1 print("over") #continue在整个循环中,只有某些条件,不需要执行循环代码,而其他条件都需要执行 i = 0 while i < 10: # 当 i == 7 时,不希望执行需要重复执行的代码 if i == 7: # 在使用 continue 之前,同样应该修改计数器 # 否则会出现死循环 i += 1 continue # 重复执行的代码 print(i) i += 1 #输出1234568910 i = 0 while i<10: i += 1 if i == 7: continue print(i) print('结束') #continue和pass的区别 a="python" i=2 for e in a: if e=="y": pass i=3 else: print(e+str(i)) #输出:p2、t3、h3、o3、n3 a="python" i=2 for e in a: if e=="y": continue i=3 else: print(e+str(i)) #输出:p2、t2、h2、o2、n2
2.嵌套循环
while ` 嵌套就是:` while ` 里面还有 ` while `
```python
while 条件 1:
条件满足时,做的事情1
条件满足时,做的事情2
条件满足时,做的事情3
...(省略)...
while 条件 2:
条件满足时,做的事情1
条件满足时,做的事情2
条件满足时,做的事情3
...(省略)...
处理条件
2
处理条件
1
'''在控制台连续输出五行`*`,每一行星号的数量依次递增,使用字符串 * 打印 * ** *** **** ***** ''' # row = 1 # while row <= 5: # print("*" * row) # row += 1 #使用循环嵌套打印小星星 row = 1 while row <= 5: # 假设 python 没有提供字符串 * 操作 # 在循环内部,再增加一个循环,实现每一行的 星星 打印 col = 1 while col <= row: print("*", end="") col += 1 # 每一行星号输出完成后,再增加一个换行 print("") row += 1 #打印99乘法表 # 定义起始行 row = 1 # 最大打印 9 行 while row <= 9: # 定义起始列 col = 1 # 最大打印 row 列 while col <= row: # end = "",表示输出结束后,不换行 # "\t" 可以在控制台输出一个制表符,协助在输出文本时对齐 print("%d * %d = %d" % (col, row, row * col), end="\t") # 列数 + 1 col += 1 # 一行打印完成的换行 print("") # 行数 + 1 row += 1
循环练习:
#计算 0 ~ 100 之间所有数字的累计求和结果 #0. 定义最终结果的变量 result = 0 # 1. 定义一个整数的变量记录循环的次数 i = 0 # 2. 开始循环 while i <= 100: print(i) # 每一次循环,都让 result 这个变量和 i 这个计数器相加 result += i # 处理计数器 i += 1 print("0~100之间的数字求和结果 = %d" % result) #计算 0 ~ 100之间所有偶数的累计求和结果 result=0 i=0 while i<=100: if i%2==0: print(i) result+=i i+=1 print(f"0~100之间的数字求和结果{result}") #输出1-100内所有得奇数 x=0 while x<100: if x%2==1: print(x) x+=1 #方法二 x=1 while x<101: print(x) x+=2 #设定一个数字,给三次机会让用户输入数字如果比数字大就显示猜测大了,小了就猜测小了,猜对了退出循环; count = 0 while count<3: num = int(input('请输入数字:')) if num >66: print('猜的数字大了') elif num<66: print('猜的数字小了') else: print('恭喜你猜对了') break count+=1 else: print('请明天再试') #用户登录三次输入错机会,且每次输入错误时提示剩余错误次数 count = 1 while count<=3: name = input('用户名:') pw = input('密码:') if name =='flower' and pw =='123': print('登录成功') else: print(f'输入错误,您还有{3-count}次机会') count+=1 print("输入次数超过三次,请明天再来") #输入一个数判断是奇数还是偶数,end退出循环 while True: x = input("请输入一个数:") if x=="end": break num=int(x) if num%2==0 : print("{}是偶数".format(num)) else: print("{}是奇数".format(num)) else: print("end结束") #编写代码,实现一个判断用户输入的年份是否是闰年的程序 while True: year = int(input("请输入年份:")) if year %400==0 or year%4==0 and year%100 !=0: print("这是闰年") else: print("不是闰年") #while循环和for循环中使用else语句,使用了随机整数,每次运行结果都不同 import random x=0 while x<10: x+=1 if x==random.randint(1,20): print(x) break else: print("没有中断循环") #使用while,完成以下图形的输出 i = 1 x = 4 while i <= 9: if i <= 5: print("*" *i) elif i > 5: print("*" *x) x -= 1 i += 1 #编写代码,实现输入某年某月某日,判断这一天是这一年的第几天?闰年情况也考虑进去 print("==== please ouput in this format 'year/month/day' ====") all_day=0 while True: moth = [31, 30, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] year = input("请输入年月日:") y,m,d=year.split("/") y=int(y) m=int(m) d=int(d) if y%400==0 or y%4==0 and y%100 !=0: moth[1]=28 if m>0 and m<12: if d>0 and d<moth[m-1]: for i in moth[0:m-1]: all_day+=i all_day=all_day+d else: print("超出范围请重试") else: print("超出范围请重试") break else: if m>0 and m<12: if d>0 and d<moth[m-1]: for i in moth[0:m-1]: all_day+=i all_day=all_day +d else: print("超出范围请重试") else: print("超出范围请重试") break print("这是%s的第%s天"%(y,all_day))
3.For循环
For...in..
Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串
languages = ["C", "C++", "Perl", "Python"] for x in languages: #遍历一个列表 print(x) #break 语句用于跳出当前循环体 sites = ["Baidu", "Google","Runoob","Taobao"] for site in sites: if site =="Runoob": print("菜鸟") break print(site) else: print("没有循环数据") print("完成循环") #内置range()函数。它会生成数列 for y in range(4): print(y) #也可以使用range指定区间的值 for v in range(10,20): print(v) #range以指定数字开始并指定不同的增量甚至可以是负数,叫做'步长' for i in range(0,10,3): #结果0,3,6,9 print(i) for c in range(10,0,-2): #结果是:10,8,6,4,2 print(c) a = ['Google', 'Baidu', 'Runoob', 'Taobao', 'QQ'] for i in range(len(a)): print(i, a[i]) #0 Google,1 Baidu,2 Runoob,3 Taobao,4 QQ a=list(range(5)) #使用range()函数来创建一个列表 print(a)
循环使用 else 语句
for num in [1,2,3,4,5]: print(num) if num == 3: break else: # 如果循环体内部使用break退出了循环 # else 下方的代码就不会被执行 print("判断条件不成立时会执行") print("循环结束") import random x=0 while x<10: x+=1 if x==random.randint(1,20): print(x) break else: print("没有中断循环") # 在学员列表中搜索指定的姓名 students = [ {"name": "阿土"}, {"name": "小美"} ] find_name = "张三" for stu_dict in students: print(stu_dict) if stu_dict["name"] == find_name: print("找到了 %s" % find_name) # 如果已经找到,应该直接退出循环,而不再遍历后续的元素 break # else: # print("抱歉没有找到 %s" % find_name) else: # 如果希望在搜索列表时,所有的字典检查之后,都没有发现需要搜索的目标 # 还希望得到一个统一的提示! print("抱歉没有找到 %s" % find_name) print("循环结束")
练习:
打印九九乘法表
#for 循环语句实现: # for i in range(1,10): # for j in range(1,10): # print(j,"x",i,"=" ,i*j,"\t",end="") # if i==j: # print("") # break

小知识随机数:
在 `Python` 中,要使用随机数,首先需要导入随机数的模块 —— “工具包”
import random
导入模块后,可以直接在模块名称后面敲一个 `.` 然后按 `Tab` 键,会提示该模块中包含的所有函数
random.randint(12, 20) # 生成的随机数n: 12 <= n <= 20
random.randint(20, 20) # 结果永远是 20
random.randint(20, 10) # 该语句是错误的,下限必须小于上限
转义字符 | 描述 |
| --- | --- |
| \\\\ | 反斜杠符号 |
| \\' | 单引号 |
| \\" | 双引号 |
| \n | 换行 |
| \t | 横向制表符 |
| \r | 回车 |
浙公网安备 33010602011771号