我的程序工作直到它到达“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
答案 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语句。