我正在尝试使用在使用Python自动完成无聊的东西的第3章末尾找到的项目中的准则编写Collatz程序。我正在使用python 3.4.0。以下是项目概述:
3.4.0
编写一个名为的函数collatz(),该函数具有一个名为number的参数。如果数字是偶数,collatz()则应打印number // 2并返回该值。如果数字为奇数,collatz()则应打印并返回3 * number + 1。然后编写一个程序,让用户键入一个整数,并不断调用collatz()该数字,直到函数返回该值为止1。
collatz()
number // 2
3 * number + 1
1
该程序的输出可能类似于以下内容:
Enter number: 3 10 5 16 8 4 2 1
我试图做一个在while循环内使用if和elif语句的函数。我希望打印该数字,然后返回循环的开头,并使用Collatz序列将其减少为一个,并在循环过程中打印结果数字的每个实例。使用当前代码,我只能打印该数字的第一个实例,并且此后该数字不会循环。以下是我的代码:
if
elif
#collatz print("enter a number:") try: number = (int(input())) except ValueError: print("Please enter a valid INTEGER.") def collatz(number): while number != 1: if number % 2==0: number = (number//2) #print(number) return (print(int(number))) elif nnumber % 2==1: number = (3*number+1) #print(number) return (print(int(number))) continue collatz(number)
def collatz(number): if number % 2 == 0: print(number // 2) return number // 2 elif number % 2 == 1: result = 3 * number + 1 print(result) return result n = input("Give me a number: ") while n != 1: n = collatz(int(n))
输出:
Give me a number: 3 10 5 16 8 4 2 1 Give me a number: 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1