用python第3章实践项目自动化无聊的东西



请帮帮我。

对于"用python自动化无聊的东西"第3章中的实践项目,我制作了自己的代码。但它有我无法修复的错误。

def collatz(number):
    if number == 1:
        print('the sequence is done')
    elif number % 2 == 0:
        print(number / 2)
        collatz(number / 2)
    else:
        print(number * 3 + 1)
        collatz(number * 3 + 1)
def begin():
    try:
        num = int(input("enter an integer: "))
    except ValueError:
        print("Please enter an integer greater than 1.")
        begin()
    if not num > 1:
        print("Please enter an integer greater than 1.")
        begin()
    collatz(num)
begin()

运行它会产生循环错误。我试着把它修好了,但我被卡住了。

def collatz(number):
    if number % 2 == 0:
        print(number // 2)
        return number // 2
    elif number % 2 == 1:
        print(3 * number + 1)
        return 3 * number + 1
try:
    user_input = int(input('Enter a number:n'))
    new_num = collatz(user_input)
    while new_num != 1:
        new_num = collatz(new_num)
except ValueError:
    print('Please enter an integer')

它说要打印并返回,所以您不需要使用递归。以下是我做这个程序的方法。我还使用while循环来重复这个过程,直到满足某个条件(直到值为1(。

您已经错过了重新招募计划的基本条件
您需要了解递归,以便了解代码的行为和功能
目前,递归程序的迭代版本是:

def collatz(number):
    if number == 1:
        print("the sequence is done")
    elif number % 2 == 0:
        print(number / 2)
        collatz(number / 2)
    else:
        print(number * 3 + 1)
        collatz(number * 3 + 1)

def begin():
    while True:
        try:
            num = int(input("enter an integer: "))
            if not num > 1:
                print("Please enter an integer greater than 1.")
                continue
        except ValueError:
            print("Please enter a valid integer greater than 1.")
            continue
        collatz(num)
        break

if __name__ == "__main__":
    begin()

相关内容

最新更新