Статистика программных выигрышей / проигрышей в игре по угадыванию чисел для Python - PullRequest
0 голосов
/ 01 августа 2020

Я написал программу для игры в угадывание чисел в Python, которую я почти закончил. Однако есть одна небольшая проблема, которую я не могу понять. После завершения игры я хочу, чтобы статистика для каждого игрока была распечатана в формате .txt со следующей информацией:

Имя пользователя | Победа или поражение | Количество предположений.

Я не могу понять, как сгенерировать статистику выигрышей / проигрышей c в следующей строке для каждого игрока:

f.write(str(playerName)+ '|' +str(numberOfGuesses)+'\n').

Если бы кто-нибудь мог Пожалуйста, дайте совет, мы будем очень признательны. Я отобразил часть кода следующим образом:

won = False

while numberOfGuesses < maxGuesses:
   guess = int(input('What is your guess?: '))
   numberOfGuesses += 1
   if guess < number:
        print('Too low')
   if guess > number:
        print('Too high')
   if guess == number:
        won = True
        break
   print('You have', str(maxGuesses - numberOfGuesses) + ' guesses remaining\n')

if won:
    print('Congratulations!!! You guessed the number in ' + str(numberOfGuesses) + ' tries!')
else:
    print('Game Over!!! You did not guess the correct number, the number was ' + str(number))


f = open('Statistics.txt', 'a')
f.write(str(playerName)+ '|' +str(numberOfGuesses)+'\n')
f.close()
f = open('Statistics.txt', 'r')
print(f.read())

Ответы [ 3 ]

0 голосов
/ 01 августа 2020

Поскольку у вас есть playerName в миксе, я предполагаю, что вы пытаетесь сохранить статистику очков для каждого игрока. В этом случае я предлагаю вам создать словарь, основанный на именах игроков. Значения могут быть списками [numCorrect, totalGuesses] на игрока. Вы должны обновлять numCorrect и totalGuesses во время каждого хода игрока по мере необходимости. В конце концов, вы пройдетесь по этому словарю и обработаете результаты.

0 голосов
/ 01 августа 2020

Вот логи c, который нужно реализовать, чтобы вы могли получить статистику выигрышей / проигрышей.

Для каждой игры у вас будет следующее

Имя игрока, флаг победы или поражения, Всего предположений.

Прочтите файл статистики, чтобы узнать, существует ли игрок. Если игрок существует, получите следующую информацию:

Имя игрока, Счетчик побед, Счетчик проигрышей, Статистика выигрышей и проигрышей, Наименьшее количество предположений

* Win Count will be # of times player has won in the past

* Loss Count will be # of times player has lost in the past

* Win-Loss stat will be Win / (Win + Loss). If you want % then x by 100

* Lowest Number of Guesses for the first entry will be numberOfGuesses

Для всех последующих записей вам необходимо чтобы обновить запись в файле на основе новых вычислений, как показано ниже.

If current game is win, win_count += 1
If current game is loss, loss_count += 1
win_loss stat will remain win_count / (win_count + loss_count)

if numberOfGuesses < lowest_number_of_guesses: lowest_number_of_guesses = numberOfGuesses. 

#you can modify this with walrus option if you use 3.8+

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

Так как у вас будет много операций ввода-вывода с указанным выше логом c , вы можете прочитать файл в памяти и вычислить его в памяти, а затем записать в файл как часть обычного выхода из программы. Одна из проблем заключается в том, что данные будут потеряны, если программа внезапно выйдет из строя.

Надеюсь, это поможет вам реализовать хороший лог c.

Я хотел написать это в комментариях, но максимальное количество символов превышено. Так что укажите это в комментариях к ответу. Я бы предпочел, чтобы вы написали код, поскольку он поможет вам с реализацией logi c.

0 голосов
/ 01 августа 2020

Это красиво, просто. Чтобы уточнить, если выиграл == Истина, вы хотите написать «Выиграл» в строке, а если выиграл == Ложь, вы хотите написать «Проигрыш» в строке правильно?

win_or_loss = 'Loss'
if won:
    win_or_loss = 'Win'

Тогда вы просто используйте эту переменную при записи в файл

f.write(str(playerName)+ '|' + win_or_loss + '|' +str(numberOfGuesses)+'\n')

Кроме того, вам не нужно заключать playerName в str (), поскольку это уже строка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...