網絡奇人怪小四 发表于 2022-12-15 21:18:36

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

'''角谷猜想的内容是:任意给定一个正整数,若它为偶数则除以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        #跳出循環


想請問一下為什麼不會一直跌落循環入面呢, 請問思路有沒有錯到? 代碼又不能走了

lxping 发表于 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

網絡奇人怪小四 发表于 2022-12-15 21:34:18

本帖最后由 網絡奇人怪小四 于 2022-12-15 21:35 编辑

lxping 发表于 2022-12-15 21:28
你的程序并不在一个循环内,修改如下:

运行结果:

請問while true是什麼意思
while true 跟 if 的撘配我第一次見, 可否解析一下
我的代碼為什麼不是在一個循環里呢?
不太明白
請師兄指點

網絡奇人怪小四 发表于 2022-12-15 21:42:05

lxping 发表于 2022-12-15 21:28
你的程序并不在一个循环内,修改如下:

运行结果:

還有我找到一個小發現
while true 和 while number >0 功能是一樣的

lxping 发表于 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:

lxping 发表于 2022-12-15 21:49:23

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

在number不等于0的情况下是一样的

網絡奇人怪小四 发表于 2022-12-15 22:01:36

lxping 发表于 2022-12-15 21:47
while True:就是条件成立,一直循环执行,这里要靠break语句打破循环

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


對啊, 我也發現我的代碼走到循環2就跑不動了, 為什麼呢
你的代碼我好像明白了,就是用while true一直跌落循環語句,用break來跳出來
我的代碼是有問題但我又說不出是那有問題
是我基本功不好嗎,還是我對while循環語句理解錯了?
页: [1]
查看完整版本: [课后作业] 第015讲:了不起的分支和循环(II)角谷猜想一問