Day 04
一、while循环
- 语法
while 条件语句:
循环体(需要重复执行的代码)
其他代码 - 执行过程:不断判断条件语句是否为True,如果是就执行循环体,如果不是循环直接结束。
- 控制次数的方式:保证条件一开始是True,经历过指定次数以后条件会由True变成False。
- 死循环 - 条件语句一直都是True。
- 例:打印0、1、2、3、4、5、…、100
num = 0
while num <= 100:
print(num)
num += 1
2. for 循环和 while 循环的选择
- 如果循环次数确定使用for循环;如果循环次数不确定,使用while循环。
- 循环次数不确定 - 程序员在写代码的时候无法确定(确认)这个循环会重复多少次(次数有使用程序的用户决定的)
- 例:打印0、1、2、3、4、5、…、100
- 提示用户输入密码,直到输入正确为止:
156324
请输入密码(6位):726162
请输入密码(6位):615252
请输入密码(6位):192822
…
请输入密码(6位):156324
pw = '156234'
value = None
while value != pw:
value = input('请输入密码(6位):')
"""
while True:
需要重执行代码
if 循环结束条件:
break
"""
二、循环关键字
continue和break都是循环体关键字(只能出现在循环体中)
1.continue - 结束一次循环(结束当次循环)
- 在执行循环体的时候如果遇到continue,那么这一次循环结束,直接进入下一次循环
- 例:打印0-5的奇数:
for x in range(5):
if x % 2 == 0:
continue
print(x)
"""
range(5) - 0,1,2,3,4
x = 0: if 0 % 2 == 0 -> if 0 == 0 -> if True: continue(一次循环结束, 马上进入下一次循环)
x = 1: if 1 % 2 == 0 -> if 1 == 0 -> if False; print(x) -> 打印 1
x = 2: if 2 % 2 == 0 -> if 0 == 0 -> if True: continue(一次循环结束, 马上进入下一次循环)
x = 3: if 3 % 2 == 0 -> if 1 == 0 -> if False; print(x) -> 打印 3
x = 4: if 4 % 2 == 0 -> if 0 == 0 -> if True: continue(一次循环结束, 马上进入下一次循环)
整个循环结束
"""
2. break - 结束整个循环
- 在执行循环体的时候如果遇到break,整个循环直接结束(循环体后面的代码不执行,也不再进入下一次循环)
- 例:
for x in range(10):
if x > 3:
break
print(x)
"""
0
1
2
3
"""
3. while 使用套路
- 例 : 用户输入正确密码:
"""
while True:
每次循环需要做的事情(需要重复执行的代码)
if 循环结束条件:
break
"""
"""
123456
请输入密码:231
请输入密码:22311
...
请输入密码:123456
"""
pw = '123456'
while True:
value = input('请输入密码:')
if value == pw:
break
- 练习:猜数字游戏
from random import randint
num = randint(0,100)
print(num)
count = 1
while True:
a = int(input('请输入猜的数:'))
if a > num:
count += 1
print('猜大了,小一点')
elif a < num:
print('猜小了,大一点')
count += 1
elif a == num:
print('恭喜,猜对了')
break
if count > 7:
print('你一共猜了',count,'次,真是个小天才呢', sep = '')
if count < 7:
print('你只用了',count,'次,','就猜对了,真是个小天才呢',sep = '')
4.循环 else
-
else的存在不影响原循环的执行
-
如果else对应的循环是自然死亡else后面的代码段会执行(就循环结束后执行);
-
如果else对应的循环是因为遇到break而结束的,else后面的代码在循环结束后不会执行。
-
完整的for循环:
for 变量 in 序列:
循环体
else:
代码段 -
完整的while循环:
while 条件语句:
循环体
else:
代码段 -
例:
for x in range(5):
print(x, '====')
if x > 3:
break
print(x, '++++')
else:
print('else!')
------------------------------------华丽的分割线-----------------------------------
课后练习题:
# 1.根据输入的成绩的范围打印`及格` 或者`不及格`。
score = int(input('请输入成绩:'))
if score >= 60:
print('不及格')
else:
print('不及格')
# 2.根据输入的年纪范围打印`成年`或者`未成年`,如果年龄不在正常范围内(0~150)打印`这不是人!`。
age = int(input('请输入年龄:'))
if 18 <= age <= 150:
print('成年')
elif 0 <= age <= 18:
print('未成年')
else:
print('这不是人')
# 3.输入两个整数a和b,若a-b的结果为奇数,则输出该结果,否则输出提示信息`a-b的结果不是奇数`
a = int(input('请输入一个整数:'))
b = int(input('请输入一个整数:'))
if (a-b) % 2 != 0:
print(a-b)
else:
print('a-b的结果不是奇数')
# 4.使用for循环输出 0~100内所有3的倍数。
for i in range(3, 100):
if i % 3 ==0:
print(i)
# 5.使用for循环输出100~200内个位数或者十位数能被3整除的数。
for i in range(100, 200):
if (i % 10 != 0 and i % 10 % 3 == 0) or (i // 10 % 10 != 0 and i // 10 % 10 % 3 == 0):
print(i)
# 6使用for循环统计100~200中十位数是5的数的个数.
count = 0
for i in range(100, 200):
if i // 10 % 10 == 5:
count += 1
print(count)
# 7.使用for循环打印50~150中所有能被3整除但是不能被5整除的数
for i in range(51,151,3):
if i % 5 !=0:
print(i)
# 8.使用for循环计算50~150中所有能被3整除但是不能被5整除的数的和
count = 0
for i in range(51,151,3):
if i % 5 !=0:
count += i
print(i)
# 9.统计100以内个位数是2并且能够被3整除的数的个数。
# 进阶
# 1.输入任意一个正整数,求他是几位数?
num = int(input('输入一个正整数:'))
count = 1
while num // 10:
num //= 10
count += 1
print(count)
# 2.打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是 ⼀个⽔仙花数,因为 `1³ + 5³ + 3³ ` 等于 153。
for i in range(100,1000):
if (i//100)**2+(i%100//10)**2+(i%10)**2 == i:
print(i)
# 3.判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
num = int(input('输入一个正整数:'))
count = 0
for i in range(2,num):
if num % i == 0:
count += 1
if count == 0:
print(num,'是素数')
else:
print(num, '不是素数')
# 4.输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
for i in range(1, 10):
for j in range(1, i + 1):
print(f'{i}*{j}={i * j}', end='\t')
print()
# 5.这是经典的"百马百担"问题,
# 有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)
for i in range(0,35):
for j in range(0,51):
if 6 * i + 4 * j + (100 - i - j) == 200:
print('大马',(i),'中马',(j),'小马',(100-i-j))