为了账号安全,请及时绑定邮箱和手机立即绑定

Collat​​z循环结构

Collat​​z循环结构

千万里不及你 2021-04-05 16:19:27
请帮助我了解我做错了什么。问题是Collatz序列编写一个名为collatz()的函数,该函数具有一个名为number的参数。如果number是偶数,则collatz()应该打印数字// 2并返回该值。如果number为奇数,则collatz()应该打印并返回3 * number + 1。然后编写一个程序,让用户输入一个整数,并继续对该数字调用collatz(),直到该函数返回值1。您将达到1!即使是数学家也不确定为什么。您的程序正在探索所谓的Collatz序列,有时称为“最简单不可能的数学问题”。)记住要使用int()函数将input()的返回值转换为整数;否则,它将是一个字符串值。提示:即使数字%2 == 0,整数也是偶数;如果数字%2 == 1,则整数是奇数。def collatz(number):    if number%2==0:        print(number//2)    else:        print(3*number+1)x = int(input('print num'))while TRUE:    if collatz(x)!=1:        break
查看完整描述

3 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

您必须打印并返回函数collatz(num):


def collatz(number):

    """prints and returns the next number in the Collatz sequence

    """

    if number % 2 == 0:

        next_collatz_number = number // 2

    else:

        next_collatz_number = 3 * number + 1

    print(next_collatz_number)

    return next_collatz_number


x = int(input('print num'))


while True:

    x = collatz(x)

    if x == 1:

        break


查看完整回答
反对 回复 2021-04-20
?
慕村225694

TA贡献1880条经验 获得超4个赞

正如其他人的评论所说,你的函数collatz()必须返回一个整数还,被送入collatz()一次。


在您已经完成的工作的基础上,我们可以collatz_sequence(x)重复调用该函数collatz()以获得所需的结果:


def collatz(x):

    if x % 2 == 0:

        a = x//2

    else:

        a = 3*x+1

    print(a)

    return a


def collatz_sequence(x):

    print(x)

    while x!=1:

        x=collatz(x)

这是示例输出:


>>> collatz_sequence(6)

6

3

10

5

16

8

4

2

1


查看完整回答
反对 回复 2021-04-20
?
森林海

TA贡献2011条经验 获得超2个赞

'''


try:

     number = int(input('Enter a number:'))

     while number != 1:

          number = collatz(number)

except ValueError:

     print('Enter a valid integer')


def collatz(num):

    if num % 2 == 0:

        print(str(num // 2))

        return num // 2

    else:

        print(str(3 * num + 1))

        return (3 * num + 1)

'''


在这段代码中,我匹配了它们的约束(整数约束)并返回了值。我在try块中使用了简单的递归来获取所需的输出。


查看完整回答
反对 回复 2021-04-20
  • 3 回答
  • 0 关注
  • 173 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信