2017-02-23 74 views
-1

我的名單奠定了這樣打印出來:的Python 3 - 添加到列表中的整數和格式

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

您的列表不看像一個列表。 – Goyo

+0

字符串按字典順序進行比較。如果你想進行數值比較:'''int(data [2])> = 1'''。我相信這是一個重複的問題,我還沒有找到它。 – wwii

+0

'if data [2]> =('1')'alphanum比較。它是故意的嗎? –

回答

2
if data[2] >= ('1'): 
    poin = int(float(data[2])) * 3 
    data[3] = data[3].strip() 
    add_list = data.insert(4,poin) 

在拆分行的最後一個字符串包含一個換行符。你需要strip()吧。

,或者當你讀行:

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

它給你你想要什麼:

>>> points() 
|1st name: |2nd Name: |won:  |lost:  |points: 
|zac  |kop  |5   |6   |15   
|farth  |tal  |11  |0   |33   
|darth  |vader  |2   |9   |6 
|nump  |kk  |1   |10  |3  

也與此有關:

template = "|{0:<30}|{1:<30}|{2:<30}|{3:<30}|{4:<30}" 
... 
print(template.format(*data)) 

作品和實際使用的模板,你設計的。

*dataunpacks名單成單獨的成分,所以你不必在他們的下標,相當於,在這種情況下,這樣做的:

print(template.format(data[0], data[1], data[2], data[3], data[4]))

1

至少你的問題之一是數據類型:

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

這裏有兩個字符串,並在它們字典順序比較。你真的想要兩個數字,並在算術上進行比較。

沒有任何錯誤處理,那應該是這樣的:

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

的問題是,你不從行的最後一個元素中刪除行尾字符!在打印前,您插入點之後,data看起來是這樣的:

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

要解決它,你可以到你的data = ...行添加strip這樣的:

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

一些積分:

  • 當您想比較數字時不比較字符串
  • 跳過標題行,例如在鑄造winsfloat使用next(file)循環
  • 沒有點之前再整型,只是用int
  • 代替insert(4, ...)只是使用append添加到列表的末尾
+0

或者使用'''print(....,end ='')''' 。 – wwii

+0

@wwii使用'end ='''不會在字符串中間刪除'\ n'。 –

+0

..剛纔看到 - 沒關係。 – wwii