2016-03-15 91 views
0

我一直在乱搞这个代码长于必要的时间。我正在改变一个字典条目的价值取决于一个人的选择。我错过了什么吗?更改字典值

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 

我开始与统计[statInc]作为如果/ elif的通过名称指定字符串。我无法改变数值,但点数会相应减少。我知道这是因为我本来设置为。

我从来没有跟我说围绕着词典和他们的价值观其他代码之前有这个问题。但我试过从各个角度去解决这个问题,我觉得自己像个白痴。

回答

1

没有什么变化,因为您在while循环内设置了stats{"Strength": 0,"Dexterity": 0,"Constitution": 0,"Intelligence": 0,"Wisdom": 0,"Charisma": 0}。每当它循环时,它将重新创建stats,使其看起来像它从未改变过。

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

+0

非常感谢。这是我第一次单独处理while循环。这有助于。 – hirijirikoa

+0

非常欢迎! –

1

你重新实例化你的字典每次循环计算时间。将您的初始stats声明从循环中移出(之前),以便这些值不会持续重置。

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