【问题标题】:Why am I not getting an output for the following python code?为什么我没有得到以下 python 代码的输出?
【发布时间】:2019-07-17 23:04:31
【问题描述】:

输入值后,我没有从解释器获得任何输出

这是我的代码:

number = int(input("Enter the number to test:"))
count = 0
if number % 2 == 0:
        while number > 1:
            number /= 2
            count += 1
else:
    while number > 1:
        number = (3 * number) + 1
        count += 1

print("Iteration count: " + count)

输入 = 11 的预期输出为 15

编辑: Collat​​z 猜想(上图)使用以下算法:如果 n 是偶数,则除以 2,否则乘以 3 并加 1。重新开始,直到得到 1。

【问题讨论】:

  • 因为number在奇数时总是大于1,而你进入了无限循环
  • 您需要将偶数/奇数测试移入循环。就目前而言,看看如果它是奇数会发生什么:它只是保持三倍并永远加 1,因为它将保持 > 1. Also, change number /= 2` 到 number //= 2,否则它将被转换为浮点数。
  • number = (3 * number) + 1 将继续增加值,因此while number > 1: 将始终为 True。正如 Fedrico 指出的那样。
  • 因为number = (3 * number) + 1 将无限。number 永远不会小于一。所以,while 循环永远不会结束。
  • "如果 n 是偶数,则除以 2,否则乘以 3 并加 1。重新开始,直到得到 1。" - 这不是您的代码所做的。您应该将 if 语句放入循环中。到目前为止,您的算法与 Collat​​z 猜想没有任何关系

标签: python python-3.x


【解决方案1】:

您在 while 语句中创建了一个无限循环。自己检查的一个好方法是在 while 循环中打印 number,您会很快发现哪里出错了。

我不想放弃解决方案,因为这听起来太像家庭作业 - 但您必须确保满足您的 while 循环条件,否则它永远不会退出。

【讨论】:

  • 这只是部分解决了问题。我指出的另一个问题是 number 正在被除以二的运算符转换为浮点数。 /= 运算符不正确。在 Python 3 中它必须是 //=。它可以作为浮点数工作,但显然不可取。
猜你喜欢
  • 2019-05-05
  • 1970-01-01
  • 1970-01-01
  • 2016-05-05
  • 1970-01-01
  • 2021-02-07
  • 1970-01-01
  • 1970-01-01
  • 2021-06-04
相关资源
最近更新 更多