鱼C论坛

 找回密码
 立即注册
查看: 3356|回复: 6

[已解决][课后作业] 第015讲:了不起的分支和循环(II)角谷猜想一問

[复制链接]
发表于 2022-12-15 21:18:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
'''角谷猜想的内容是:任意给定一个正整数,若它为偶数则除以2,若它为奇数则乘以3再加 1,得到一个新的自然数,按照这样的方法计算下去,最终的结果必将是 1。
比如给定的自然数是5,则5*3+1=16 -> 16/2=8 -> 8/2=4 -> 4/2=2 -> 2/2=1
现在要求大家编写一个验证角谷猜想的程序。'''

number = int(input("請輸入一個整數: "))
print("\n")
print("請輸入一個自然數:",number)

while number%2 !=0:        #當number%2 !=0時
        print (number,"*","3","+","1","=",int(number*3+1))        #輸出number*3+1=新number
        number = int(number*3+1)        #新number賦值
while number%2 == 0:        #新number如果%2==0時
        print (number,"/","2","=",int(number/2))        #輸出新number/2=number
        number = int(number/2)        #新number賦值
while number == 1:        #最後如number==1時
        break        #跳出循環

想請問一下為什麼不會一直跌落循環入面呢, 請問思路有沒有錯到? 代碼又不能走了
最佳答案
2022-12-15 21:28:23
你的程序并不在一个循环内,修改如下:
number = int(input("請輸入一個整數: "))
print("\n")
print("請輸入一個自然數:",number)

while True:
    if number%2 !=0:        #當number%2 !=0時
        print (number,"*","3","+","1","=",int(number*3+1))        #輸出number*3+1=新number
        number = int(number*3+1)        #新number賦值
    if number%2 == 0:        #新number如果%2==0時
        print (number,"/","2","=",int(number/2))        #輸出新number/2=number
        number = int(number/2)        #新number賦值
    if number == 1:        #最後如number==1時
        break        #跳出循環
运行结果:
請輸入一個整數: 5


請輸入一個自然數: 5
5 * 3 + 1 = 16
16 / 2 = 8
8 / 2 = 4
4 / 2 = 2
2 / 2 = 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-15 21:28:23 | 显示全部楼层    本楼为最佳答案   
你的程序并不在一个循环内,修改如下:
number = int(input("請輸入一個整數: "))
print("\n")
print("請輸入一個自然數:",number)

while True:
    if number%2 !=0:        #當number%2 !=0時
        print (number,"*","3","+","1","=",int(number*3+1))        #輸出number*3+1=新number
        number = int(number*3+1)        #新number賦值
    if number%2 == 0:        #新number如果%2==0時
        print (number,"/","2","=",int(number/2))        #輸出新number/2=number
        number = int(number/2)        #新number賦值
    if number == 1:        #最後如number==1時
        break        #跳出循環
运行结果:
請輸入一個整數: 5


請輸入一個自然數: 5
5 * 3 + 1 = 16
16 / 2 = 8
8 / 2 = 4
4 / 2 = 2
2 / 2 = 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-15 21:34:18 | 显示全部楼层
本帖最后由 網絡奇人怪小四 于 2022-12-15 21:35 编辑
lxping 发表于 2022-12-15 21:28
你的程序并不在一个循环内,修改如下:

运行结果:


請問while true是什麼意思
while true 跟 if 的撘配我第一次見, 可否解析一下
我的代碼為什麼不是在一個循環里呢?
不太明白
請師兄指點
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-15 21:42:05 | 显示全部楼层
lxping 发表于 2022-12-15 21:28
你的程序并不在一个循环内,修改如下:

运行结果:

還有我找到一個小發現
while true 和 while number >0 功能是一樣的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-15 21:47:58 | 显示全部楼层
while True:就是条件成立,一直循环执行,这里要靠break语句打破循环
請輸入一個整數: 11


請輸入一個自然數: 11
11 * 3 + 1 = 34
34 / 2 = 17
17 * 3 + 1 = 52
52 / 2 = 26
26 / 2 = 13
13 * 3 + 1 = 40
40 / 2 = 20
20 / 2 = 10
10 / 2 = 5
5 * 3 + 1 = 16
16 / 2 = 8
8 / 2 = 4
4 / 2 = 2
2 / 2 = 1
上面是我改了以后的运行结果,
你的程序运行结果如下:
請輸入一個整數: 11


請輸入一個自然數: 11
11 * 3 + 1 = 34
34 / 2 = 17
当你的程序走到第二个循环语句也就是while number%2 == 0:如果得到一个奇数也就是本例中的17 后没办法再回去执行第一个循环既while number%2 != 0:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-15 21:49:23 | 显示全部楼层
網絡奇人怪小四 发表于 2022-12-15 21:42
還有我找到一個小發現
while true 和 while number >0 功能是一樣的

在number不等于0的情况下是一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-15 22:01:36 | 显示全部楼层
lxping 发表于 2022-12-15 21:47
while True:就是条件成立,一直循环执行,这里要靠break语句打破循环

上面是我改了以后的运行结果,

對啊, 我也發現我的代碼走到循環2就跑不動了, 為什麼呢
你的代碼我好像明白了,就是用while true一直跌落循環語句,用break來跳出來
我的代碼是有問題但我又說不出是那有問題
是我基本功不好嗎,還是我對while循環語句理解錯了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-25 07:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表