2017-02-23 15 views
-1

マイリストは次のようにレイアウトされている形式で印刷が:パイソン3 - リストの整数を添加し、

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() 

コードになっている。

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 

私のコードはこれです少なくとも1勝でプレイヤーの情報だけを印刷する。

それぞれの勝利は3点ですので、プログラムは各選手のポイントを計算し、それらの情報をテーブルに並べて表示する必要があります。

問題は、改行がインデントされた点を印刷するとき、リストの最後のプレイヤーだけがこの問題の影響を受けないということです。助けてください。ここで

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

は、あなたが2つの文字列を持っており、辞書的にそれらを比較している:あなたの問題の

+0

あなたのリストは見ていませんリストのように。 – Goyo

+0

文字列は辞書順に比較されます。数値の比較をしたい場合: '' int(data [2])> = 1'''。私はこれが重複した質問であると確信しています、私はまだそれを見つけていません。 – wwii

+0

'if data [2]> =( '1')'英数字の比較。それは慎重ですか? –

答えて

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

少なくとも一つはデータ型です。あなたは本当に2つの数を求め、それらを算術的に比較します。このようになります任意のエラー処理、なし

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

問題はあなたがいないということです行末の文字を行の最後の要素から削除してください!右印刷する前にポイントを挿入した後、dataは次のようになります。

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

それを修正するには、あなたがこれまであなたdata = ...ラインにstripを追加することができます。

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

いくつかのより多くのポイント:

  • 数値を比較するときに文字列を比較しないでください
  • ヘッダー行をスキップし、例えば、 floatwinsをキャストにループ
  • ノーポイントの前next(file)を使用して、int型、ただ単にappendを使用する代わりにinsert(4, ...)int
  • を使用すると、リストの最後に追加する
+0

を使用するか、 '' 'print(....、end = '')' '' 。 – wwii

+0

@wwii 'end = '''を使うと、文字列の途中で '\ n'が削除されません。 –

+0

..ちょうどそれを見ました - 心配しないでください。 – wwii

関連する問題