如何将整数作为输入,其输出将是该数字后面的Collatz序列。此序列由下列规则计算:
n/2。3n + 1。例如,从11开始
11 34 17 52 26 13 40 20 10 5 16 8 4 2 1这是我现在的代码:
n = int(raw_input('insert a random number'))
while n > 1:
if n%2 == 0:
n_add = [n/2]
collatz = [] + n_add
else:
n_add2 = [3*n + 1]
collatz = [] + n_add2
print collatz如果我执行这个并插入一个数字,什么都不会发生。
发布于 2014-11-06 20:01:32
你永远不会改变数字n,所以每次都是一样的。只有当数字是奇数时,你才会打印。此外,方括号[]表示数组--我不确定您的目标是什么。我可能会这样改写它:
n = int(raw_input('insert a random number'))
while n > 1:
if n%2 == 0:
n = n/2
else:
n = 3*n + 1
print n你可能想花点时间来比较和对比一下我和你的指令所做的事情--这几乎是字面上的逐字翻译(除了print )。
您的代码中有些不清楚是希望在它们出来时将它们打印出来,还是希望收集它们,并在最后打印出来。
发布于 2014-11-06 20:34:38
您每次都应该修改n,这将实现您想要的结果:
n = int(raw_input('insert a random number'))
while n > 1:
n = n / 2 if not n & 1 else 3 * n + 1 # if last bit is not set to 1(number is odd)
print n
## -- End pasted text --
insert a random number11
34
17
52
26
13
40
20
10
5
16
8
4
2
1使用您自己的代码只打印出每个n:
n = int(raw_input('insert a random number'))
while n > 1:
if n % 2 == 0:
n = n / 2
else:
n = 3 * n + 1
print n或者把所有的东西都列在一张单子上,最后打印出来:
all_seq = []
while n > 1:
if n % 2 == 0:
n = n / 2
else:
n = 3 * n + 1
all_seq.append(n)
print(all_seq)发布于 2016-02-17 19:34:17
def collatz(number):
while number != 1:
if number % 2 == 0:
number = number // 2
print(number)
elif number % 2 == 1:
number = number * 3 + 1
print(number)
try:
num = int(input('Please pick any whole number to see the Collatz Sequence in action.\n'))
collatz(num)
except ValueError:
print('Please use whole numbers only.')https://stackoverflow.com/questions/26788266
复制相似问题