自动化无聊的东西collat​​z序列

时间:2017-10-23 18:08:09

标签: python-3.x

我正在尝试创建一个python3.3程序(使用Windows 10和记事本和命令行),它接受一个用户输入数字,并在每次输出数字不是1时输出一个新数字,并改变数字对于偶数,只使用2除以3乘以奇数加1。

def collatz():
    if collatz() == ' ': #if collatz() doesn't have a return value yet
        number = input('Please Enter A Number. ')
    number = int(number)
    if number % 2 == 0:
        number = number // 2
        return number
    else:
        number = 3*number + 1
        return number

while number > 1:
    collatz()

我移动了一堆东西,我已经让它在循环中重复第一个操作,我已经得到它只给我一个数字,然后提示更多的用户输入?有人可以告诉我如何

2 个答案:

答案 0 :(得分:0)

你似乎拥有大部分但不完整的顺序。我猜你想要更像的东西:

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

my_number = int(input('Please Enter A Number: '))

print(my_number)

while my_number > 1:
    my_number = collatz(my_number)
    print(my_number)

答案 1 :(得分:0)

你需要的是一个函数collatz(),它接受​​一个数字作为它的参数,并在1次迭代后返回一个不同的数字。您通常不希望在函数内使用input(),因为该函数不再可重用。

请考虑以下代码:

def func(var):
    print(var)

func(45)

它输出数字45,因为整数45被传递到函数func(),然后可以被func()内的命令使用。当func()完成时它就不复存在了。您可能希望以类似的方式将整数传递到collatz()函数中。

以下代码段演示了如何使用return关键字:

def func():
    return 5

var = func()
print(var)

此代码将打印数字5,因为func()返回5,并保存到var

您将希望在代码中使用这两种技术,以便从函数外部的用户那里获取输入,然后继续在数字上调用collatz(),并将其输出传递给它下一次迭代,直到输出1。

我还没有为你写完整的代码;你应该能够自己做,但如果你正在努力,请告诉我。