【问题标题】:Printing the largest number from the outputs (collatz conjecture-python)从输出中打印最大的数字(collat​​z conjecture-python)
【发布时间】:2021-12-14 13:05:14
【问题描述】:

我需要帮助才能从多个输出中打印出最大的数字。如何修改此代码?

x = int(input("Enter a number : "))
while(x!=1):
    if(x%2==0):
        x  = x/2
        print("\n",x)
    else:
        x = 3*x+1
        print("\n",x)

当我输入“20”作为输入时,我得到一个数字列表,我可以轻松地说 16 是输出中最大的。但是当输入很大的时候真的很难。我需要一个代码来打印输出中的最大数字

【问题讨论】:

  • 这段代码只有一个输入。 input 是否应该成为循环的一部分?
  • @mozway 请重新阅读问题。它已被编辑。
  • “我得到了一个数字列表,我可以轻松地说 10 我们是输出中最大的。” 嗯,不,有 16 个大于 10 .如果你数序列中的第一个数字,有20个大于16。
  • 您应该使用x // 2 而不是x / 2。在python中,//是整数除法; / 是浮点除法。
  • @stef 哎呀我的错!

标签: python for-loop math collatz


【解决方案1】:

您可以创建一个 generator 来生成 Collat​​z 序列,然后使用 max() 函数找到最大的数:

def collatz_sequence(x):
    yield x

    while x > 1:
        x = x // 2 if x % 2 == 0 else 3 * x + 1
        yield x

print(max(collatz_sequence(5)))   # Output: 16

【讨论】:

  • 请重新阅读问题,它已被编辑。感谢您的耐心等待。
  • @TerrificLagger 请重新阅读(并测试)答案,并尝试修改它以满足您的需求;)。在这种情况下,如果您不想在序列中包含原始数字,只需删除 while 循环之前的第一个 yield x
  • @TerrificLagger 我不明白如何根据您的编辑更改我的答案。您要我排除输入值吗?您还想打印所有中间值吗?
  • @PetervanderHeijden 我想通了,谢谢!你的代码对我帮助很大。
最近更新 更多