控制语句与循环语句
在程序开发中,一共有三种流程方式:
顺序 —— 从上向下,顺序执行代码
分支—— 根据条件判断,决定执行代码的分支
循环—— 让特定代码 重复执行
条件判断
判断语句又被称为分支语句,正是因为有了判断,才让程序有了很多的分支,如果条件满足,才能做某件事情,如果条件不满足,就做另外一件事情,或者什么也不做;
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 = 20y= 40
if x >y:print("x>y")else:print("x
s1= "hello"s2= "Hell"
if s1 > s2 and x >y:print("条件满足")elif not s1
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 = 30c_score= 70
if python_score >= 60 or c_score >= 60:print("满足条件")#定义一个布尔型变量 `is_employee`,编写代码判断是否是本公司员工如果不是提示不允许入内
is_employee =Trueif 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
ifhas_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 | 布 胜 石头 |'''
importrandom
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("请输入成绩:"))defa(grade):if grade > 80:print("优秀")elif 60 <= grade <= 80:print("良好")elif grade < 60:print("不及格")returna(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语句,使用了随机整数,每次运行结果都不同
importrandom
x=0while x<10:
x+=1
if x==random.randint(1,20):print(x)break
else:print("没有中断循环")#例子2
count =0while count < 5:print (count, "小于 5")
count= count + 1
else:print (count, "大于或等于 5")#while else 当while循环被break打断,就不会执行else得结果
count=0while 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=0while i<=10:if i==3:break
print(i)
i+=1
print("over")#continue在整个循环中,只有某些条件,不需要执行循环代码,而其他条件都需要执行
i =0while i < 10:#当 i == 7 时,不希望执行需要重复执行的代码
if i == 7:#在使用 continue 之前,同样应该修改计数器
#否则会出现死循环
i += 1
continue
#重复执行的代码
print(i)
i+= 1
#输出1234568910
i =0while i<10:
i+= 1
if i == 7:continue
print(i)print('结束')#continue和pass的区别
a="python"i=2
for e ina:if e=="y":passi=3
else:print(e+str(i)) #输出:p2、t3、h3、o3、n3
a="python"i=2
for e ina:if e=="y":continuei=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=0while i<=100:if i%2==0:print(i)
result+=i
i+=1
print(f"0~100之间的数字求和结果{result}")#输出1-100内所有得奇数
x=0while x<100:if x%2==1:print(x)
x+=1
#方法二
x=1
while x<101:print(x)
x+=2
#设定一个数字,给三次机会让用户输入数字如果比数字大就显示猜测大了,小了就猜测小了,猜对了退出循环;
count =0while count<3:
num= int(input('请输入数字:'))if num >66:print('猜的数字大了')elif num<66:print('猜的数字小了')else:print('恭喜你猜对了')breakcount+=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退出循环
whileTrue:
x= input("请输入一个数:")if x=="end":breaknum=int(x)if num%2==0 :print("{}是偶数".format(num))else:print("{}是奇数".format(num))else:print("end结束")#编写代码,实现一个判断用户输入的年份是否是闰年的程序
whileTrue:
year= int(input("请输入年份:"))if year %400==0 or year%4==0 and year%100 !=0:print("这是闰年")else:print("不是闰年")#while循环和for循环中使用else语句,使用了随机整数,每次运行结果都不同
importrandom
x=0while x<10:
x+=1
if x==random.randint(1,20):print(x)break
else:print("没有中断循环")#使用while,完成以下图形的输出
i = 1x= 4
while i <= 9:if i <= 5:print("*" *i)elif i > 5:print("*" *x)
x-= 1i+= 1
#编写代码,实现输入某年某月某日,判断这一天是这一年的第几天?闰年情况也考虑进去
print("==== please ouput in this format 'year/month/day' ====")
all_day=0whileTrue:
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
all_day+=i
all_day=all_day+delse:print("超出范围请重试")else:print("超出范围请重试")break
else:if m>0 and m<12:if d>0 and d
all_day+=i
all_day=all_day +delse: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 insites: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 inrange(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("循环结束")importrandom
x=0while x<10:
x+=1
if x==random.randint(1,20):print(x)break
else:print("没有中断循环")#在学员列表中搜索指定的姓名
students =[
{"name": "阿土"},
{"name": "小美"}
]
find_name= "张三"
for stu_dict instudents: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 | 回车 |