【问题标题】:How can I use an if statement with this dictionary如何在这本字典中使用 if 语句
【发布时间】:2016-07-22 18:22:50
【问题描述】:

这是我的代码

players = []
while len(players) >= 0:
    name = input('Enter a name: ')
    players.append(name)
    if name == '':
        players.pop()
        break
    else:
        pass             

player_dict = {name: [] for name in players}
print(player_dict)

for name in player_dict:
    answer = input(name + ', who will win the fight? ')
    player_dict[name].append(answer)

fight_winner = input('Who won the fight? ')

for name in player_dict:
    if answer == fight_winner:
        print(name + ' = Correct')
    else:
        print(name + ' = Incorrect')
print(player_dict)

这是我运行代码时看到的

Enter a name: bill
Enter a name: bob
Enter a name: 
{'bill': [], 'bob': []}
bill, who will win the fight? red
bob, who will win the fight? blue
Who won the fight? red
bill = Incorrect
bob = Incorrect
{'bill': ['red'], 'bob': ['blue']}

我希望看到bill = Correct。如何访问每个个体值并通过 if 语句运行它?感谢您的帮助

【问题讨论】:

  • 你可能想要 if fight_winner in player_dict[name]: 这样的东西,但我不明白为什么 player_dict 值是列表。

标签: python-3.x if-statement dictionary


【解决方案1】:

改变

for name in player_dict:
    if answer == fight_winner:
        print(name + ' = Correct')
    else:
        print(name + ' = Incorrect')
print(player_dict)

收件人:

for name, colors in player_dict.items():
    if fight_winner in colors:
        print(name + ' = Correct')
    else:
        print(name + ' = Incorrect')
print(player_dict)

您的fight_winner 是名称以外的颜色。您将颜色存储到列表中,如下所示:

player_dict[name].append(answer)

键是名称,值是颜色列表。因此当你迭代字典player_dict时,你应该根据颜色fight_winner找到name

你不能在条件语句if answer == fight_winner: 中使用变量 answer,原因是 answer 的值总是由最后一次迭代分配的,它可能没有给你正确的比较。

例如,如果顺序是蓝色然后是红色,答案是红色,并且您将fight_winner 设置为蓝色,则两个玩家都是Incorrect

下面是我的测试:

python test.py                                  
Enter a name: bill
Enter a name: bob
Enter a name:
{'bill': [], 'bob': []}
bill, who will win the fight? red
bob, who will win the fight? blue
Who won the fight? red
bill = Correct
bob = Incorrect
{'bill': ['red'], 'bob': ['blue']}

【讨论】:

  • 感谢您的回复,完美运行,感谢您的深入解释
  • @LukeBray 很高兴它有帮助。请检查它作为答案:)
【解决方案2】:

在当前形式下,您可以通过更改使您的代码工作:

if answer == fight_winner:

到:

if player_dict[name][0] == fight_winner:

或者(甚至更好):

answer = player_dict[name][0]
if answer == fight_winner:

但是,我不认为每个玩家的字典条目都需要是一个列表,因为您只为每个玩家存储一个值。考虑改用以下内容:

player_dict = {}

for name in players:
    answer = input(name + ', who will win the fight? ')
    player_dict[name] = answer

fight_winner = input('Who won the fight? ')

for name, answer in player_dict:
    if answer == fight_winner:
        print(name + ' = Correct')
    else:
        print(name + ' = Incorrect')

这种方法似乎更具可读性(至少在我看来),并且不使用 player_dict 中的列表,因为它们不是必需的(在您的代码的当前形式中)。

【讨论】:

  • 感谢您的帮助,您的解决方案有效。我有一个列表的原因是因为我希望最终在列表中有多个值
猜你喜欢
  • 2020-06-23
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-03
相关资源
最近更新 更多