Python 3.x 为什么此脚本不在第一行之后运行

Python 3.x 为什么此脚本不在第一行之后运行,python-3.x,Python 3.x,如果您试图实现Collatz猜想脚本,那么您的第一个If是错误的-您应该将数字除以2。此外,返回会导致函数结束,因此只会得到一个while循环,不管内部发生了什么-因此基本上返回输入的数字或该数字*3+1。 以下是经过轻微修改的正确代码: tweak = int(input("Input an integer")) def collatz(number): while number != 1: if number % 2 == 0: return

如果您试图实现Collatz猜想脚本,那么您的第一个If是错误的-您应该将数字除以2。此外,返回会导致函数结束,因此只会得到一个while循环,不管内部发生了什么-因此基本上返回输入的数字或该数字*3+1。 以下是经过轻微修改的正确代码:

tweak = int(input("Input an integer"))
def collatz(number):
    while number != 1:
        if number % 2 == 0:
            return int(number)
        elif number % 2 != 0:
            return int((3 * number) + 1)
    print(number)

collatz(tweak)
您也不需要elif,因为数字只能除以2或不能除以2

示例输出:

tweak = int(input("Input an integer"))
def collatz(number):
    steps = 0
    num = number
    while number != 1:
        if number % 2 == 0:
            number = number / 2
        else:
            number = int(3 * number + 1)
        steps +=1
    print("Reached 1 in {} iterations for number {}.".format(steps, num))

collatz(tweak)
您在if和else中返回的值不会超过

而是在变量中分配它并打印

collatz(22)
collatz(55)
collatz(234)

Reached 1 in 15 iterations for number 22.
Reached 1 in 112 iterations for number 55.
Reached 1 in 21 iterations for number 234.
输出:


您的问题只有代码,但我认为这是您可能正在寻找的:

me@dev-007:~/Desktop$ python test.py 
Input an integer10
number 10
output:10

你能更好地解释什么不起作用吗?错误代码是什么?当我将它粘贴到Jupyter时,它工作正常。它在Jupyter记事本中为我工作。你是说你的号码没有打印出来吗?你可能使用了不支持控制台输入的升华文本。
me@dev-007:~/Desktop$ python test.py 
Input an integer10
number 10
output:10
def collatz(tweak):
    while tweak != 1:
        if tweak % 2 == 0:
            return int(tweak)
        elif tweak % 2 != 0:
            return int((3 * tweak) + 1)
     print(tweak)
tweak = int(input("Input an integer:"))
result = collatz(tweak)
print(result)