【问题标题】:using the calculation number for the next calculation使用计算编号进行下一次计算
【发布时间】:2021-02-24 10:47:02
【问题描述】:

专家。

我正在尝试定义一个函数 (collatz):

  1. 要求一个号码。如果是偶数则打印number // 2,如果是奇数则打印3 * number + 1。 (好的)
  2. 无论结果是什么,都必须进入一个循环,直到结果为 1。(NOK)

所以,我不知道,因为结果未使用并且处于无限循环中。有什么建议吗?

def collatz():
    number = int(input('Enter the number: '))
    x = number % 2
    while number != 1:
        if x == 0:
            print(f'{number // 2}')
        else:
            print(f'{3 * number + 1}')
        number = number

print(f'{collatz()}')

【问题讨论】:

  • 只需执行一次number = number // 2number = 3 * number + 1,然后只需执行一次print(number)
  • 您不必担心,Collat​​z 猜想确保它始终收敛到 1。您可以尝试添加退出条件,但无法测试它是否有效.或者,您可以给它一个最大运行时间(比如说 30 秒),并检查每个循环是否超过执行时间。
  • 您没有更新数字的值,它在循环中保持不变

标签: python loopback


【解决方案1】:

您需要将结果实际分配回number

还有:

  • 整除性检查需要在循环中。
  • 不需要外部的print()
  • f 弦是多余的。 print() 自动将其参数转换为字符串。
def collatz():
    number = int(input('Enter the number: '))
    while number != 1:
        if number % 2 == 0:
            number //= 2  # Short for "number = number // 2"
        else:
            number = 3*number + 1
        print(number)

collatz()

示例运行:

Enter the number: 3
10
5
16
8
4
2
1

【讨论】:

  • 有效。太感谢了。只是一个小问题...为什么我们不需要其他打印?这是什么逻辑?
  • @AndersonSilva 尝试将其添加回来,看看会发生什么
猜你喜欢
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 2013-09-06
相关资源
最近更新 更多