我正在尝试制作基于文本的RPG游戏。我才刚刚开始,但是它跳过了我的选择,并打印了Else语句。
def room_1():
print("start of game")
print("choice 1")
print("choice 2")
choice = input()
if choice is 1:
print("choice 1")
elif choice is 2:
print("choice 2")
else:
print("you died")
它跳过所有内容,并转到“您死了”部分。
答案 0 :(得分:0)
input()
返回一个字符串,而不是整数,您应该使用==
进行比较,而不是is
,该字符串用于标识(相同的 exact 对象)
>>> '1' == 1
False
>>> int('1') == 1
True
因此使用:
choice = int(input())
if choice == 1:
print("choice 1")
elif choice == 2:
print("choice 2")
else:
print("you died")
您还可以将其与字符串进行比较:
choice = input()
if choice == '1':
print("choice 1")
elif choice == '2':
print("choice 2")
else:
print("you died")
或者,如果您喜欢整数,请清除输入内容:
def get_int(prompt):
while True:
try:
return int(input(prompt))
except ValueError:
print('Enter an integer.')
choice = get_int('Choice? ')
if choice == 1:
print("choice 1")
elif choice == 2:
print("choice 2")
else:
print("you died")
输出(3次运行):
Choice? 1
choice 1
Choice? abc
Enter an integer.
Choice? 2
choice 2
Choice? 3
you died
is
在这里给您带来麻烦。它比较对象的身份。两个对象可以具有相同的值,但不能具有相同的标识。
>>> x = 999
>>> y = 999
>>> x is y
False
>>> x == y
True
>>> x = 5
>>> y = 5
>>> x is y
True
>>> x == y
True
常见的小数字在CPython中进行缓存和重用。其他Python版本可能有所不同。 999未缓存,但我的Python版本上为5。
答案 1 :(得分:0)
在python中,is
比较 identity ,而==
比较 quality 。
说a = b
,在这种情况下,a
实际上与b
完全相同,我们将其设置为b
,而不仅仅是等于{{ 1}}。
如果我们说b
和a = 2
,那么b = 1+1
不是,它们不是相同的存在,而是一个等于,它们的值是相同的。
请注意,根据您的系统,可能会缓存较小的数字,因此此示例可能不起作用。
我希望这有助于弄清为什么您的答案需要在其is
语句中使用==
而不是is
。
答案 2 :(得分:-1)
它跳过了您的选择,因为您从输入中选择的是字符串,并且将其与整数进行比较。 将您的代码更改为
if choice is '1':