我错过了什么吗?改变字典值

时间:2016-03-15 02:26:43

标签: python-2.7 dictionary

我一直在乱用这段代码的时间超过了必要的时间。我根据个人的选择更改为更改字典条目的值。

while points <= 10:
    print "You have " + str(points) + " points left.\n"
    stats = {
      "Strength": 0,
      "Dexterity": 0,
      "Constitution": 0,
      "Intelligence": 0,
      "Wisdom": 0,
      "Charisma": 0
     }

    for i in sorted(stats):
        print i + ": \t" + str(stats[i])

    statInc = raw_input("\nWhere do you want to put your points? ").capitalize()

    if statInc in stats:
        points -= 1
        stats[statInc] += 1

我开始使用 stats [statInc] 作为if / elif,按名称指定字符串。我无法更改值,但点数会相应减少。我知道这是因为我最初将积分设置为 10

在我的其他代码围绕字典及其价值观之前,我从来没有遇到过这个问题。但我从各个角度尝试解决这个问题,我觉得自己像个白痴。

2 个答案:

答案 0 :(得分:1)

每次循环评估时,您都会重新实例化您的字典。将您的初始stats声明移出您的循环(在它之前),这样这些值就不会连续重置。

请注意,您还要测试while points > 0而不是points <= 10,因为您从10开始递减而不是从0开始递增。你也可以只针对sum(stats.values())测试你的最大分数值,以确保你获得当前的总和而不是使用计数器变量,尽管在这种情况下它并不重要。

答案 1 :(得分:1)

因为您在stats循环中将{"Strength": 0,"Dexterity": 0,"Constitution": 0,"Intelligence": 0,"Wisdom": 0,"Charisma": 0}设置为while,所以没有任何变化。每次循环时,它都会重新创建stats,使其看起来永远不会改变。

解决此问题的方法是在输入stats = {"Strength": 0,"Dexterity": 0,"Constitution": 0,"Intelligence": 0,"Wisdom": 0,"Charisma": 0}循环之前放置while行。