首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Collatz序列结束于4

Collatz序列结束于4
EN

Stack Overflow用户
提问于 2016-06-17 15:01:44
回答 2查看 235关注 0票数 1

我正在编写一个Collatz序列程序,使用第3章中的练习项目,用python自动处理无聊的东西。

方案大纲是:

编写一个名为collatz()的函数,该函数有一个名为number的参数。 如果number是偶数,那么collatz()应该打印number // 2并返回这个值。如果number是奇数,那么collatz()应该打印并返回3 * number + 1。 然后编写一个程序,该程序允许用户输入整数,并一直对该数字调用collatz(),直到函数返回值1为止。

但是,我的代码在4而不是1上停止。到目前为止,对于我尝试过的每一个数字,输出都会超过1回到4。

示例输出:

代码语言:javascript
复制
6,3,10,5,16,8,4,2,1,4

我正在使用python 3.4.2

代码语言:javascript
复制
def collatz(number):
    if number % 2 == 0:
        number = number //2
        print(number)
        return number
    elif number % 2 == 1:
        number = 3 * number + 1
        print(number)
        return number


print ("pick a number:")

while True:
try:
    number = int(input())
    while number != 1:
            number = collatz(number)
    collatz(number)
    break
except ValueError:
        print("Error: Please enter a valid integer")
print("Magic! You are down to 1.")
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-17 15:07:35

问题是,在循环结束后,您再次调用collatz() 1。只要删除该行,它就能正常工作。

另外,如果将"pick a number"移动到input函数,则可以避免问题后的新行,如果输入无效的值,每次都会再次询问。

此外,您还应该检查数字是否大于或等于1,以避免无休止的循环。执行所有这些操作的代码如下所示:

代码语言:javascript
复制
while True:
    try:
        number = int(input("pick a number: "))
        if number < 1:
            print("Error: Please enter a integer greater than or equal to 1 ")
            continue

        while number != 1:
                number = collatz(number)
        # removed the additional call to collatz
        break
    except ValueError:
            print("Error: Please enter a valid integer")
print("Magic! You are down to 1.")
票数 1
EN

Stack Overflow用户

发布于 2016-06-17 15:11:21

代码语言:javascript
复制
def collatz(number):
    number = number // 2 if number % 2 == 0 else 3 * number + 1
    print(number)
    return number

number = int(input("Pick a Number\n"))

while number != 1:
     number = collatz(number)
print("Magic! You are down to 1.")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37884792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档