2015-11-12 148 views
0

我寫一個程序,保存最後3分在一個文本文件我的遊戲的每一個用戶。我已經編寫了保存它的代碼,現在我將數據帶回程序中,以便用戶獲得高分。我也已將分數保存在單獨列表中所有用戶第一個分數保存在1列表中所有用戶第二個分數在另一箇中,第三個分數相同。我試圖把這些放在他們自己的高分榜上,所以當我將名單與名字(另一個名單)聯繫起來時,我將能夠按比分進行排序,但會被附加到名字上。 貝婁是我寫的代碼:比較列表項的整數蟒蛇

for i in range (2): 
     if score1[i] > score2[i] or score1[i]> score3[i]: 
      highscores.append(score1[i]) 
     elif score2[i] > score1[i] or score2[i] > score3[i]: 
      highscores.append(score2[i]) 
     elif score3[i] > score1[i] or score3[i] > score2[i]: 
      highscores.append(score3[i]) 

順便提一下它是在一個for循環i的範圍2作爲其目前僅2個用戶。我知道我非常愚蠢,因爲這意味着只有一個事件需要真實的工作,但是當我嘗試時,它也不起作用。作爲我的導師說'我有一個正確的想法',我也希望這可以幫助任何人比較列表項與Python中的整數,因爲我無法在互聯網上找到任何東西。 謝謝,我 等待指導

+0

'或'你確定嗎? – njzk2

+2

(您可能只需要像'榜=地圖(最大,拉鍊([1,2,3],[3,5,2],[2,7,1]))') – njzk2

+0

@ njzk2:是啊,如果現有代碼(通過按順序比較每個用戶的單獨分數來存儲高分)是正確的,那將是最好的方法。這看起來並不正確(OP的邏輯錯誤,你只是反映了它),因爲推測高分應該是整體高分(寫作,你的'高分'將是'[3,7,3] ,儘管最高的三個分數是'[7,5,3]')。 – ShadowRanger

回答

2
  1. 你想用and,不or
  2. 您還可以使用,而不是使用anda < b < c語法。
  3. 你真正應該做的是使用Python的內置max功能。一個乾淨的單線,而不是6線if-elif塊。

    highscores.append(max(score1[i], score2[i], score3[i])) 
    
+0

與@njzk2的評論一樣,這反映了OP的代碼試圖做的事情,但可能不是正確的邏輯;如果用戶獲得了[1,2,3]的分數,而另一個用戶獲得了[2,3,4]的分數(我們假設第三個用戶獲得了零分),那麼它會得到一個' [2,3,4]',即使第一個用戶在他們的第三次嘗試中獲得了「3」,並且總體最高分數應該是「[4,3,3]」。 – ShadowRanger

+0

這行highscores.append(max(score1 [i],score2 [i],score3 [i])真的有幫助 –

1

可能不允許這種分配,但對於其他人誰需要做同樣的事情,簡單/快速的方法來從值大的順序選擇前3個值是使用heapq.nlargest。如果你有多個序列,你可以使用itertools.chain來避免級聯(避免峯值內存使用增加)。你甚至可以附上姓名(zipitertools.repeat)每個輸入序列,因此選擇高分包括相關的用戶:

from heapq import nlargest 
from itertools import chain, repeat 

highscores = nlargest(3, chain(zip(score1, repeat('user1')), 
           zip(score2, repeat('user2')), 
           zip(score3, repeat('user3')))) 

highscores然後將一個list包含三個元素(從最高到最低得分,領帶按用戶名分類),每個元素都是(score, username)形式的tuple