【问题标题】:Python 2.7. Iterating list not working蟒蛇 2.7。迭代列表不起作用
【发布时间】:2015-11-20 14:17:38
【问题描述】:

刚开始使用 Python 并做一些挑战,这个是关于 Collat​​z 数字的。 但是,我一开始就卡住了,我传递给 collatz 方法的范围没有迭代给定范围。

我在这里错过了什么?

def collatz(number):
    for i in number:
        if i % 2:
            return i // 2
        else:
            return 3 * (i + 1)


try:
    print(collatz(range(0,10)))
except ZeroDivisionError:
    print("Zero Division")
except TypeError:
    print "Type Error"

【问题讨论】:

    标签: list python-2.7 iterator collatz


    【解决方案1】:
        for i in range(0,10):
            print(collatz(i))
    

    【讨论】:

      【解决方案2】:

      简短回答:'return' 语句会导致您的函数在第一次迭代时退出,从而阻止进一步的迭代发生。

      长答案:
      以下是您的代码运行方式的细分。

      • collat​​z(number) 接收列表 [0,1,...10]
      • 从 0 开始为 [0,1,...10] 创建一个循环
      • 第一,从i = 0开始
      • 0 % 2 evals 为 0,即 False,这意味着我们跳到 else 语句
      • 我们返回 3 * (0 + 1),其计算结果为 3。
      • 我们完成了对 collat​​z(number) 的调用

      其他人的帖子中回答了正确的方法。

      【讨论】:

        【解决方案3】:

        算法

        • 如果是偶数,则除以二。
        • 如果数字是奇数,则将其加三并加一。

        代码

        def f(n):
            if n % 2 == 0:
                return n // 2
            else:
                return 3 * n + 1
        
        def a(i, n):
            if i == 0:
                return n
            else:
                return f(a(i - 1, n))
        
        def collatz(n):
            i = 0
            c = 0
            out = []
        
            while c != 1:
                c = a(i, n)
                out.append(c)
                i += 1
            return out
        
        print(collatz(6))
        

        输出

        [6, 3, 10, 5, 16, 8, 4, 2, 1]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-08-17
          • 1970-01-01
          • 2016-03-03
          • 1970-01-01
          • 1970-01-01
          • 2014-05-16
          • 2016-10-17
          相关资源
          最近更新 更多