我的清单如下:
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分,所以程序必须计算每个玩家积分并将其信息与表格一起显示。
问题在于,当它在缩进的换行符上打印点时,只有列表中的最后一个玩家不受此问题的影响。请帮忙。
答案 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: