Как изменить конкретное значение в упорядоченном словаре в Python - PullRequest
0 голосов
/ 22 октября 2018

Я изо всех сил пытаюсь понять, как выполнить то, что я обрисовал в общих чертах ниже.

Я использую упорядоченный словарь, чтобы отслеживать оценки (значения) для каждого игрока (ключей).Цикл for повторяется столько раз, сколько есть игроков.

Я думал обновить значение ключа, который совпадает с индексом x в цикле for, но я не могу показатьсявыяснить, как его выполнить.Любые предложения приветствуются, вполне возможно, что я подхожу к этому неправильно.

Это то, что у меня пока есть:

numberOfPlayers = input("\nEnter number of players : ")
print("The number of players has been set to %s \n" % 
(numberOfPlayers))
numberOfPlayersInt = int(numberOfPlayers)
players = collections.OrderedDict()

for index in range(numberOfPlayersInt):
    teamName = input('Team/Player %i, enter a team name :' %(index))
    players[teamName] = 0

    for x in range(numberOfPlayersInt):
        print("Player %d, your question :" % (x + 1)) 
        answer = str(input("\nCorrect ? "))
        if answer.lower() in ['y', 'yes']:
            pass
            #some code here that updates the value for this player.

Словарь с 3 записями, a - c, выглядит так:

OrderedDict([('a', 0), ('b', 0), ('c', 0)])

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Я считаю, что вы хотите просто обновить значение текущего игрока, следуя его имени в качестве ключа.Я взял ваш код и добавил некоторые изменения, чтобы он был описательным, сделав его немного более питоническим (стиль змеи и т. Д.):

import collections

num_of_players = int(input("\nEnter number of players : "))
print("The number of players has been set to %s \n" % (num_of_players))

players = collections.OrderedDict()

POINTS_INCREASE = 5 # or any other update you want here

for index in range(num_of_players):
    team_name = raw_input('Team/Player %i, enter a name :' % (index))
    players[team_name] = 0

    print("Lets update player %d ..." % (index))
    answer = str(raw_input("\nCorrect (y, yes) ? "))
    if answer.lower() in ['y', 'yes']:
        players[team_name] += POINTS_INCREASE

print players
0 голосов
/ 22 октября 2018

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

def new_value(index, key, value):
    print("Player %d, your question :" % (index + 1)) 
    answer = str(input("\nCorrect ? "))
    if answer.lower() in ['y', 'yes']:
        return value + 10
    else:
        return value

od = OrderedDict.fromkeys(['player1', 'player2', 'player3'], 0)

od = OrderedDict((k, new_value(i, k, v)) for i, (k, v) in enumerate(od.items()))

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

for i, (k, v) in enumerate(od.items()):
    od[k] = new_value(i, k, v)
...