Первое, что вам нужно сделать, это преобразовать оценки из строк в числа. Как это:
for line in playerData:
sname, slevel, sscore = line.split(",")
sscore = int(sscore)
Обратите внимание, что я только что назвал split
один раз вместо 3 раза, и дал содержательные имена результатов, а не просто называть их [1]
и так далее.
Если вы используете Python 2.x, что level = input("Game Level?")
собирается конвертировать вход на int
, так что вам нужно преобразовать каждый slevel
в int
, а также. Тем не менее, вы действительно, действительно, действительно не должны использовать input
в Python 2.x; лучшим решением было бы переключить его на raw_input
. Но вы можете конвертировать в int
в любом случае, поэтому, если кто-то набирает «Я не знаю, что здесь поставить», они получают ошибку вместо результата. :) Итак, давайте покажем, что:
level = int(raw_input("Game Level?")) # asking for which level
(. Если вы на самом деле на Python 3.x, оставьте raw_input
в input
, но все-таки добавить int
вокруг него)
И затем, внутри цикл:
sname, slevel, sscore = line.split(",")
slevel = int(slevel)
sscore = int(sscore)
Далее, вы можете следить за наибольшее количество, как вы идете по:
hsname, hslevel, hsscore = None, None, -1
for line in playerData:
sname, slevel, sscore = line.split(",")
slevel = int(slevel)
if slevel == level:
sscore = int(sscore)
if sscore > hsscore:
hsname, hslevel, hsscore = sname, slevel, sscore
А потом вы просто распечатать его в конце:
print(hslevel)
print(hsname)
print(hsscore)
Если вы хотите, чтобы получить умный, вы можете сделать это путем преобразования Iterable линий в Iterable троек, то вызывая max
на результат:
triples = (line.strip().split(",") for line in playerData)
level_triples = ((n, l, s) for (n, l, s) in triples if int(l) == level)
highscore = max(triples, key=lambda triple: int(triple[2]))
hsname, hslevel, hsscore = highscore
в любом случае, мы не хранить anyth кроме имени/уровня/балла за самый высокий балл, который был обнаружен до сих пор. (В первой версии это явно, во втором мы просто создаем ленивые итераторы и вызываем max
, поэтому это происходит неявно.) Это здорово, если вы действительно хотите только один поиск, а затем выйти.
Но если вы собираетесь делать несколько поисков - скажем, вы хотите иметь меню, в котором пользователь может запросить уровень за уровнем, или просто хотите распечатать все рекорды уровней - вы сделали бы лучше преобразовать данные в формат, который упрощает выполнение поиска, как в Kasra's answer.
Это не вопрос, а «пожалуйста, делать свою работу бесплатно» нить ... – Antwane
Из комментариев к каждому из ответов, кажется, что вы» просто ищущий рабочий код, который вы можете использовать, даже не пытаясь понять его. – abarnert