怎么编写一个collatz序列,最后获得返回值1.

编写了一个collatz函数

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

后面怎么编写,可以让用户输入一个整数,并不断的对这个数进行调用collatz(),直到返回值1.
输出结果大概是这样的:

Enter number:
3
10
5
16
8
4
2
1

我自己觉得应该是用while循环,但是编写的总是错误,不知道该怎么写,求教。

阅读 14k
12 个回答

Collatz conjecture 還滿有趣的, 目前看起來還沒有人有完整的證明XD

def collatz(n):
    print(n)
    if n % 2 == 1 and n > 1:
        collatz(3*n + 1)
    elif n % 2 == 0:
        collatz(n // 2)

if __name__ == '__main__':
    n = input('Enter a number: ')
    n = int(n)
    collatz(n)

測試:

dokelung@dhost:~$ python3 collatz.py
Enter a number: 3
3
10
5
16
8
4
2
1

我回答過的問題: Python-QA

新手上路,请多包涵
#def a collatz function
def collatz(number):
        while number != 1:            
                if number % 2 == 0:
                        number = number // 2        
                        print (number)
                elif number % 2 == 1:
                        number = 3*number+1
                        print (number)
        
number = int(input('Enter a number: '))
print (number)
collatz(number)

我也是刚学,这是我写的

def collatz(n):
    if n%2==0:
        print(str(n//2))
        return n//2
    elif n%2==1:
        print(str(3*n+1))
        return 3*n+1 
print('请输入一个正整数:')
shu=int(input())
while shu!=1:
    shu=collatz(shu)

图片描述

图片描述

先谢谢上面的兄弟!知道错误是没有返还新的的值 但不知道怎么改 就百度到了这里!再次谢谢? 下面是改过的 应该完全符合该练习的要求

def collatz(n):

if n % 2 == 0:
    print(n//2)
    return n//2
elif n % 2 == 1:
    print(3*n+1)
    return 3*n+1

while True:

try:
    number = input('Enter an int number: ')
    while int(number) != 1:
        number = int(collatz(int(number)))
    if number == 1:
        break
except ValueError:
    print('请输入整数! ')
continue
新手上路,请多包涵

用return直接返回程序自身是比较巧妙的一种递归方法,我没有用,因为嫌过于复杂了。
用了两个while循环,一个是判断输入值是否是整数,如果不是就要你再次输入。另外一个循环就是不断调用collazt,一直到结果为1.

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

print('Please input a integera: ')

while True:
    try:
        int_num = int(input())
        break
    except ValueError:
        print('Not a integera. Please input a integera.')
        continue

while True:
    int_num = collatz(int_num)
    if  int_num == 1:
        break
新手上路,请多包涵

def collatz(number):

while number != 1:
    if number % 2 == 0:
        number = number // 2
        print(number)
    elif number % 2 == 1:
        number = 3 * number + 1
        print(number)

while True:

try:
    print('please input an integer:')
    num = int(input())
    print(num)
    collatz(num)
    break
except ValueError:
    print('Not a integer. Please input a integer.')

图片描述

新手上路,请多包涵

刚学的,测试可行,分享给大家
def collatz(number):

if number %2 == 0:
    print(str(number//2))
    return number//2
elif number %2 == 1:
    print(str(3*number+1))
    return 3*number+1

print('请输入一个数字')
try:


n  = int(input())
while n != 1:
    
    
    n = collatz(n)

except ValueError:

print('你输入错了,请输入数字')
新手上路,请多包涵

def colllatz(number):

if number % 2==0:
   print(number // 2)
   return number // 2
elif number % 2==1:
    print(3*number+1)
    return 3*number+1

def shuru():

try:
   return int(input('请输入一个整数:'))
except ValueError:
     print('输入必须为整数')

number = shuru()
while number!=1:

   number=colllatz(number)

为什么大家都不想想干嘛非要除以3+1 直接加1,不就好了吗?还是说作业要求必须这要做

def collatz(number):

if int(number) % 2 == 0:
    qw=number // 2
elif  int(number) % 2 == 1:
    qw=number+1
return qw


print("请输入一个整数")

try:

num3=int(input())
print("您输入的数值是",num3)
while num3 != 1:
    if collatz(num3) == 1:
        print("最终结果为:",collatz(num3))
        break
    else:
        print("经过运算结果为:",collatz(num3))
        num3=int(collatz(num3))

except:

print("error")

def collatz(number):

while number != 1:
    if number % 2 == 0:
        print(number)
        number=number//2
    elif number %2 ==1:
        print(number)
        number=number*3+1
else:print(number)

print('Enter number')
while True:
try:

number=int(input())
collatz(number)

except ValueError:

print('请输入一个整数')
——————————————————
我暂时没想到怎么结束主程序的循环,就是最后返回1之后光标还闪着,会要求继续输入数字



————————————————
想到怎么结束了,不过码起来好像很臃肿,初学者,求指导
修改后的答案:
def collatz(number):
while number != 1:
    if number % 2 == 0:
        print(number)
        number=number//2
    elif number %2 ==1:
        print(number)
        number=number*3+1
else:print(number)

print('Enter number')
while True:
try:

number=int(input())
collatz(number)
break

except ValueError:

print('请输入一个整数')
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题