Гайд Рейтинг результатов

  • 80
  • 4
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Сегодня мы напишем приложение-пример, которое будет принимать от пользователя его имя и результат, после чего - форматировать и записывать в файл список из 10 лучших результатов. Это достаточно простое приложение, однако на его примере мы попрактикуемся в работе с файлами в Python, генерации списков, продвинутой работе со строками, расширенном использовании метода sort, обработке исключительных ситуаций.

Узнаем имя и результат пользователя:

Код:
name = input('Your name: ')
score = input('Your score: ')

Тепер открываем файл с результатами, eсли файла не существует - создадим его и заполним демо-данными:

Код:
try:
    scores = open("scores.txt")
except (OSError, IOError):
    scores = open('scores.txt', 'w')
    scores.write('1. AAA 1000\n2. CCC 700\n3. BBB 200')
    scores.close()
    scores = open("scores.txt")


Читаем содержимое файла и форматируем список content. В файле хранятся записи формата:
Позиция. Имя Результат

Посмотреть вложение 2126

Список content генерируется следующим образом:

Код:
scores = open("scores.txt")
content = ['{} {}'.format(s.split()[1],
                          s.split()[2]) for s in scores.read().split('\n')]
scores.close()
Код:
text = ''
for i, item in enumerate(content[:10], start=1):
    text += '{}. {}\n'.format(i, item)

На первой строке мы открываем файл scores.txt, на последней - закрываем. Самое интересное происходит посередине. Мы читаем содержимое файла и создаем список из строк формата 'Имя Результат'. Далее мы добавляем в этот список строку содержащую введенные нами имя и результат.

Код:
content.append('{} {}'.format(name, score))


После этого, наша задача отсортировать весь список на основе результата. Для этого воспользуемся встроенной функцией sort.

Код:
content.sort(key=get_key, reverse=True)

reverse=True означает, что список будет форматироваться от большего к меньшему. В Python функция sort позволяется нам работать очень гибко, одним из параметров, которые она принимает, является ключевой аргумент key, которым мы можем задать функцию на основе которой будет производится сортировка. Давайте напишем такую функцию (обратите внимание, что функция должна быть определена до строки content.sort...):

Код:
def get_key(item):
    return int(item.split()[1])

Код:
Готово! Список отсортирован. Теперь нужно перезаписать файл scores.txt, заполнив его десятью лучшими результатами. Для начала создадим переменную text:

Код:
text = '\n'.join(['{}. {}'.format(i, item) for i, item in enumerate(content[:10], start=1)])

Эта запись может напугать новичка, но по сути это более корректный вариант создания строки из списка. Мы могли бы заменить ее записью:


Код:
text = ''
for i, item in enumerate(content[:10], start=1):
    text += '{}. {}\n'.format(i, item)



Однако такой вариант это по сути лишняя трата процессорного времени и лишние строки в коде.

Напечтаем то, что у нас получилось, чтобы получить хоть какую-то визуализацию, и запишем переменную в файл:

Код:
print(text)
scores = open("scores.txt", 'w')
scores.write(text)
scores.close()

Все работает, как и ожидалось!
Посмотреть вложение 2127


Получаем вот такую картину
Посмотреть вложение 2129
 
Активность
Пока что здесь никого нет
Сверху Снизу