为什么此脚本未在第一行之后运行

时间:2018-07-11 09:37:43

标签: python-3.x

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)

3 个答案:

答案 0 :(得分:0)

如果您尝试实现Collat​​z猜想脚本,那么您的第一个if是错误的-您应该将数字除以2。此外,return会使函数结束,因此您得到仅一个while循环,内部发生什么都无所谓-因此,您基本上会返回输入的数字或该数字* 3 +1。 这是经过稍微修改的正确代码:

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)

您也不需要elif,因为数字只能被2除。

示例输出:

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.

答案 1 :(得分:0)

您在 if else 中返回的值,因此不会显示超出范围。

相反,将其分配给变量并进行打印。

tweak = 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  # this wont work.. your returned already
print "output:%s"%collatz(tweak)

输出:

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

答案 2 :(得分:0)

您的问题只有代码,但是我想这就是您想要的:

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)