自动执行枯燥的任务 - 锻炼 - 抓住功能

时间:2017-07-28 14:56:53

标签: python loops

初学者问题。

我刚试过自动化无聊的练习。我已经通过首先定义一个函数建议的格式完成了问题,如下所示:

"编写一个名为collat​​z()的函数,该函数有一个名为number的参数。如果number为偶数,则collat​​z()应打印数字// 2并返回此值。如果number是奇数,那么collat​​z()应该打印并返回3 * number + 1."

然后使用相同的函数,满足这些最小约束,编写满足以下要求的程序:

然后编写一个程序,让用户输入一个整数,并继续在该数字上调用collat​​z(),直到函数返回值为止。

按照上述规则,我设法生成一系列以1结尾的数字,但我的程序会在序列中打印三次数字。有人能够解释为什么会这样吗?

非常感谢你的帮助

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

collatz(5)    
print('Enter a number')

entry = input()

while collatz(entry) != 1:
    collatz(entry)
    entry = collatz(entry)

3 个答案:

答案 0 :(得分:2)

你的循环应如下所示:

entry = input()
while entry != 1:
    entry = collatz(entry)

答案 1 :(得分:0)

您正在调用该函数3次,并且您在函数中调用print

仅调用该函数一次,我将从print方法中删除collatz语句,并在调用循环中删除print,例如:

In []:
def collatz(number):
    if number % 2 == 0:
        return number//2
    return 3*number + 1

entry = int(input("Enter a number: "))
print(entry)

while entry != 1:
    entry = collatz(entry)
    print(entry)

Out[]:
Enter a number: 10
10
5
16
8
4
2
1

答案 2 :(得分:0)

您可以尝试:

def collatz(number): if number == 0: return 'Try again with an integer other than 0' elif number == 1: return 1 elif number % 2 == 0: n = number // 2 print(n) elif number % 2 == 1: n = 3 * number + 1 print(n) while n != 1: n = collatz(n) return n return n

第15行的最后一条语句return n是可选的。