一. For 循环
1. 语法:
for 变量 in 容器:
循环体
容器型数据类型 : 字符串、列表、字典、元组、集合、迭代器、生成器、range()
循环体:
- 结构上,和for 保持一个缩进的一条或者多条语句
- 逻辑上,循环体是需要重复执行的代码
循环原理
- 让变量去容器中取值,一个一个的取,取完为止,每取一个值就执行一次循环体。
- for 循环的循环次数是由容器中的个数决定。
2. range()
1. 用法:
- range(n) 创建 [0,n) 的等差数列,首项为0,尾是n-1,差是1 。 range(5) : --- 0 1 2 3 4
- range(m,n):创建[m,n)的等差数列,差是1.
- range(m,n, step) : 创建一个[ m,n) 的等差数列,差是step(可为负数 意思是减法)。
2.运用场景
- 统计个数
第一步:定义一个变量默认值是0来保存最后的个数
第二部:利用循环,一次获取每一个统计对象
第三步:遇到一个满足符号统计条件的数据个数载原来的基础上+1
# 1-100 以内的偶数个数
count_even = 0
for i in range(1,101):
if i % 2 == 0:
count_even += 1
print(f"1-100中偶数数量为{count_even}")
# 2)统计1~100中能被3整除但是不能被2整除的数的个数
count_num = 0
for i in range(1,101):
if i % 3 == 0 and i % 2 != 0:
count_num += 1
print("1到100中可以被3整除但不能被2整除个数:", count_num)
# 统计不及格的人数
count_nopass = 0
grades = [89,90,45,66,70,99,20,59]
for i in grades:
if i < 60:
count_nopass += 1
print(f"不及格数量为{count_nopass}")
- 累计求和
求grades中所有及格同学分数的和
# 统计所有及格学生的成绩总和
total_score = 0
grades = [89, 90, 45, 66, 70, 99, 20, 59]
for i in grades:
if i >= 60:
total_score += i
print(total_score)
求数字个位数的和
#求nums中所有元素个位的和
sum = 0
nums = [78, 912, 67, 34, 19, 100]
for i in nums:
k = i % 10
sum += k
print(sum)
二. while 循环
1. 语法
while 条件语句:
循环体
条件语句: 可以是任何有结果的表达式,一般是判断语句
循环体: 结构上,是和while保持一个缩进的一条或多条语句
逻辑上,循环体就是需要重复执行代码
循环原理: 不断的判断条件语句是否成立(True),如果是就继续执行循环体,否则循 环体结束
案例: 如何用while 控制循环次数(打印5次hello)
i=0
while i < 5:
print('hello')
i+=1
# 练习1:使用while循环打印等差数列5 6 7 8 9 ... 20
# 打印等差数列 5 到 20
end = 20
start = 5
while start <= end:
print(start)
start += 1
print("over")
# 练习2:使用while循环打印等差数列10 9 8 7 6 ... 0
end2 = 0
start2 = 10
while start2 >= end2:
print(start2)
start2 -= 1
print('over')
# 练习3:使用while循环统计100以内不能被5整除的数的个数
# 练习3:使用while循环统计100以内不能被5整除的数的个数
count = 0
start3 = 1
while start3 <= 100:
if start3 % 5 != 0:
count += 1
start3 += 1
print("100以内不能被5整除的数的个数:", count)
while 和 for 的选择:
- for 循环 解决不了循环次数不确定的问题 ,(我只知道这里需要写循环,循环的次数不由你决定、控制不住,由使用者决定等)
例子: 提示用户输入密码直到用户输入正确为止
value = None
pw = '123456'
while value != pw:
value = input('请输入密码')
三. 循环关键字
1. continue
- 结束一次循环: 执行循环体时,遇到continue,本次循环结束,直接进入到下次循环。
执行的结果为 1、3、5、7、9 。 因为遇到continue, 满足x % 2 的结果不进行输出。for x in range(10): if x % 2 == 0: continue print(x)
###continue
是一个控制流语句,用于跳过循环体中剩余的代码,直接进入下一次循环迭代。当 continue
被执行时,程序将跳过循环体中 continue
后面的代码,然后继续下一次循环。
下面是一个简单的例子,演示了 continue
的用法:
for i in range(1, 6):
if i == 3:
continue # 当 i 等于 3 时,跳过本次循环的剩余代码
print("当前值:", i)
print("循环结束")
2. break - 结束所有循环
执行循环体时如果遇到了break,整个循环直接结束(本次循环没执行的部分不再执行,也不进入下次循环)
for x in range(5,15):
if x % 4 == 0:
break
print(x)
这里的输出结果是: 5 、 6、 7
因为第一个数是5,5对4取余不是0,不进入循环体,输出5。 6、7 同样不进入循环体,直接输出, 但是8 ,对4取余为0, 进入循环体, break。结束程序。
3. 当while 遇到break
- 使用while 循环的套路:
while True:
需要重复执行的操作
if 循环结束条件
break
pw = '123456'
while True:
value = input('请输入密码')
if value == pw:
break
猜数字游戏:首先一共只能猜3次,范围限制在0,100. 并且要提示用户输入的数字大了还是小了。
from random import randint
system_num =randint(0,100)
attempt = 0
while True:
guess_num = int(input('请输入您所猜想的数字'))
attempt += 1
if guess_num == system_num:
print('恭喜猜对了')
break
elif guess_num > system_num:
print('大了')
else:
print('小了')
if attempt > 3:
print('超过次数')
break
4. else
完整的for 循环结构:
for 变量 in 容器:
循环体
else:
代码块
完整的while 循环结构
while 条件语句:
循环体
else:
代码段
- 循环后面的else 不会影响前面循环的执行
- 如果前面的循环正常结束,在循环结束后就会之行else后面的代码段,如果循环是因为遇到break结束的,循环结束else后面的代码段不会执行。
用else的案例:
判断list中的元素是否都是整数, 如果都是整数就打印‘整数列表’, 否则就打印‘非整数列表’
list = [10, 2.3, 89, 40, 2]
for num in list:
if type(num) != int:
print('非整数列表')
break
else:
print('整数列表')
解析:else和for 在一列时: 遍历列表,进入if循环,进行判断如果数字类型是整数型,不进入循环,再看列表中的下一个数字,再看类型。如果不是整数类型,进入循环体,打印非整数列表,然后结束整个代码。 # 如果都是整数型, 就进入else,说明为整数列表。