if语句似乎在for循环

时间:2016-09-02 16:09:50

标签: python

noobie在for循环中遇到if语句有问题

def abilityBuy():

totalPoints = 28 

abilities = {
    "Str":0,
    "Con":0,
    "Dex":0,
    "Int":0,
    "Wis":0,
    "Cha":0 
    }

for i,v in abilities.items():
    print "You have %s points." % totalPoints
    text = "Enter stat for %s: " % i
    stat = raw_input(text)
    if stat == 18: 
        totalPoints = totalPoints - 16 
    elif stat == 17:
            totalPoints = totalPoints - 13
    elif stat == 16:
            totalPoints = totalPoints - 10 
    elif stat == 15:
            totalPoints = totalPoints - 8 
    elif stat == 14:
            totalPoints = totalPoints - 6 
    elif stat == 13:
            totalPoints = totalPoints - 5 
    elif stat == 12:
            totalPoints = totalPoints - 4 
    elif stat == 11:
            totalPoints = totalPoints - 3 
    elif stat == 10:
            totalPoints = totalPoints - 2 
    elif stat == 9:
            totalPoints = totalPoints - 1 
    elif stat == 8:
            totalPoints = totalPoints - 0

    abilities[i] = stat 

print abilities

abilityBuy()

当跑步时,它假设推断出一个统计数字所需的点数 例如:如果stat等于18 将totalPoints减少16 这将给予总点数为12点的余数,但是当运行时,if语句似乎被忽略并且跳过它们,添加到字典并循环并表示totalPoints仍然等于28

我不知道它是否是造成问题或其他内容的缩进,我还有其他for循环if if语句并且它们按照它们的假设工作,但是这个没有似乎做了我要求的事情

对任何建议开放

感谢

Lyncius

4 个答案:

答案 0 :(得分:1)

这是因为你的stat = raw_input正在返回一个str值。 stat是一个str,在你的if语句中你试图将它与一个整数进行比较。 str == int永远不会成功。要么将stat转换为int,要么将它与str进行比较......

stat = int(stat)

if stat == "18":

两者都可以解决

答案 1 :(得分:1)

问题在于raw_input。它返回一个字符串,你只是将它与int进行比较。

stat = int(raw_input(text))

会解决这个问题。

答案 2 :(得分:0)

首先想到的是:raw_input()返回一个字符串,但你的if语句将stat与整数进行比较,因此它们都不会评估为true。 一个简单的解决方案是转换它:int(stat),但是您需要添加一个检查,以便用户输入超出您测试的非数字或值(即,如果用户输入19或'a')。 / p>

答案 3 :(得分:0)

改变:

这 stat = raw_input(text)

要 stat = int(raw_inpur(text))

问题解决了