我该如何修复我的Python代码?

时间:2014-01-08 14:43:26

标签: python string if-statement

我的程序工作直到它到达“if”部分,然后它就停止工作了。有任何想法吗?

import random
skill = str()
skill2 = str()
strength1 = str()
strength2 = str()
final = str()
strength_modifier = str()
skill_modifier = str()
dice = int()

strength1 = input("Please enter your strength level for character 1: ")
print(strength1)
skill1 = input("Please enter your skill level for character 2: ")
print(skill1)

strength2 = input("Please enter your strength level for character 2: ")
print(strength2)
skill2 = input("Please enter your strength level for skill 2: ")
print(skill2)

if strength1 > strength2:
    strength_modifier =(int(strength1)-int(strength2))
    print(strength_modifier)

if strength2 > strength1:
    strength_modifier = (int(strength2)-int(strength1))
    print(strength_modifier)

if skill1 > skill2:
    skill_modifier = (int(skill1)-int(skill2))
    print(skill_modifier)

if skill2 > skill1:
    skill_modifier = (int(skill2)-int(skill1))
    print(skill_modifier)

有人可以解决它并将其发布在这里请:L

2 个答案:

答案 0 :(得分:8)

我猜变量实际上是字符串,你试图将两个字符串与“>”进行比较。首先尝试将字符串转换为int。

答案 1 :(得分:0)

当您将变量定义为str()时,您将它们分配给空字符串(尝试在命令shell或IDLE中运行str()并查看其返回值)。

然后,使用input()函数将变量重新定义为某些字符串,并在if语句中将字符串与这些比较运算符进行比较!它在比较字符串时所做的是检查字符串的第一个字符!因此,以'b'开头的字符串大于以'a'开头的字符串,以及'c'> 'b'> 'a'依此类推。 当字符串是数字时,如'1234412',它检查第一个数字的绝对值,所以'1231432'> '2'将返回False,因为2大于1。

你想要做的是,在要求输入时,说变量应该等于用户写的数字。像这样:

skill1 = int(input("Type your skill... :"))

但是如果用户没有输入数字,这可能会引发错误,因此您可能想要捕获错误,并仍然要求输入有效信息!这样做:

while True:
    try:
        skill1 = int(input("bla bla : "))
        break
    except ValueError:
        print("Type in a NUMBER")

您可能还想加入成对工作的if语句!您可以通过两种方式执行此操作:Else语句或Elif语句...如果所有其他If-Elif语句的计算结果为False,则执行Else语句;如果在同一个块中它上面的所有If-Elif语句被评估为False,则执行Elif语句。

if #some condition#:
    #some code
elif #some condition#: <== Only executes if the one above didn't execute
    #some code
elif #some condition#: <== Only executes if the ones above didn't execute
    #some code
else: # executes only if none of the above statements evaluated True.

当使用像这样的If-Elif-Else块时,你总是知道一个,并且只有一个代码部分会执行,因为当一个条件评估为True时,它会输入该语句的缩进代码,当它完成时,它会跳过所有其他条件!像这样的代码将以下列方式工作:

a = 10
if a < 20:
    print("Var 'a' is smaller than 20")
elif a < 30:
    print("Var 'a' is smaller than 30")

虽然a&lt; 30是True,但它只会调用第一个打印,因为当解释器输入第一个if时,它会自动跳过所有其他elif和else语句。