流程控制语句
循环结构
循环:周而复始,重复做同一件事。一直重复操作,没有终止,在编程里称为死循环。(避免死循环,容易卡死)
常见的循环结束状态:
- 循环满 N 次
- 循环达到某个条件
python提供的循环操作,有两个结构:
for - in 循环
适合于循环满 N 次的情景
本质上是在遍历(逐个获取)容器型数据,在遍历获取元素的过程中进行相应的逻辑判断。容器型数据中有几个元素,这个循环就执行几次。
语法:
for 变量名 in 容器型数据:
循环体
解读:
in 可以理解成进入容器中拿元素数据
变量名 in 进入拿到数据之后,赋值给变量名
循环结束点:in 到容器中,没有数据可拿的时候,循环结束
s = 'hello'
# 逐个将字符串s中的元素取出来
for ch in s:
print(ch)
# 获取字符串中小于l的字符
# 逻辑:获取到元素之后,要对其进行判断,判断是否是小于l的
for ch1 in s:
if ch1 < 'l':
print(ch1)
假如跑100圈,使用循环的时候,可以使用range快速生成一个等差数列
range 等差数列
range(stop)
# 设定一个结束值, 等差数列是从0开始 步长为1 到stop[不包含]结束
range(10) ====> 0 1 2 3 4 5 6 7 8 9
range(start, stop)
# 设定了起始值和结束值 等差数列是从start[包含]开始 步长为1 到stop[不包含]结束
range(1, 11) ====> 1 2 3 4 5 6 7 8 9 10
range(start, stop, step) #开始,结束,步长
**step步长 **
正数 — 生成的是递增的等差数列 要求 起始值 < 结束值
负数 — 生成的是递减的等差数列 要求 起始值 > 结束值
stop结束位置(不包含)
start开始位置(包含)
range (1, 10, 2) ====> 1 3 5 7 9
range (10, 0, -2) ====> 10 8 6 4 2
range (100) ===> 0-99
for ele in range(1,101):
print('跑第',ele,'圈')
for ele1 in range(0,100,5):
print(ele1)
例:求1+2+3+…+100
产生一个容器,容器防着1-100的数据,遍历容器数值,取出来一个累加起来
注意:和随着取值会发生变化(定义一个变量,用来接受累加和的值),变量名使用等号进行赋值时,会把原本的数据覆盖
total = 0 # 放在循环外面,避免每次循环重置
for i in range(1, 101):
total += i
'''
第一次 in 的时候 i = 1
total += i ====> total = total + i = 1
第二次 in 的时候 i = 2
total += i ====> total = total + i = 1 + 2 = 3
第三次 in 的时候 i = 3
total += i ====> total = total + i = 3 + 3 = 6
'''
print(total)
例: 求1-2+3-4+5-6+…-98+99-100
分析:奇数时相加的,偶数时相减的。获取数据时加还是减,需要判断拿到的数据是奇数还是偶数
total1 = 0
for y in range(1, 101):
if y % 2 == 1:
total1 += y
else:
total1 -= y
print(total1)
当循环结束的时候,把所有的数据都参与运算了,写的代码与for对其,代表已经出了循环。如果还是缩进的操作,代表还在循环中。
total2 = 0 # 定义一个变量,记录累加和
for k in range(1, 101):
# 不想使用分支判断,可以利用对-1求幂数。(-1)的奇数次幂结果是-1,(-1)的偶数次幂结果是1
value = (-1) ** (k - 1) * k
total2 += value
print(total2)
例:求1 ** 2+2 ** 2+3 ** 2+…+10 ** 2 结果
total3 = 0
for a in range(1,11):
total3 += a ** 2
print(total3)
例:求1-100中能被3整除且个位数为5的数据的个数
count = 0 #需要一个变量作为计数器
for b in range(1,101):
if b % 3 == 0 and b % 10 == 5:
count += 1
print(count)
while循环
语法:
While 条件判断:
循环体代码块
解读:
只要条件成立,程序一直循环,直到循环条件不成立
for循环思想
需要一个容器,容器中存放1-10
for i in range(1, 11):
print(i)
while 循环思想
-
重复做的操作时什么? 打印数据:每次打印都是一个数据
-
做这件事情的条件? 只要打印的数据没有到10,一直打印
num = 1
while num <= 10: # 循环的操作
print(num)
num += 1 # 数据在原来基础上 +1
print('循环结束时,num的值', num)
例:1-10中的偶数 使用while打印
m = 1 while m <= 10: if m % 2 == 0: print(m) m += 1
例:使用while循环,完成1+2+3+…+100
num2 = 1 total = 0 while num2 <= 100: total1 += num2 num2 += 1 print(total1)
例:求1-2+3-4+5-6+…-98+99-100
total = 0 num = 1 while num <= 100: if num % 2 == 1: total += num else: total -= num num += 1 print(total)
例:求1-100中能被3整除且个位数为5的数据的个数
count = 0 # 计数器 num = 1 while num <= 100: if num % 3 == 0 and num % 10 == 5: count += 1 num += 1 print(count)
循环结束的场景
-
明确循环次数—— for-in 循环,遍历容器,容器中有几个数据,循环就执行几次
-
明确结束状态的—— while 循环
while 循环条件:满足条件就执行
经过上面的代码演示,while也可以适用于明确循环次数,只不过while写起来麻烦,建议使用for-in
案例:有1023个桃子,猴子每天吃桃子剩余个数的一半多1个,问多少天能吃完(操作的时候,循环次数不明确,使用while循环)
- 重复做的事情是什么 桃子个数/2+1
- 结束做这件事情的状态(只要没有达到这个状态就不会结束) 桃子个数为0
需要准备的数据
- 需要一个变量名,接受桃子的个数,起始值是1023
- 计数器:记录吃的天数
peach_count = 1023 # 桃子的个数 day = 0 # 计数器(天数) while peach_count > 0: peach_count = peach_count - (peach_count // 2 + 1) # 记录每天吃完桃子的剩余个数 day += 1 # 计数器 +1 print('1023个桃子猴子需要',day,'天吃完')