Python——Collatz序列
Collatz序列
编写一个名为collatz()的函数,它有一个名为number的参数。如果参数是偶数,那么collatz()就打印出number // 2,并返回该值。如果number是奇数,collatz()就打印并返回3 * number + 1。
然后编写一个程序,让用户输入一个整数,并不断的对这个数调用collatz(),直到函数返回值1(这个序列对任何整数都有效,利用这个序列,你迟早会得到1,他有时候被称为“最简单的、不可能的数学问题”)。
提示: 记得将input()的返回值用int()函数转成一个整数,否则它会是一个字符串。
这个程序的输出看起来应像这样。
Enter number:3
10
5
16
8
4
2
1
写法一:
def collatz(number):
if number ==1 :
print(number)
else:
while number != 1:
if number % 2 == 0 :
number = number // 2
print(number)
elif number % 2 == 1:
number = 3 * number + 1
print(number)
try:
number = int(input('Enter:'))
collatz(number)
except ValueError as Error:
print('ValueError:You need input digital.')
写法二:
import sys
def collatz(number):
if number == 1:
print(number)
sys.exit()
elif number % 2 == 0:
number = number // 2
print(number)
collatz(number)
elif number % 2 == 1 : # else: else后不能添加条件
number = 3*number + 1
print(number)
collatz(number)
if __name__=='__main__': #没有此句话,该行之后的内容不会被执行。需进行下一步的学习。
number=input('Enter a int number:')
try:
number=int(number)
collatz(number)
except ValueError as verror:
print('ValueError:You need input digital.')
###写法三:(转自https://blog.csdn.net/zhenqu_zhang/article/details/80839274)
def collatz(number):
if number % 2 == 0:
return number // 2
elif number % 2 == 1:
return 3 * number + 1
else:
print("Error")
print("Plese input a number:",end = '')
while True:
try:
result = int(input())
break
except ValueError:
print("Your number is not a int")
while True:
print(result)
result = collatz(result)
if result == 1:
break
print(str(result))
欢迎交流学习,如果错误请指正。如果有更好的思路,欢迎分享。