2017/7/30 Collatz conjecture

原题:

编写一个名为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.

你可能感兴趣的:(2017/7/30 Collatz conjecture)