用Python实现Collat​​z序列的相关问题



```python
number = int(input('输入一个整数?\n'))
while number != 1:
    if number % 2 == 0:
        number = number // 2
    else:
        number = 3 * number + 1
    print(number)
    if number == 1:
        break


def collatz(number):
    if number % 2 == 0:
        number = number // 2
    else:
        number = 3 * number + 1
    return number
n = int(input('输入一个整数?\n'))
while n != 1:
    collatz(n)
    print(n)
    if n == 1:
        break

以上两个代码结果有什么不一样吗?
我只是有def写了一个函数 collatz就不执行了为啥啊?


还有人说return是这样写的但是其实和第二段代码结果一样并不计算collatz为啥呢
def collatz(number):
    if number % 2 == 0:
        return number // 2
    elif number % 2 == 1:
        return 3 * number + 1

n = int(input('输入一个整数?\n'))
while n != 1:
    collatz(n)
    print(n)
    if n == 1:
        break



要写 n = collatz(n)啊,因为你这个函数是返回处理后的值,还要再赋值给 n

  • 这篇文章:Python实现Collatz序列 也许能够解决你的问题,你可以看下
  • 除此之外, 这篇博客: python语言程序设计习题中的 Collatz猜想 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 描述

    Collatz猜想也叫3n+1猜想,给一个正整数,如果是偶数,则减半;如果是奇数,则变为它的三倍加一。直到变为1停止。猜想对于所有正整数经过足够多次变换最终达到1。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

     ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬输入格式

    输入一个正整数,每一步计算都输出相应的计算操作。输入使用input(),不要增加额外的提示信息。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

    输出格式

    输出每一步计算结果。

    org = eval(input())
    while org != 1:
        if org%2 == 0:
            org = org/2
            print("{:.1f}".format(org))
        else:
            org = 3 * org + 1
            print("{:.1f}".format(org))