Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有人能帮我分解并理解这个collatz序列码吗?_Python - Fatal编程技术网

Python 有人能帮我分解并理解这个collatz序列码吗?

Python 有人能帮我分解并理解这个collatz序列码吗?,python,Python,我是一个全新的编程研究生,有点麻烦。我正在解决一个教科书上的问题,这个问题要求我取一个正整数,然后打印这个数的Collatz序列 while num !=1: print(num) if num%2==0: num = num//2 else: num = 3*num+1 print(1) 现在,这段代码起作用了。我得到了数学逻辑。但有些部分我不明白 首先是打印(num),这样代码就会打印输入的数字,因为这

我是一个全新的编程研究生,有点麻烦。我正在解决一个教科书上的问题,这个问题要求我取一个正整数,然后打印这个数的Collatz序列

    while num !=1:
        print(num)
        if num%2==0:
            num = num//2
    else:
        num = 3*num+1
print(1)
现在,这段代码起作用了。我得到了数学逻辑。但有些部分我不明白

首先是打印(num),这样代码就会打印输入的数字,因为这会启动序列。但是,将其置于循环前端的逻辑/解释是什么

其次,对于num=num//2和num=3*num+1,为什么运行代码只需要这些?最后,我们的目标是打印整个序列,直到输入为1。我想你需要一个蓄能器。i、 e.lst=[]将每个值附加到该列表中,然后返回该列表。为什么只是重新标记num=work?每次迭代时,前一个值不会被删除,因为它没有存储在任何地方吗

最后,为什么我们不需要以返回结束循环?它如何知道打印整个数字序列?它以print(1)结束,因为每个输入都需要以print(1)结束,并且在1之前终止。但是,我没有调用函数(这是我这边的一个函数,而不仅仅是一个while循环)来采取行动。它只是…做到了

如果这有点混乱,我很抱歉,但我正在努力理解正确的代码答案。我大部分时间都在做累加器之类的事情,所以我不确定为什么不需要累加器,num=做了什么,以及如何以print(1)结束它,然后整个序列就会出现

  • 这就是输出在没有列表的情况下“神奇地出现”的方式
  • 见#1
  • 您总是从函数返回。。。在这种情况下,您将返回None,而不是打印列表
  • time.sleep
    放在那里(在你的循环中)来可视化正在发生的事情可能会有帮助

    本网站:

    有助于可视化代码执行

    首先是打印(num),这样代码就会打印输入的数字,因为这会启动序列。但是,将其置于循环前端的逻辑/解释是什么

    它被放置在它所在的位置,因为它不只是在那里打印输入的数字。它可以在每次到达代码中的某个点时,打印代码中该点上碰巧出现的任何
    num
    。在第一次迭代中,
    num
    是序列的第一个元素。在第二次迭代中,
    num
    现在是序列的第二个元素。在第三次迭代中,
    num
    是第三个元素,依此类推。这个
    print
    打印序列的每个元素,除了
    1
    ,因为循环在该点中断,这就是为什么在循环之后有一个单独的
    print(1)

    其次,对于num=num//2和num=3*num+1,为什么运行代码只需要这些?最后,我们的目标是打印整个序列,直到输入为1。我想你需要一个蓄能器。i、 e.lst=[]将每个值附加到该列表中,然后返回该列表。为什么只是重新标记num=work?每次迭代时,前一个值不会被删除,因为它没有存储在任何地方吗

    print(num)
    在计算时打印每个序列元素,因此程序不需要显式保存元素。程序确实忘记了以前的值,但它们已经打印出来了。记住打印输出是其他一些工具的工作——例如,如果在运行时将stdout定向到一个文件,则打印输出将写入该文件

    最后,为什么我们不需要以返回结束循环?它如何知道打印整个数字序列?它以print(1)结束,因为每个输入都需要以print(1)结束,并且在1之前终止。但是,我没有调用函数(这是我这边的一个函数,而不仅仅是一个while循环)来采取行动。它只是…做到了

    return
    有两个任务:结束当前函数执行,并设置返回值。如果在未执行
    返回的情况下执行到函数的末尾,则函数的执行仍然结束,返回值为
    None
    <代码>返回
    不涉及打印输出。如上所述,这就是打印的工作


    至于不调用函数,我们无法回答这是怎么回事。我们需要看看您实际运行了什么,包括实际的函数。

    collatz第二个问题在过去的几个小时里o.o…哇,一个“解释这段代码”的问题,实际上给了我们一个关于您不理解的代码的详细解释。那真的很少见!等等,所以不管怎样——如果我们在函数的末尾加上return或not,它会自动返回吗?我还想知道num=对于方程的两个数学部分意味着什么。您是否将num重新定义为新的数字,然后重复,直到满足条件?最后,有没有办法使用累加器并像列表一样附加它?当然。。。只要在你看到打印的地方添加到列表中。。。然后把它还给我。。。是的,它重新定义num,直到num变为零。。。点击链接并逐步浏览网站上的代码,几次之后你就会明白了。非常感谢!作为一个全新的人,我需要这些东西像婴儿一样跟我说话哈哈。那个网站会有很大帮助。我有时有点泄气。我来自非STEM背景,所以这些初学者问题会让我困惑数小时。可能会对信心造成伤害,所以这很有帮助。当很好的小说…:)+1这是一个巨大的崩溃-谢谢!我现在看得更清楚了。它不断迭代,新的num在重新定义的过程中循环,并向上打印,直到达到零。我的问题是——这是一个有效的代码吗?我习惯于累加器和附加到列表。例如