Python 3 - 将一个整数添加到列表中并以格式打印

时间:2017-02-23 19:51:54

标签: python python-3.x

我的清单如下:

1st name, last name, wins, losses
zac,kop,5,6
jack,mop,0,11
farth,tal,11,0
darth,vader,2,9
nump,kk,1,10

我的代码是:

def points():
    template = "|{0:30}|{1:30}|{2:30}|{3:30}|{4:30}"
    lol = template.format("1st name: ","2nd Name: ", "won: ", "lost: ","points: ")
    print(lol)

    with open(r'prac2.txt', 'r') as file:
        for line in file:
            data = line.split(',')

            if data[2] >= ('1'):
                poin = (int(float(data[2]))) * 3)
                add_list = data.insert(4,poin)
                print('|{0[0]:<30}|{0[1]:<30}|{0[2]:<30}|{0[3]:<30}|{0[4]:<30}'.format(data))

points()

该代码应打印出至少1次胜利的玩家信息。

每次获胜都是3分,所以程序必须计算每个玩家积分并将其信息与表格一起显示。

问题在于,当它在缩进的换行符上打印点时,只有列表中的最后一个玩家不受此问题的影响。请帮忙。

2 个答案:

答案 0 :(得分:3)

问题是你没有从该行的最后一个元素中删除行结束字符!在打印之前,插入点后,data看起来像这样:

['zac', 'kop', '5', '6\n', 15]

要解决此问题,您可以将strip添加到data = ...行:

data = line.strip().split(',')

更多要点:

  • 如果要比较数字
  • ,请不要比较字符串
  • 跳过标题行,例如在循环之前使用next(file)
  • 没有必要将wins投射到float然后转换为int,只需使用int
  • 而不是insert(4, ...)只需使用append添加到列表的末尾

答案 1 :(得分:1)

至少有一个问题是数据类型:

 if data[2] >= ('1'):

这里有两个字符串,并按字典顺序对它们进行比较。你真的想要两个数字并且算术地比较它们。

没有任何错误处理,看起来像这样:

if int(data[2]) >= 1: