Python中的Hailstone

时间:2014-09-25 06:13:30

标签: python

所以我有这个代码来计算Hailstone序列并继续这样做5次迭代。因此,如果我输入数字128,我应该得到64,32,16,8,4。我最终会这样做,但不是没有显示列表在列表末尾一次添加一个数字。我想获得整个列表,没有别的。 这是我的代码:

lines=list()
n=int(input("Enter the a number greater than 128: "))
if n<128:
        print("ENTER A NUMBER GREATER THAN 128!!!!")
else:
    i=5
    m=5
for i in range(m):
    if n%2==0:
        n=n/2
        line=n
        lines.append(line)
    else:
        n=3*n+1
        line=n
        lines.append(line)
    print (lines)

这是我的输出:

[64.0]
[64.0, 32.0]
[64.0, 32.0, 16.0]
[64.0, 32.0, 16.0, 8.0]
[64.0, 32.0, 16.0, 8.0, 4.0]

我唯一想要的是最后一个列表,我不想要第一个3.我该怎么做?

3 个答案:

答案 0 :(得分:2)

print放在循环之外。 试试这个:

#!/usr/bin/env python
#-*- coding:utf-8 -*-
lines=list()
n=int(input("Enter the a number greater than 128: "))
if n<128:
        print("ENTER A NUMBER GREATER THAN 128!!!!")
else:
    i=5
    m=5
for i in range(m):
    if n%2==0:
        n=n/2
        line=n
        lines.append(line)
    else:
        n=3*n+1
        line=n
        lines.append(line)
print (lines)

答案 1 :(得分:1)

您正在'for'循环中打印列表(行)。 所以很明显,每次循环迭代你的print语句都会执行。 如果您必须打印最终列表,则必须将打印件保留在for循环之外。

答案 2 :(得分:0)

因为print循环内的for函数将其放在循环旁边:

lines=list()
n=int(input("Enter the a number greater than 128: "))
if n<128:
        print("ENTER A NUMBER GREATER THAN 128!!!!")
else:
    i=5
    m=5
for i in range(m):
    if n%2==0:
        n=n/2
        line=n
        lines.append(line)
    else:
        n=3*n+1
        line=n
        lines.append(line)
print (lines)

>>>Enter the a number greater than 128: 128
[64, 32, 16, 8, 4]

或者如果要打印出列表,可以使用map将转换索引转换为strjoin函数以将str号与,连接起来:

print ','.join(map(str,lines))

>>>Enter the a number greater than 128: 128
64,32,16,8,4