Python 2.7。迭代列表不起作用
Python 2.7. Iterating list not working
刚从 Python 开始并进行一些挑战,这是 Collatz 数字上的挑战。
然而,我一开始就卡住了,我传递给 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"
for i in range(0,10):
print(collatz(i))
算法
- 如果是偶数,除以二
- 如果数字是奇数,则将它的三倍加一。
代码
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]
简短回答:'return' 语句导致您的函数在第一次迭代时退出,从而防止进一步的迭代发生。
长答案:
这是您的代码的细分 运行.
- collatz(number) 接收列表 [0,1,...10]
- 从 0
开始为 [0,1,...10] 创建一个循环
- 1,从 i = 0 开始
- 0 % 2 evals to 0, 这是 False,这意味着我们跳到 else 语句
- 我们 return 3 * (0 + 1),计算结果为 3。
- 我们完成了对 collatz(number) 的调用
其他一些人的帖子中回答了正确的方法。
刚从 Python 开始并进行一些挑战,这是 Collatz 数字上的挑战。
然而,我一开始就卡住了,我传递给 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"
for i in range(0,10):
print(collatz(i))
算法
- 如果是偶数,除以二
- 如果数字是奇数,则将它的三倍加一。
代码
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]
简短回答:'return' 语句导致您的函数在第一次迭代时退出,从而防止进一步的迭代发生。
长答案:
这是您的代码的细分 运行.
- collatz(number) 接收列表 [0,1,...10]
- 从 0 开始为 [0,1,...10] 创建一个循环
- 1,从 i = 0 开始
- 0 % 2 evals to 0, 这是 False,这意味着我们跳到 else 语句
- 我们 return 3 * (0 + 1),计算结果为 3。
- 我们完成了对 collatz(number) 的调用
其他一些人的帖子中回答了正确的方法。