Python 正在尝试更新字典值

Python 正在尝试更新字典值,python,Python,我只是在学习编程,在尝试制作一款僵尸骰子游戏时遇到了一些障碍,很多人以前可能都见过这种情况。我正在尝试添加一个积分计数器,它使用字典在整个游戏中跟踪每个玩家的积分。在这种情况下,我试图将这轮比赛中获得的分数添加到球员的总分数中,但当我尝试更新“大脑”值时,它总是给我这个错误,我似乎无法找出哪里出了问题 import random, time diceTypes = ('green', 'yellow', 'red') diceSides = ('brains', 'footsteps', 's

我只是在学习编程,在尝试制作一款僵尸骰子游戏时遇到了一些障碍,很多人以前可能都见过这种情况。我正在尝试添加一个积分计数器,它使用字典在整个游戏中跟踪每个玩家的积分。在这种情况下,我试图将这轮比赛中获得的分数添加到球员的总分数中,但当我尝试更新“大脑”值时,它总是给我这个错误,我似乎无法找出哪里出了问题

import random, time

diceTypes = ('green', 'yellow', 'red')
diceSides = ('brains', 'footsteps', 'shotguns')  # Each number represents Brains, Footsteps, and Shotguns
dieRolled = []
result = ''
brainsCounter = 0
shotgunCounter = 0
players = {'Player 1': {'name': 'Lane', 'brains': 0},
           'Player 2': {'name': 'Brian', 'brains': 0},
           'Player 3': {'name': 'Sam', 'brains': 0},
           'Player 4': {'name': 'John', 'brains': 0},
           'Player 5': {'name': 'Jack', 'brains': 0},
           'Player 6': {'name': 'Joseph', 'brains': 0},
           'Player 7': {'name': 'Damian', 'brains': 0},
           'Player 8': {'name': 'Eli', 'brains': 0}}


# Pick three die randomly
def diceDraw():
    dieRolled.extend(random.choices(diceTypes, weights=(33, 34, 33), k=3))
    print('You rolled a ' + str(dieRolled[0]) + ', ' + str(dieRolled[1]) + ', and a ' + str(dieRolled[2]))


# Roll the different die
def redDie():
    result = random.choices(diceSides, weights=(17, 33, 50), k=1)
    feedback(result)


def greenDie():
    result = random.choices(diceSides, weights=(50, 33, 17), k=1)
    feedback(result)


def yellowDie():
    result = random.choices(diceSides, weights=(33, 34, 33), k=1)
    feedback(result)


def feedback(result):
    global brainsCounter, shotgunCounter
    if result[0] == 'brains':
        print('You ate a brain!')
        brainsCounter += 1
    elif result[0] == 'footsteps':
        print('The human got away!')
    else:
        print('You got shot!')
        shotgunCounter += 1


def rollDice(dice):
    for i in dice:
        if i == 'Red':
            redDie()
        elif i == 'Green':
            greenDie()
        else:
            yellowDie()
        time.sleep(1)
        if shotgunCounter == 3:
            break
    if brainsCounter == 1 and shotgunCounter == 1:
        print('You have ' + str(brainsCounter) + ' brain, and have been shot ' + str(shotgunCounter) + ' time.')
    elif brainsCounter != 1 and shotgunCounter == 1:
        print('You have ' + str(brainsCounter) + ' brains, and have been shot ' + str(shotgunCounter) + ' time.')
    elif brainsCounter == 1 and shotgunCounter != 1:
        print('You have ' + str(brainsCounter) + ' brain, and have been shot ' + str(shotgunCounter) + ' times.')
    else:
        print('You have ' + str(brainsCounter) + ' brains, and have been shot ' + str(shotgunCounter) + ' times.')


def turn(player):
    global brainsCounter
    input('Press enter to begin your turn...')
    diceDraw()
    while True:
        time.sleep(1)
        rollDice(dieRolled)
        if shotgunCounter < 3:
            print('Would you like to roll again or stop there? (y/n)')
            answer = input()
            if answer == 'y':
                continue
            elif answer == 'n':
                break
        else:
            print('Your turn is over and you lost those brains!')
            break
    players[[player]['brains']] += brainsCounter
    brainsCounter = 0


# todo determine end of turn and record points for turn

# todo cycle turns between players
# todo determine winner
# todo create catchup round
# todo request number of players and save variable

turn('Player 1')
print(players['Player 1']['brains'])
print(brainsCounter)
import random,time
骰子类型=(‘绿色’、‘黄色’、‘红色’)
骰子边=(‘大脑’、‘足迹’、‘猎枪’)#每个数字代表大脑、足迹和猎枪
DIERROLLED=[]
结果=“”
brainsCounter=0
霰弹计数器=0
玩家={'Player 1':{'name':'Lane','brains':0},
'玩家2':{'name':'Brian','brains':0},
'玩家3':{'name':'Sam','brains':0},
'Player 4':{'name':'John','brains':0},
'玩家5':{'name':'Jack','brains':0},
'Player 6':{'name':'Joseph','brains':0},
'Player 7':{'name':'Damian','brains':0},
'Player 8':{'name':'Eli','brains':0}
#随机挑选三个模具
def diceDraw():
扩展(随机选择(骰子类型,权重=(33,34,33),k=3))
打印('您滚动了'+str(dierolld[0])+'、'+str(dierolld[1])+'和'+str(dierolld[2]))
#滚动不同的模具
def redDie():
结果=随机。选择(骰子边,权重=(17,33,50),k=1)
反馈(结果)
def grendie():
结果=随机。选择(骰子边,权重=(50,33,17),k=1)
反馈(结果)
def yellowDie():
结果=随机。选择(骰子边,权重=(33,34,33),k=1)
反馈(结果)
def反馈(结果):
全球智囊中心,猎枪计数器
如果结果[0]=“大脑”:
打印(“你吃了一个脑袋!”)
brainsCounter+=1
elif结果[0]=“足迹”:
打印(“人逃走了!”)
其他:
打印(“你中枪了!”)
喷枪计数器+=1
def掷骰子(骰子):
对于骰子中的我:
如果i==‘红色’:
雷迪()
elif i==“绿色”:
格林迪()
其他:
黄帝
时间。睡眠(1)
如果喷枪计数器==3:
打破
如果brainsCounter==1和shotgunCounter==1:
打印('你有'+str(大脑中心)+'大脑,并且已经被射击'+str(霰弹计数器)+'时间')
elif Brainsoncenter!=1和喷枪计数器==1:
打印('你有'+str(脑力中心)+'大脑,并且已经被射击'+str(霰弹计数器)+'时间')
elif brainsCounter==1和霰弹枪计数器!=1:
打印('你有'+str(大脑中心)+'大脑,并且已经被射击'+str(霰弹计数器)+'次')
其他:
打印('你有'+str(大脑中心)+'个大脑,并且已经被射击'+str(霰弹计数器)+'次。'))
def回合(球员):
全球脑中心
输入('按enter开始您的回合…')
diceDraw()
尽管如此:
时间。睡眠(1)
掷骰子
如果喷枪计数器<3:
打印('您想再次滚动还是停止?(y/n)'
答案=输入()
如果答案==“y”:
持续
elif answer==“n”:
打破
其他:
打印(“你的任务结束了,你失去了那些大脑!”)
打破
玩家[[player]['brains']+=大脑中心
brainsCounter=0
#todo确定转弯结束并记录转弯点
#玩家之间的todo循环
#决定胜利者的待办事项
#todo创建追赶回合
#todo请求玩家数量和保存变量
回合('玩家1')
打印(玩家['Player 1']['brains'])
打印(脑扫描)
这一行是错误的:

players[[player]['brains']] += brainsCounter
我希望你想要:

players[player]['brains'] += brainsCounter

PS:您真的应该显示您在问题中遇到的错误,包括完整的堆栈跟踪。

“它一直给我这个错误”什么错误…?请提供预期的错误。显示中间结果与预期结果的偏差。我们应该能够将单个代码块粘贴到文件中,运行它,并重现您的问题。这还允许我们在您的上下文中测试任何建议。@Prune-实际上,代码以其当前形式是可运行的,并且可以重现您关于发布实际和预期结果的正确问题。(你的评论是偶然的一个罐头,这样,你真的没有考虑代码的完整性?只是猜测,你知道你贴这些有用的提示很多)。这个例子是不完整的。当我运行代码时,我无法重现OP的问题,因为没有指定此类问题。代码不是最小的。没有跟踪中间结果。