2015-10-22 55 views
-3

我得到一个错误:类型错误:不支持的操作类型为 - :在Python“海峡”和“廉政” 3

TypeError: unsupported operand type(s) for -: 'str' and 'int' 

在其他问题提供答案似乎不工作。此代码引发错误:

print("You have taken %s damage!" % int(v) - int(w) + int(armour)) 

而且完整的代码周围地区:

z = random.randint(1, 6) 
print("The die rolled %s." % z) 
w = z + y 
print("Your total is %s." % w) 
time.sleep(1) 
print("The enemy's total Strength is %s." % eStrength) 
time.sleep(1) 
z = random.randint(1, 6) 
print("The enemy's die rolled %s." % z) 
v = z + eStrength 
print("The enemy's total is %s." % v) 
time.sleep(1) 
if w < v: 
     print("The enemy has won this attack!") 
     print("You have taken %s damage!" % int(v) - int(w) + int(armour)) 
     oldHp = hp 
     hp = int(oldHp) - int(v) - int(w) + int(armour) 
     print("Your Health is now %s" % hp) 
     if hp == 0 or hp < 0: 
       time.sleep(1) 
       print("You have died. GAME OVER.") 
       exit 
+1

如果答案之一以下解决您的问题,您应该接受它(单击复选标记旁边合适的答案)。这有两件事。它让每个人都知道你的问题已经得到解决,让你满意,并且它可以帮助你帮助你。 [见这里](http://meta.stackexchange.com/a/5235)的完整说明。 –

回答

2

的问题是与你的旧风格的打印格式的使用。 %。该生产线print("You have taken %s damage!" % int(v) - int(w) + int(armour))int(v)更换%s然后试图减去int(w)

的修补程序(如果你想使用旧样式格式,你不应该)是不具有
print("You have taken %s damage!" % (int(v) - int(w) + int(armour)))

这使得试图格式化之前计算公式取代
print("You have taken %s damage!" % int(v) - int(w) + int(armour))

话虽如此,做正确的办法是更换
print("You have taken %s damage!" % int(v) - int(w) + int(armour))

print("You have taken {0} damage!".format(int(v) - int(w) + int(armour)))

+0

啊,我们走了。工作正常,谢谢! – armymutt22

+0

@ armymutt22很高兴我能帮到你。请考虑使用新的样式字符串格式。它更强大,更易于使用。 –

0

%操作不再推荐,他们有begun the deprecation process as of Python 3.0。你会想在这样的结构来使用format()

print("The die rolled {}.".format(z)) 

的问题是precendence之一,但:

>>> print("Test %s" % (int(1) - int(2))) 
Test -1 

通过使用格式,这将变得更加清晰(优先级是隐参数传递的,而不是使用一个内嵌运营商):

print("Test {}".format(int(1) - int(2))) 

你可以做很多事format(),如:

print("The armor deflected {} out of {} damage!".format(armor_value, damage)) 

或者:

print("The armor deflected {armor} out of {damage} damage!" 
     .format(damage=damage, armor=armor_value)) 

或者:

print("{1}, {2} and {3} died!".format(char1.name, char2.name, char3.name)) 
+0

不是吗?这对我来说可以。 – armymutt22

+0

它绝对仍然使用,只是不推荐。 –

+0

好的,是的,它是可用的,但不是最好的做法了。 –

0

它为我,如果我加入括号:

print("You have taken %s damage!" % (v - w + z)) 

我改变了“装甲”变量只是int,因为我没有。

相关问题