while循环
例题1:将5万元存入银行,选择一年定期自动转存的存款方式,均为1.25%,
问:要使得总存款达6万元,至少需要存款多少年?
rate = 0.0125 # 给利率变量赋初值
money = 50000 # 给存款总额变量赋初值(单位:元)
year = 0 # 给存款需要的年头赋初值
while ①:
money = ② *(1+rate) # 计算每年新的存款总额
③ # 存款年数加1
print("存款总额为6万元至少需要", year, "年") # 输出结果
分析:
第一空:while后面跟条件。当条件的值为True(即为真)的时候,执行循环体语句。在本题中,循环体的语句为下一年本金=本金*(1+rate)即每存一年后,本息和的值。所以循环条件应为存款未达到6万元的语句。
第二空:新本金=旧本金*(1+rate)原因:变量money的值是可以不断发生改变的,利用money求出的本息和可以赋给money作为下一年的本金初始值。
第三空:新year=旧year+1 原因:同上
答案:
1.money<60000 2.money 3.year=year+1 或者 year+=1
例题2:骰子六个面上分别是数字1~6。设计模拟掷骰子游戏。反复掷,掷到6为止,统计掷骰子次数。
import random
res = 0 #骰子的数字
i = ① #投掷的次数
while ②:
res=random.randint(1,6)
print(res)
③ #投掷的次数加1
print("一共掷了",i,"次")
分析:
第一空:次数的初始值
第二空:当投掷的点数不为6时要进入循环体继续投掷。
第三空:新次数=旧次数+1 每投掷一次,就要向次数变量中加1
答案:
1.0 2.res!=6 3.i=i+1
例题3:以下是一个猜数字游戏:系统随机生成一个1~100的数字,用户共有5次机会猜,
如果用户猜测数字大于系统给出的数字,显示“大了”,
如果用户猜测数字小于系统给出的数字,显示“小了”,
如果用户猜测的数字等于系统给出的数字,显示“恭喜猜中”,并退出循环。
import random
num = ①.randint(1, 100)
i = 1
while i <= 5:
ans = int(input("请猜数:"))
if ②:
print("大了,还剩", 5-i, "次机会")
elif ans < num:
print("小了,还剩", 5-i, "次机会")
else:
print("恭喜猜中!!!")
break
i = i + ③
print("正确答案是:", num)
分析:
第一空:import 模块名 ——将模块导入,使用该模块里的任意函数仍然需要指明使用了某个模块的某个函数:模块名.函数名()
第二空:猜的数ans>要猜的正确数num
第三空:每猜一次向猜测次数变量i中增加1
答案:
1.random 2.ans>num 3.1
例题4:2005年10月9日,国家测绘局正式宣布珠穆朗玛峰的高度是8844.43米,并停用之前的数据。现有一张白纸的厚度大约是0.08毫米,对折一次,厚度变0.16毫米,再对折一次,厚度变为0.32毫米,……,每对折一次,其厚度均变为对折前的两倍。假设这张纸有足够大,可对折任意次,那么这张纸至少对折多少次后,其厚度将超过珠穆朗玛峰的高度。
height = 8844430 #珠穆朗玛峰高884430毫米
h = 0.08
cnt = 0 # 记录对折次数
while h <= ①:
cnt = cnt + ② #对折次数加1
h *= ③
print(cnt)
分析:
第一空:当纸的厚度<珠穆朗玛峰的高度height的时候,纸仍然要继续对折
第二空:每对折一次,次数变量cnt就要加上1
第三空:每对这一次,纸的厚度的变量h就要变成2倍
答案:
1.height 2.1 3.2
例题5:考拉兹猜想又称为3×n+1猜想,指的是对于给定的每一个正整数n,经过下列有限次变换后,最终都能变为1。如果它是偶数,则对它除以2;如果它是奇数,则对它乘3再加1;……如此循环,直到得到1为止。
例如n=6,根据上述规则需要8次变换后得到1,变换过程:6→3→10→5→16→8→4→2→1。
任意输入一个正整数,验证考拉兹猜想,并输出变换次数。
n = int(input("n=")) # 输入正整数n
cnt = 0 # 记录变换次数
while n > ①:
cnt = cnt+1 # 变换次数cnt累加
if n % 2 == 0:
n //= ②
else:
n = 3*n+1
print(③) # 输出变换次数
分析:
第一空:当n比1大的时候,这个数还需要继续变换
第二空:n为偶数时,n变为之前的一半
第三空:将变换次数变量的值输出
答案:
1.1 2.2 3.cnt
例题6:统计一个整数的所有数位上数字“3”出现的次数,例如:3201中3的个数为1,-303173中3的个数为3。
n = abs(int(input())) # 输入一个整数
s = ① # s表示“3”的个数
while n > 0:
a = n ② 10 # 取个位数
if a == 3:
③
n = n//10
print(s)
分析:
第一空:3的个数初始值为0
第二空:求一个数的个位数(即最低位)通用方法:这个数%10
第三空:当取出的个位上的数字为3时,3的个数 这个变量的值就要加1
答案:
1.0 2.% 3.s=s+1
例题7:一种放射性物质不断发生衰变,每经过一年剩余的质量约为上一年的84%,编写程序求最快经过多少年,剩余的质量低于原来的一半?
w = float(input("输入放射性物质的质量:"))
n = ① / 2 # n为该物质质量的一半
cnt = 0 # 年数
while w >= n:
w *= ②
cnt += ③
print(cnt)
分析:
第一空:n的值等于质量w/2
第二空:新质量=原质量*0.84。 在python中,%是取余符号,因此百分之48需要改成小数形式
第三空:每衰败一年,年数加1