Как узнать, находятся ли элементы из списка в другом списке - PullRequest
0 голосов
/ 20 июня 2020

Я сейчас работаю над этой игрой, очень похожей на Road Fighter, дело в том, что мне нужно сохранить результаты игроков, я делаю это с помощью файла .txt, а затем мне нужно отобразить Лучшие результаты. Я пытаюсь сделать это с помощью приведенного ниже кода, моя проблема в том, что мне нужно сопоставить эти баллы с именем игрока, и я не понимаю, что я делаю неправильно. Кстати, я должен это сделать. рекурсивно

Например, функция GetSortedScores возвращает следующий список:

[10000, 3424, 788, 225, 177, 125, 95, 90, 80, 50, 3]

, поэтому я пытаюсь спросить исходный список, соответствуют ли элементы приведенного выше списка оценки, если оценки совпадают, он должен создать список с именем игрока и соответствующими оценками, результат, который я ищу, будет следующим:

[maicolvn 10000, playerone 3424, mike 788, jake 225, francis05 177, julia 125, playerTwo 95, player3 90, jerome 80, frank 50, luke 3]

когда я пытаюсь запустить код для тестирования он python показывает мне эту ошибку

  if sortedList == []:

RecursionError: максимальная глубина рекурсии превышена при сравнении

также так выглядит мой текстовый файл:

maicolvn,10000
mike,788
playerTwo,95
jake,225
francis05,177
luke,3
jerome,80
frank,50
player3,90
julia,125
playerone,3424

заранее спасибо за помощь, я только вхожу в это, поэтому спасибо за отзыв

def TopScores():
 list = GetSortedScores()
 return TopAux(ReadFile(),list,[])

def TopAux(originalList,sortedList,newList):
 if sortedList == []:
      return newList
 elif sortedList[0] == int(originalList[0].split(",")[1]):
      return TopAux(originalList,sortedList[1:],[originalList[0].split(",")[0]+originalList[0].split(",")[1]]+newList) """This is supposed to get the the name and score of the player"""
 else:
      return TopAux(originalList,sortedList,newList)

def GetSortedScores():
 return(SortScores(GetBestScores(ReadFile(),[])))

def GetBestScores(list,newList):
 """Get scores from file"""
 if list == []:
      return newList
 elif isinstance(int(list[0].split(",")[1]),int):
      return GetBestScores(list[1:],newList+[int((list[0].split(",")[1]))])
 else:
      return GetBestScores(list[1:],newList)

def SortScores(list):
 """Returns a list of scores in descending order"""
 list.sort(reverse=True)
 return list

def ReadFile():
 """This function reads the file of the scores
 and return the content in a list"""
 path = "TopScores.txt"
 file = open(path)
 content = file.readlines()
 file.close()
 return content

1 Ответ

1 голос
/ 20 июня 2020

Вы можете прочитать свои оценки следующим образом из файла:

path = "TopScores.txt"
scores = list()
with open(path) as f:
    for l in f:
      l = l.strip().split(',')
      l[1] = int(l[1])
      scores.append(l)

print(scores)
print(sorted(scores, key = lambda x: -x[1]))

Используя лямбда-функцию, вы можете получить доступ к точкам и отсортировать их вместо имен. Впоследствии он пропустил бы этап сопоставления точек с именами.

Читая ваш сценарий выше, я получил синтаксическую ошибку в строке 9. Не дожил до вашей RecursionError. Может быть, вы могли бы реструктурировать и очистить свой код?

Дополнительно: в случае, если вы довольно часто меняете свои очки во время игры для нескольких игроков, вы можете сохранить пары player : score в dict scores = dict() во время выполнения вашей игры. Таким образом, вы можете просто получить доступ и обновить оценки просто: scores.get(<name>) или установить их через scores[<name>] = score.

Если вы хотите, чтобы они были отсортированным списком для высокого балла:

sorted([[k,v] for k,v  in scores.items()], reverse = True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...