所以我正在使用 Python 開發一個小型游戲專案,玩家可以在其中輸入他們的名字,在游戲結束時,他們的分數將與他們的名字一起保存到串列中。但是我在根據分數(降序)顯示和列印排序串列時遇到問題。我做了這樣的事情:
'''
class Player:
def __init__(self, name, score):
self.name = name
self.score = score
def getName(self):
return(self.name)
def getScore(self):
return(self.score)
list_player = []
print("=== INPUT PLAYER ===")
while True:
name = input("Input name : ")
score = input("Input score : ")
list_player.append(Player(name, score))
print("INPUT PLAYER AGAIN ? [Y/N] : ", end=' ')
c = str(input())
print()
if c == "N" or c == "n":
break
print()
for i in list_player:
print("Name : " i.name, end=' ')
print("Score : " i.score)
nl = []
nl = sorted(list_player, key=lambda player: player.score)
for i in nl:
print("Name : " i.name, end=' ')
print("Score : " i.score)
'''
這是程式執行時的結果:
=== INPUT PLAYER ===
Input name : aaa
Input score : 200
INPUT PLAYER AGAIN ? [Y/N] : y
Input name : ccc
Input score : 500
INPUT PLAYER AGAIN ? [Y/N] : y
Input name : ddd
Input score : 1000
INPUT PLAYER AGAIN ? [Y/N] : n
Name : aaa Score : 200
Name : ccc Score : 500
Name : ddd Score : 1000
Name : ddd Score : 1000
Name : aaa Score : 200
Name : ccc Score : 500
這是更清晰的影像: 執行結果
我已經嘗試使用 sort() 和 sorted() 方法,但結果仍然是錯誤的。
使用 Java 語言,我可以使用 Collections.sort(list_player, Comparator.compare(Player::getScore))。Python 中是否有相同的方法?
uj5u.com熱心網友回復:
由于您尚未將字串轉換為數字,因此請更改您的分數輸入部分以將輸入分數轉換為整數,因為將分數作為整數是有意義的:
score = int(input("Input score : "))
另一種解決方案可以是,在排序時簡單地將值型別轉換為整數,而不是觸及串列中的內容,即在排序時將 lambda 函式中的分數轉換為整數:
nl = sorted(list_player, key=lambda player: int(player.score))
并且順序即升序/降序可以通過reverse引數操縱到sorted內置
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/373310.html
