bruce.Lin 发表于 2020-8-9 09:41:13

关于15讲课后作业里的角谷猜想


我的答案是:
N=int(input("请输入一个自然数:"))

while N!=1:
    if N%2==0:
      M=N/2
      print(N,"/2=",M)
      N=M
    else:
      P=N*3+1
      print(N,"*3+1=",P)
      N=P
运行输出为:
请输入一个自然数:5
5 *3+1= 16
16 /2= 8.0
8.0 /2= 4.0
4.0 /2= 2.0
2.0 /2= 1.0

怎么会出现小数?请问有哪些不足地方?



小甲鱼给的答案是:
n = int(input("请输入一个自然数:"))
   
for i in range(1000):
    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

zltzlt 发表于 2020-8-9 09:48:34

Python 除法中无论是否可以被整除,结果都为浮点数。所以应该使用地板除 //

永恒的蓝色梦想 发表于 2020-8-9 09:56:39

N=int(input("请输入一个自然数:"))

while N!=1:
    if N%2==0:
      M=N//2
      print(N,"/2=",M)
      N=M
    else:
      P=N*3+1
      print(N,"*3+1=",P)
      N=P

Hoiste 发表于 2020-8-9 10:05:32

M=N/2这一条语句将原本是整型数据的N通过/运算返回了浮点型结果给到了M在后面M参与到的运算和赋值中如果没有其他转换的语句的话都会变成浮点型,所以要么使用地板除要么就在用int转换一次。
页: [1]
查看完整版本: 关于15讲课后作业里的角谷猜想