原题:
编写一个名为collatz()的函数,它有一个名为number 的参数。如果参数是偶数,那么collatz()就打印出number // 2,并返回该值。如果number 是奇数,collatz()就打印并返回3 * number + 1。
然后编写一个程序,让用户输入一个整数,并不断对这个数调用collatz(),直到函数返回值1(令人惊奇的是,这个序列对于任何整数都有效,利用这个序列,你迟早会得到1!既使数学家也不能确定为什么。你的程序在研究所谓的“Collatz序列”,它有时候被称为“最简单的、不可能的数学问题”)。
先来看看wiki上对Collatz 序列的描述
Take any positive integer n. If n is even, divide it by 2 to get n / 2. If n is odd, multiply it by 3 and add 1 to obtain 3n + 1. Repeat the process indefinitely. The conjecture is that no matter what number you start with, you will always eventually reach 1.
也就是说实际上,我们的限制条件需为正整数
答案如下:
#!/usr/bin/env python
# coding=utf-8
import sys
def collatz(number):
if number % 2 == 0:
return number // 2
else:
return 3 * number + 1
if __name__ == '__main__':
number =input('Enter positive number: ')
try:
number = int(number)
if number > 0:
while True:
if number != 1 :
print(collatz(number))
number = collatz(number)
else:
break
else:
print('you need input positive number.')
except:
print('you need input positive number.')
随便测试几个数
C:\python\learn07>python collatz.py
Enter positive number: 99
298
149
448
224
112
56
28
14
7
22
11
34
17
52
26
13
40
20
10
5
16
8
4
2
1
C:\python\learn07>python collatz.py
Enter positive number: 1
C:\python\learn07>python collatz.py
Enter positive number: 0
you need input positive number.
C:\python\learn07>python collatz.py
Enter positive number: -8
you need input positive number.
C:\python\learn07>python collatz.py
Enter positive number: 8sd
you need input positive number.