目录
while循环
除了for循环,python还有while循环。
定义:当while条件满足时,重复执行当前while条件下的语句块,直至while条件不满足,跳出当前循环并执行下一个语句块。如图:
语法:
while(关键字) 条件:
do anything ....
例子:
n = 0
while (n<10):
print(n)
n = n+1
运行结果为:
0
1
2
3
4
5
6
7
8
9
练习:
要求使用while循环,使用户输入一个4位数的整数作为要判断的年份,然后对输入的整数进行判断,输出是不是闰年。
解析:while条件成立时(用户输入的不是4位数),就提示用户输入4位数,并且让用户继续输入,直到满足while条件(输入的是4位数),在进行判断该4位数能否被4整除,如果可以被4整除,则返回闰年,如果不能被4整除,则返回不是闰年。
years = int(input("请输入一个年份(4位数):"))
while 1000>years or years>9999:
print("#########注意:请输入一个4位数#########")
years = int(input("请重新输入一个年份(4位数):"))
if 1000<years<9999:
if years%400 == 0 or years%4 == 0:
print(f"{years}为闰年")
else:
print(f"{years}不是闰年")
运行结果为:
请输入一个年份(4位数):123
#########注意:请输入一个4位数#########
请重新输入一个年份(4位数):12345
#########注意:请输入一个4位数#########
请重新输入一个年份(4位数):1996
1996为闰年
无限循环(死循环)
从while循环的语法结构可以看出,当while条件成立时,就一直执行while语句块,直到条件不成立。有时候,我们会使用到条件一直成立的情况,最常见的就是True(或者1)来做条件,这样循环就会一直进行。
例子:无限输出自然数
n = 0
while True:
print(n)
n+=1
运行结果为:
0
1
2
3
4
...
999999999
...
while循环中的else语句
示例:
n = 0
while n < 10:
n += 1
print(n)
else:
print("循环结束")
运行结果为:
1
2
3
4
5
6
7
8
9
10
示例:
n = 0
while n < 10:
if n == 5:
print("循环非正常结束")
break
n += 1
print(n)
else:
print("循环结束")
#循环非正常结束,不运行else
运行结果为:
1
2
3
4
5
循环非正常结束
综合练习:
1.每次随机出10道100以内的加法题,每做对一道题目得10分,做错一道不得分,最后输出游戏的最终得分。
解析:
import random
n = 0
second = 0
while n < 10:
a = random.randint(0, 100)
b = random.randint(0, 100)
input_values = int(input(f"{a}+{b}="))
if a + b == input_values:
second = second+10
print("回答正确,加10分")
else:
if a + b != input_values:
print("回答错误,不得分")
n += 1
print(f"最终得分:{second}")
运算结果为:
14+19=33
回答正确,加10分
64+90=154
回答正确,加10分
59+62=121
回答正确,加10分
50+12=62
回答正确,加10分
63+10=73
回答正确,加10分
61+64=125
回答正确,加10分
11+77=88
回答正确,加10分
6+86=92
回答正确,加10分
7+49=56
回答正确,加10分
68+6=74
回答正确,加10分
最终得分:100
2.输入两个整数,计算这两个整数的最大公约数及最小公倍数。
解析:
print('自动求两个整数的最大公约数及最小公倍数:')
a = int(input("请输入第一个整数:"))
b = int(input("请输入第二个整数:"))
if a < b:
a, b = b, a
c = b
while a%c != 0:
c = a%c
print(f"最大公约数为:{c}")
print(f"最大公倍数为:{a*b//c}")
运行结果为:
自动求两个整数的最大公约数及最小公倍数:
请输入第一个整数:9
请输入第二个整数:6
最大公约数为:3
最大公倍数为:18
3.使用循环遍历的方法计算“鸡兔同笼”问题,已知头共有30个,脚共有90只,问笼中鸡和兔各有多少只?
解析:
for ji in range(30):
tu = 30 - ji
if 2 * ji + 4 * tu == 90:
print(f"鸡:{ji}只,兔:{tu}只")
break
运行结果为:
鸡:15只,兔:15只
4.对于任意自然数,如果是奇数就将它乘以3再加1,如果是偶数,就将它除以2,这样经过若干次除以2后,最终这个数一定会变成1。本练习需要解决的是,对于给定的任意数,需要多少次除以2后才能使结果第一次变成1 ?
解析:
math = int(input("请输入一个自然数:"))
i = 1
while i < math:
if math % 2 == 0: #判断偶数
math = math/2
elif math % 2 == 1: #判断奇数,并进行运算
math = math*3 + 1
elif math / 2 == 1:
print(math)
break
i = i + 1 # 计数
print(f"经过{i}次除2后才能第一次变成1")
运算结果为:
请输入一个自然数:10
经过5次除2后才能第一次变成1