2017-03-22 6 views
0

私は現在、スペースインベーダーのようなゲームを作っています。ゲームはゲームからすべてのスコアを取り込み、並べ替えて、スコアをcsvファイルに保存します。これを行う私の方法は、ソートされていないcsvファイルにスコアを保存し、それらの値を読み込んでソートし、並べ替えられた値をソートされた別のCSVファイルに保存することです。しかし、私は自分のcsvファイルに上位10のスコアしか格納しないようにしたい。これは、私は現在、このプロセスを持っているコードです:Python 2.7:リストからポップアップ

if col: 
    with open("rec_Scores.csv", "ab") as f:  #adding new score into unsorted file 
     w = csv.writer(f, delimiter = ",") 
     w.writerow([curr_score]) 


    with open ("rec_Scores.csv", "rb") as csvfile: #reads file, converts values to integers and sorts file (including the new score) 
     r = csv.reader(csvfile) 
     scores = list(r) 
     scores_int = [int(score[0]) for score in scores] 
    bubbleSort(scores_int) 
    scores_int.pop() 
    print(scores_int) 

    with open("srt_Scores.csv", "wb") as sortfile: #Should write a new csv file every time containing the sorted scores 
     w = csv.writer(sortfile, delimiter = ",") 
     w.writerows([[v] for v in scores_int]) 

私は、これは、このプロセスを行うための最も効率的な方法ではありません知っているが、それは主に動作します。もし誰かが私にプログラムをちょうどトップ10のスコアを保存させるのに役立てることができたら、それは大いに感謝されるでしょう。

P.s: これは私がPythonでcsvファイルを使用して初めて作業したので、面倒で非効率ですが、スコアが格納されてうまくソートされているだけです。値の数を制限したいだけです。

+0

'pandas'はcsvファイルを読み込んだり保存したりすることができます。トップ10を簡単に読み込み、追加、並べ替え、保存することができます – Nullman

+1

変数に' pop() 'を割り当てる必要があります。 : 's = scores_int.pop(); print(s) ' – AChampion

+0

@AChampionそれは彼が飛び出している価値を気にしている場合にのみ当てはまります。それがコードであるかどうかは明らかではない。 (彼はそれを使ってリストの最後の要素を削除しているだけかもしれません)。 – glibdud

答えて

1

上記のコードが他の点で "働いている"場合(新しいスコアを追加して読み込み、並べ替えることができます)、それらを10に制限するには、最初の10点をスライスするだけです。これで...

scores_int.pop() 

:この行を交換して、あなたの最高のスコアが最初に来ると仮定し

scores_int = scores_int[:10] 

を。ない場合は、代わりに最後 10アイテムをしたい:

scores_int = scores_int[-10:] 

それはあなたが、リスト内の10個のアイテムを持って前にこれを実行しても安全です。その場合、与えられた行のいずれかが単に何もしません。

関連する問題