Python学习记录-03-控制流
前面写到的程序,基本都是从上到下,按顺执行;但是,这并不能够满足所有的情况,所以需要一些语句实现:根据不同的情况执行不同的语句。比如:根据现在的时间,输出早上好或者晚上好。
所以就有:控制语句,在python中,控制语句有:if、for、while,三种
1.if
if :检查条件
如果条件为真(True),就执行一块的语句(if-black或if块);
如果条件为假(False),就执行另一块的语句(else-black或else块),其中else块可选
例:
alice_age=33 #此处定义变量,类似“盒子”,存储alice的年龄
#int()函数,把收到的字符串转换为整数
#input()函数用于接收用户输入,int()函数将输入的字符串转换为整数
guess = int(input("Guess Alice's age: ")) #这句就是让用户输入一个数字,作为猜测的年龄,存到guess这个变量里
# if-elif-else 是"条件判断"结构,程序会从上到下依次检查条件
if guess == alice_age: #第一个条件,判断用户输入的数字guess变量,是否等于alice的年龄;==表示判断两个值是否相同,=是赋值
print("Congratulations! You guessed correctly.") #一样,则成功,不一样,则执行下一个判断条件
elif guess < alice_age: #第二个条件,判断用户输入的数字guess变量,是否小于alice的年龄,elif为(else if的缩写)
print("Too low! Try again.")
else: #else ,也就是第三个条件,即前面的条件都不满足,就执行此处的代码
print("Too high! Try again.")
print("The correct age is:", alice_age) # 条件判断结束后的代码,无条件执行,(无论猜对猜错都会执行)
#input()函数,得到的是字符串,必须要用int()函数转换为整数,才能进行大小比较,否则会报错
#比如输入abc,程序会报错(ValueError),因为abc无法转换为整数
#python中,使用缩进,来表示代码是哪个分支;
#if/elif/else结构中,代码块的缩进必须一致,否则会报错(IndentationError)
执行及输出:
Guess Alice's age: 23
Too low! Try again.
The correct age is: 33
注意:对于if的判断,每个判断条件后面都要加冒号,别忘了
if guess == alice_age: #第一个判断
print("")
elif guess < alice_age: #第二个判断
peint("")
else: #第三个判断
print("")
2.while
while语句能够实现条件为真的前提下,重复执行某个块语句。
whle属于循环的一种。
while语句中也能使用else。
例子:
bob_age=66
running = True # 定义一个布尔变量running,初始值为True,用于控制循环的运行状态
while running: # while循环,条件为running为True时,循环继续执行
guess = int(input("Guess Bob's age: ")) # 接收用户输入的猜测年龄,并转换为整数
if guess == bob_age: # 判断用户输入的数字是否等于Bob的年龄
print("Congratulations! You guessed correctly.") # 猜对了,输出成功信息
running = False # 将running设置为False,结束循环
elif guess < bob_age: # 判断用户输入的数字是否小于Bob的年龄
print("Too low! Try again.") # 猜低了,提示用户再试一次
else: # 如果前两个条件都不满足,则执行此处代码
print("Too high! Try again.") # 猜高了,提示用户再试一次
输出:
Guess Bob's age: 56
Too low! Try again.
Guess Bob's age: 89
Too high! Try again.
Guess Bob's age: 66
Congratulations! You guessed correctly.
过程:
#0.上述使用while,实现了“一直猜,直到猜对”
#1.定义了bob_age作为变量,存储bob的年龄
#2.定义了running变量,初始值为True,用于控制循环的运行状态
#3.进入while循环,条件为running为True时,循环继续执行.
#4.在循环中,使用input()函数接收用户输入的猜测年龄,并使用int()函数将其转换为整数,存储在guess变量中
#5.使用if-elif-else结构进行条件判断:
# - 如果guess等于bob_age,输出成功信息,并将running设置为False,结束循环
# - 如果guess小于bob_age,输出提示信息,提示用户再试一次
# - 如果guess大于bob_age,输出提示信息,提示用户再试一次
#6.循环会继续执行,直到用户猜对Bob的年龄,running被设置为False,循环结束
#也就是说,默认开关是打开的(True),从而进入第一个循环
#在给出的例子中,第一个循环,输入了56,则第一个56先进入guess变量,然后判断56是否等于66,不等于,则进入elif判断,56小于66,输出提示信息“Too low! Try again.”,此时running仍然为True,然后循环继续执行。
#第二次循环,输入了89,则89进入guess变量,然后判断89是否等于66,不等于,则进入elif判断,89大于66,则进入else分支,输出提示信息“Too high! Try again.”,此时running仍然为True,然后循环继续执行。
#第三次循环,输入了66,则66进入guess变量,然后判断66是否等于66,相等则输出成功信息“Congratulations! You guessed correctly.”,然后将running设置为False,结束循环
额外注意:
#上述代码的测试中,如果输入了66.5,则会报错:ValueError: invalid literal for int() with base 10: '66.5'
#此处出现了和前面--if循环部分,所提到的一样的错误:
#input()函数,得到的是字符串,必须要用int()函数转换为整数,才能进行大小比较,否则会报错
#比如输入abc,程序会报错(ValueError),因为abc无法转换为整数;输入的是 `66.5`,`input()` 接收到的是字符串 `"66.5"`。`int()` 一看:这串里有个小数点 `.`,不是纯整数格式,直接报错。
#66.5和66.0都会报错,所以int()只处理整数,这个需要牢记
#并且对于每个判断条件,都是以冒号结尾
3.for
for是另外的一种循环语句,就是会一直迭代,直到遍历每一个项目
例子:
for i in range(1,6): #range(1,6)表示从1到5的整数序列,包含1但不包含6;即左闭右开区间[1,6)
#循环体内的代码块,执行5次,每次i的值依次为1,2,3,4,5,也就是分别把数字1,2,3,4,5赋值给变量i,然后执行循环体内的代码块
print(i) #循环体内为打印i的值,也就是打印1,2,3,4,5
else: #for循环的else块-python中,for循环可以有一个else块,当for循环正常结束(没有被break语句打断)时,会执行else块中的代码
print("end") #打印for循环结束的提示信息;即循环结束,打印end
输出:
1
2
3
4
5
end
4.break
break为跳出循环、终止循环,即循环条件没有变为False,或者是没有完全迭代完,也中断
例子:
alice_age=90 #定义变量,存储alice的年龄
while True: #无限循环,条件为True时,循环继续执行
guess = int(input("guess alice_age:")) #接收用户输入的猜测年龄,并转换为整数
if guess == 90: #判断用户输入的数字是否等于alice的年龄
break # #如果猜对了,使用break语句跳出循环,结束循环
else: #如果前面的条件不满足,则执行此处代码
print("You guessed wrong") #猜错了,输出提示信息
#循环结束后,才执行此处
#即只有当用户猜对了alice的年龄,才会跳出循环,执行循环结束后的代码
print("You guessed it right! Game over")
输出:
guess alice_age:999
You guessed wrong
guess alice_age:90
You guessed it right! Game over
注意:如果没有break,可以写为如下内容,则会一直执行,无论是否猜对
alice_age=90 #定义一个变量alice_age,并赋值为90,表示Alice的年龄
while True:
guess = int(input("guess alice_age:")) #接收用户输入的猜测年龄,并转换为整数
if guess == alice_age: #判断用户输入的数字是否猜对
pass #占位,什么都不做
else: #如如果猜错了
print("You guessed wrong") #猜错了,输出提示错误信息
输出
guess alice_age:90
guess alice_age:90
guess alice_age:88
You guessed wrong
5.continue
跳过当前循环块中的剩余语句,并继续该循环的下次迭代;比如可以格式校验
alice_age = 89 # Alice 的真实年龄
while True:
# 接收用户输入(先不转整数,避免用户输入字母时直接崩溃)
user_input = input("Guess Alice's age: ")
# 如果用户输入了空字符串(直接回车),跳过本次循环
if user_input == "":
print("输入不能为空,请重新输入!")
continue # continue:立刻结束"本次"循环,直接回到 while 开头
# 后面的代码不会执行,避免对空字符串做 int() 转换导致报错
# 如果用户输入的不是纯数字(比如 abc、12.5、66a)
if not user_input.isdigit():
print("请输入一个正整数!")
continue # continue:跳过本次循环剩余代码,要求重新输入
# 如果没有 continue,程序会执行到 int() 并报错
# 到这里,输入已经确定是合法数字了,再转成整数
guess = int(user_input)
if guess == alice_age: # 猜对了
print("Congratulations! You guessed correctly.")
break # break:跳出整个循环,结束游戏
elif guess < alice_age: # 猜小了
print("Too small! Try again.")
else: # 猜大了(既不是等于,也不是小于)
print("Too big! Try again.")
# 循环结束后执行
print("Game over!")
输出:
Guess Alice's age: ahb
请输入一个正整数!
Guess Alice's age: ss@@22
请输入一个正整数!
Guess Alice's age: 899
Too big! Try again.
Guess Alice's age: 78
Too small! Try again.
Guess Alice's age: 89
Congratulations! You guessed correctly.
Game over!
浙公网安备 33010602011771号