|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
讲解分支语句的课后练习题如下:
验证角谷猜想
角谷猜想的内容是:任意给定一个正整数,若它为偶数则除以 2,若它为奇数则乘以 3 再加 1,得到一个新的自然数,按照这样的方法计算下去,最终的结果必将是:
比如给定的自然数是 5,则 5 * 3 + 1 = 16 -> 16 / 2 = 8 -> 8 / 2 = 4 -> 4 / 2 = 2 -> 2 / 2 = 1。
现在要求大家编写一个验证角谷猜想的程序。
该题的答案如下:
n = int(input("请输入一个自然数:"))
while n > 0:
if n % 2 == 0:
print(n, "/2 = ", n // 2, sep='')
n = n // 2
else:
print(n, "*3+1 = ", n * 3 + 1, sep='')
n = n * 3 + 1
if n == 1:
break
运行结果如下:
请输入一个自然数: 5
5*3+1 = 16
16/2 = 8
8/2 = 4
4/2 = 2
2/2 = 1
我的困惑是:
1)为何在if和else的分支里的语句块最后不需要加上continue语句,好让判断完的语句返回到while循环语句进行第二轮判断.
2)我如果在if和else的语句块最后都加上continue语句的话,程序运行起来就会进入到死循环(请见截图),这是为什么?烦请大神指点,谢谢!
本帖最后由 jackz007 于 2024-12-6 17:03 编辑
- n = int(input("请输入一个自然数:"))
- while n > 0:
- if n % 2 == 0: # 无条件执行【1.1】
- print(n, "/2 = ", n // 2, sep='')
- n = n // 2
- else: # 无条件执行【1.2】
- print(n, "*3+1 = ", n * 3 + 1, sep='')
- n = n * 3 + 1
- if n == 1: # 无条件执行【2】
- break
复制代码
在这个 while 循环中,无条件执行的是两个 if 语句,其他语句都是从属。【1.1】、【1.2】属于同一个 if ... else 结构,本身互斥,不需要 continue ,【2】位于循环末尾,没有任何需要略过的语句,所以,也不需要 continue 。
我们知道,continue 会略过循环中剩余的语句直接返回,如果在【1.1】、【1.2】中使用 continue,则 【2】会被无条件略过,而【2】是循环的唯一出口,这样做会废弃循环出口,这就是死循环的根本原因。
|
-
|