知识点
语法:
while 表达式:
代码块
课后习题
选择题
以下关于 while 循环嵌套的说法, 正确的是?
A 内层循环必须完全执行完所有次数 后,外层循环才会进行下一次迭代
B 外层循环执行一次,内层循环会执 行固定次数,与内层循环条件无关
C 内层循环和外层循环的循环变量可 以同名
D 嵌套层数没有限制,但过多的嵌套 会使代码可读性变差
正确答案 D 我的答案 A
总结:
我脑子里想的例子是九九乘法表 想着1乘完,才跳出循环执行2乘
解析:
while 循环嵌套时,嵌套层数理论上没有限制,但过多的嵌套会使代码结构复杂,可读性变差,D 选项正确。内层循环执行次数取决于内层循环条件,不一定完全执行完才进行外层循环下一次迭代,A 选项错误;外层循环每次迭代时,内层循环根据其自身条件判断执行次数,与内层循环条件有关,B 选项错误;内层循环和外层循环的循环变量一般不应同名,否则可能导致逻辑错误,C 选项错误。
编程题
Collatz 猜想(也称为 3n+1 猜想)
是一个未解之谜。规则如下:从任意
正整数 n 开始,如果 n 是偶数,
则下一个数是 n / 2 ;如果 n 是奇
数,则下一个数是 3*n + 1 。重复这
个过程,猜想最终会达到 1。编写一
个 Python 脚本,接收用户输入的一
个正整数 n ,使用 while 循环打印
出从 n 开始到 1 的 Collatz 序列,
并计算序列的长度(步数)。
参考答案:
n_str = input("请输入一个正整数 n: ")
n = int(n_str)
if n <= 0:
print("请输入一个正整数。")
else:
current_num = n
count = 0 # 步数计数器
print("Collatz 序列:")
print(current_num, end="") # 打印第一个数
while current_num != 1:
if current_num % 2 == 0: # 偶数
current_num = current_num // 2 # 使用整数除法
else: # 奇数
current_num = 3 * current_num + 1
print(f" -> {current_num}", end="")
count += 1
print(f"\n序列长度 (步数): {count}")
我的答案:
n = int(input("请输入正整数:"))
Clist = []
while n != 1:
if n % 2 == 0:
n //= 2
Clist.append(n)
else:
n=3*n+1
Clist.append(n)
Clist.append(n)
length = len(Clist)
print(f"Collatz序列为{Clist},长度为{length}")
总结:
1.不够完美,存在漏洞,万一输入的为负数,应添加正负判断
2.打印出来总是有重复的1,原因:就是Clist.append(n) 是在while结束后执行,相当于已经为1,又将1添加进列表了,所以有重复。这一行应该在else下 且if 里面删除这句,
浙公网安备 33010602011771号