我想制作游戏的一部分,你只有一颗子弹。但是你有两次机会使用它。所以,如果你第一次使用它,你第二次不能使用它,反之亦然。
ammo_amount = 1
ammo = raw_input ("Shoot?")
if ammo == 'y':
print ("you shot")
ammo_amount-1
else:
print("You didn't shoot")
ammo_2 = raw_input ("do you want to shoot again?")
if ammo_2 == 'y':
if ammo_amount == '1':
print ("you can shoot again")
if ammo_amount == '0':
print ("you can't shoot again")
if ammo_2 == 'n':
print ("You didn't shoot")
答案 0 :(得分:1)
解释Martijn在回答比较字符串和整数的过程中谈到的内容,
我们在计算中处理数据的方式取决于变量的类型。此类型确定您可以对变量执行哪些操作,哪些操作无法执行。您可以通过调用type()
函数找到变量的类型:
type( 5 ) # <type 'int'>
type( '5' ) # <type 'str'>
type( 5.0 ) # <type 'float'>
num = 5
type( num ) # <type 'int'>
了解5
,'5'
和5.0
的类型有何不同?我们可以用这些不同的文字做不同的事情。例如,我们可以获得'5'
的长度,因为它是一个字符串,这是一个序列,但我们无法获得5
的长度。
len( '5' ) # 1
len( 5 ) # TypeError: object of type 'int' has no len()
当您比较两个不兼容类型的对象时,解释器并不总是按预期执行。请考虑以下代码:
num = 5
num == 5 # True
num == '5' # False, comparing int to str
为什么第二次比较是假的?那么口译员不知道我们想做什么。为字符串和整数实现==
比较的方式不会比较字符串的整数值,因为字符串可能包含非整数数据。就翻译人员所知,我们可能会尝试这样做:
num == 'clearly not a number'
正如Martijn所说,您的问题是您要将整数(ammo_amount
)与字符串('1'
或'0'
)进行比较。
希望这能为你的错误提供更多信息!
答案 1 :(得分:0)
您正在使用整数比较字符串:
ammo_amount = 1
# ...
if ammo_amount == '1':
#
if ammo_amount == '0':
这些测试永远不会成立,字符串永远不会等于整数,即使它们包含的字符在阅读文本时可以被解释为相同的数字;与另一个数字进行比较:
if ammo_amount == 1:
和
if ammo_amount == 0:
你也从未改变ammo_amount
;以下表达式生成一个新数字:
ammo_amount-1
但你忽略了这个新号码。将其存储在ammo_amount
变量中:
ammo_amount = ammo_amount - 1