请帮帮我。
对于"用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()