2016-03-15 21 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())來測試你的最大分值,以確保你得到的是當前總和而不是使用計數器變量,儘管在這種情況下它並不重要。