我很会Python 发表于 2023-11-16 12:41:13

角谷猜想

temp = int(input("请输入一个自然数:"))
while temp % 2 ==0 :
      print(temp , "/" , 2 , "= ",temp / 2)
      temp = temp / 2
      if temp / 2 ==1 :
            print("2","/","2","=", "1")
            break
else:
    while temp % 2 !=0:
      temp = temp *3 +1
      print( temp, "/", 2, "=" ,temp /2)
      temp = temp / 2
      if temp / 2 ==1 :
            print("2","/","2","=", "1")
            break
      角谷猜想的内容是:任意给定一个正整数,若它为偶数则除以 2,若它为奇数则乘以 3 再加 1,得到一个新的自然数,按照这样的方法计算下去,最终的结果必将是 1。V,3Bf6:
代码问题在哪呢,我感觉应该是对的呀,可是出来的结果很有问题,不能计算大的数字,不然就得到的不是我想要的

isdkz 发表于 2023-11-16 12:41:18

这段代码实现了角谷猜想的计算过程,但存在一些问题。首先,代码中的缩进存在问题,需要统一使用相同的缩进方式。其次,代码中使用了浮点数除法,这可能导致精度丢失。最后,代码没有处理输入为负数或零的情况。

以下是修复后的代码:

temp = int(input("请输入一个自然数:"))
while temp != 1:
    if temp % 2 == 0:
      print(temp , "/" , 2 , "= ",temp // 2)
      temp = temp // 2
    else:
      print(temp , "*" , 3 , "+ 1 = ",temp * 3 + 1)
      temp = temp * 3 + 1

print("最终结果为 1")


修复后的代码使用整数除法和整数乘法,避免了浮点数精度丢失的问题。同时,修复了缩进问题,使代码更加清晰易读。

Mike_python小 发表于 2023-11-16 12:43:07

非代码区

问题分析:

你提到代码在处理大数时出现问题,并且得不到你期望的结果。让我们来看看可能的原因。

回答:

问题出在代码中对浮点数的处理上。在Python中,除法运算 / 得到的结果是浮点数,而不是整数。所以当 temp 为奇数时,执行 temp = temp / 2 得到的是浮点数,而不是整数。

此外,代码中有一些逻辑错误。在第一个 while 循环的 if 语句中,判断 temp / 2 == 1 是不准确的,因为浮点数除法可能会导致精度问题,无法准确判断是否等于 1。

为了解决这个问题,可以使用整数除法运算符 // 来替代浮点数除法运算符 /,这样得到的结果将是整数。另外,可以修改条件判断语句,判断 temp == 1 来结束循环。

同时,建议在代码中添加合适的注释来增加可读性。

下面是修改后的代码:


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

# 处理偶数的情况
while temp % 2 == 0:
    print(temp, "/", 2, "=", temp // 2)
    temp = temp // 2
    if temp == 1:
      print("2", "/", "2", "=", "1")
      break

# 处理奇数的情况
else:
    while temp % 2 != 0:
      temp = temp * 3 + 1
      print(temp, "/", 2, "=", temp // 2)
      temp = temp // 2
      if temp == 1:
            print("2", "/", "2", "=", "1")
            break

print("角谷猜想的内容是:任意给定一个正整数,若它为偶数则除以 2,若它为奇数则乘以 3 再加 1,得到一个新的自然数,按照这样的方法计算下去,最终的结果必将是 1。")


通过使用整数除法运算符 // 和修改条件判断语句,修改后的代码可以正确处理大数,并得到正确的结果。

希望这个回答对你有帮助!如果还有其他问题,请随时提问。
页: [1]
查看完整版本: 角谷猜想