循环结构 - 让代码重复执行(代码只写一遍,重复执行多次)
工具:for、 while
1.for循环
- 语法:
for 变量 in 序列:
循环体
-
说明
for、in - 关键字 固定写法
变量 - 合法变量名
序列 - 容器型数据类型对应的数据,例如:字符串、列表、字典、元组、集合、迭代器、生成器、range等
: - 固定写法
循环体 - 结构上,和for保存一个缩进的一天或者多条语句(至少一条);
逻辑上,需要重复执行的代码 -
执行过程:
让变量去序列中取值,一个一个的取,取完为止,每取一个值就执行一次循环体。(for循环循环次数有序列中的元素个数决定)
for x in 'abc':
print(x,'你好')
打印结果:
# 第1次:
# x = 'a': print(x,'你好') -> print('a','你好')
# 第2次:
# x = 'b': print(x,'你好') -> print('b','你好')
# 第3次:
# x = 'c': print(x,'你好') -> print('c','你好')
# 第4次:(循环结束)
a 你好
b 你好
c 你好
案例:求列表中的和
nums = [10,89,45,23]
for i in nums:
print(i * 10)
2.while循环
- 语法:
while 条件语句:
循环体
- 执行过程:
不断判断条件语句是否为True,为True就执行循环体。直到条件语句的结构是False
,整个循环直接结束!
(先条件语句是否为True,为True执行循环体,执行完循环体再判断条件语句是否为True,为True再执行循环体,…一次类推,直到条件语句为False,整个循环结束)
x = 0
while x < 10:
print('hello world')
x += 1
案例1:求1+2+3+4+…+100的和
sum1 = 0
num = 1
while num < 101:
sum1 += num
num += 1
print(sum1)
案例2: 统计100 ~ 200中能被7整除的偶数个数
count = 0
num = 100
while num <= 200:
if num % 7 == 0:
count += 1
num += 2
print(count)
区别:for循环和while循环的选择
基本原则: 能用for循环解决的问题都使用for循环,for循环解决不了的才使用while循环
for循环解决不了的问题:循环次数不确定(程序员在写代码的时候无法确认循环次数 - 次数由使用者决定)
password = '123456'
value = None
while value != password:
value = input('请输入密码:')
3.continue和break
注意:continue和break是关键字,只能在循环体中使用
1)continue - 结束一次循环
执行循环体的时候遇到了continue,那么这次循环结束,直接进入下一次循环
for i in range(5):
print('======')
print('------')
print('++++++')
for i in range(10):
if i % 2 == 0:
continue
print(i)
i取值:0、1、2、3、4、5、6、7、8、9
i = 0: if 0 % 2 == 0 -> if True: continue
i = 1: if 1 % 2 == 0 -> if False->print(i)
…
2)break - 结束整个循环
执行循环体的时候如果遇到break,整个循环直接结束
for i in range(5):
print('======')
break
print('------')
print('++++++')
for i in range(10):
if i == 3:
break
print(i)
3.当while遇上break
while循环使用的固定结构:
while True:
需要重复执行的操作
if 循环结束条件:
break
password = '123456'
while True:
value = input('请输入密码:')
if value == password:
break
练习:猜数字游戏
系统随机产生一个0~100的整数,然后提示用户输入数字,直到输入正确为止。当输入错误的时候给出相应的提示。
假设随机数是:48
请输入一个整数(0~100):50
大了,再小点儿!
请输入一个整数(0~100):25
小了,再大点儿!
请输入一个整数(0~100):30
小了,再大点儿!
…
请输入一个整数(0~100):48
恭喜你,猜对了!
(结束)
# 导入随机数random模块
from random import randint
count = 0
value = randint(0,100)
while True:
print(f'第{count + 1}次')
num = int(input('请输入数字:'))
count += 1
if num == value:
print('恭喜你,猜对了!')
break
elif num < value:
print('小了,再大点儿!')
else:
print('大了,再小点儿')
print(f'一共{count}次')
4.循环的else
完整的循环结构
- 完整的for循环
for 变量 in 序列:
循环体
else:
代码段
- 完整的while循环:
while 条件语句:
循环体
else:
代码段
else的作用:
- else的存在不会影响原来循环的执行
- 如果前面的循环是自然死亡,在循环结束后会执行else中的代码段;如果循环是因为遇到break而结束,else中的代码段不会执行
for i in range(5):
print('======')
print('++++++')
print('------')
else:
print('!!!!!!')
sum1 = 0
for i in range(10):
sum1 += i
if i == 5:
break
print(i)
else:
print('!!!!!!')
print(sum1)
拓展
01 range函数 - 创建一个等差数列
例如:
1 2 3 4 5 6 - 差1
3 6 9 12 - 差3
50 40 30 20 - 差-10
形式:
- range(N) - 产生[0,N)的等差数列,差是1; range(5) -> 0,1,2,3,4
- range(M,N) - 产生[M,N)的等差数列,差是1; range(5,15) -> 5,6,7,8,9,10,11,12,13,14
range(-3,3) -> -3,-2,-1,0,1,2 - range(M,N,step) - 产生[M,N)的等差数列,差是step;range(3,13,3) -> 3,6,9,12 range(50,19,-10) -> 50,40,30,20
问题:打印’hello world’100次?
for i in range(50,19,-10):
print(i)
02 求和和统计个数的套路
1.累积求和
求和套路:
第1步:在循环外面定义变量来保存最后的和(变量默认值是0)
第2步:通过循环依次获取所有需要求和的对象
第3步:在循环体中获取到一个求和对象,就往保存和的变量中加一个数据(+=)
最后:循环结束的时候保存和的变量中的数据就是最后的和
案例1:求1+2+3+4+…+100的和
sum1 = 0
for i in range(1, 101):
sum1 += i
print(sum1)
案例2:求100到200中所有偶数的和(包含100和200)
# 方法1:
sum2 = 0
for i in range(100, 201, 2):
sum2 += i
print(sum2)
# 方法2:
sum2 = 0
for i in range(100,201):
if i % 2 == 0:
sum2 += i
print(sum2)
练习:求100以内所有能被3整除但是不能被5整除的数的和
# 方法1:
sum = 0
for i in range(0, 101):
if i % 3 == 0 and i % 5 != 0:
sum += i
print(sum)
# 方法2:
sum = 0
for i in range(0, 101, 3):
if i % 5 != 0:
sum += i
print(sum)
案例3:求scores中所有分数
scores = [89, 56, 78, 99, 70]
sum3 = 0
for i in scores:
sum3 += i
print(sum3)
2.统计个数
案例1: 统计scores中不及格的人数
scores = [89, 56, 89, 99, 70, 48, 79, 30]
count = 0
for i in scores:
if i < 60:
count += 1
print(count)
练习: 统计100 ~ 200中能被7整除的偶数个数
count = 0
for i in range(100, 201, 2):
if i % 7 == 0:
count += 1
print(count)