Collat​​z序列以4结束

时间:2016-06-17 15:01:45

标签: python python-3.x

我正在编写一个Collat​​z序列程序,使用来自使用python自动化无聊内容的第3章中的练习项目。

计划大纲是:

  

编写一个名为collatz()的函数,该函数有一个名为number的参数。

     

如果number是偶数,则collatz()应打印number // 2并返回   这个价值。如果number为奇数,则collatz()应打印并返回   3 * number + 1

     

然后编写一个允许用户输入整数的程序   继续在该号码上调用collatz(),直到函数返回   价值1

我的代码运行但它停在4而不是1.对于我到目前为止尝试的每个数字,输出超过1回到4.

示例输出:

6,3,10,5,16,8,4,2,1,4

我正在使用python 3.4.2

def collatz(number):
    if number % 2 == 0:
        number = number //2
        print(number)
        return number
    elif number % 2 == 1:
        number = 3 * number + 1
        print(number)
        return number


print ("pick a number:")

while True:
try:
    number = int(input())
    while number != 1:
            number = collatz(number)
    collatz(number)
    break
except ValueError:
        print("Error: Please enter a valid integer")
print("Magic! You are down to 1.")

2 个答案:

答案 0 :(得分:1)

问题是你在循环结束后再次调用collatz()。只需删除该行,它就可以了。

此外,如果您将"pick a number"移至input功能,则可以避免问题后面的新行,如果您输入的值无效,则每次都会再次询问。

此外,您还应检查数字是否大于或等于1,以避免无限循环。执行所有看起来像这样的代码:

while True:
    try:
        number = int(input("pick a number: "))
        if number < 1:
            print("Error: Please enter a integer greater than or equal to 1 ")
            continue

        while number != 1:
                number = collatz(number)
        # removed the additional call to collatz
        break
    except ValueError:
            print("Error: Please enter a valid integer")
print("Magic! You are down to 1.")

答案 1 :(得分:0)

def collatz(number):
    number = number // 2 if number % 2 == 0 else 3 * number + 1
    print(number)
    return number

number = int(input("Pick a Number\n"))

while number != 1:
     number = collatz(number)
print("Magic! You are down to 1.")