尝试制作基于文本的游戏,但是我的if语句无法打印

时间:2019-01-09 08:20:41

标签: python

我正在尝试制作基于文本的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")

它跳过所有内容,并转到“您死了”部分。

3 个答案:

答案 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}}。

如果我们说ba = 2,那么b = 1+1不是,它们不是相同的存在,而是一个等于,它们的值是相同的。

请注意,根据您的系统,可能会缓存较小的数字,因此此示例可能不起作用。

我希望这有助于弄清为什么您的答案需要在其is语句中使用==而不是is

答案 2 :(得分:-1)

它跳过了您的选择,因为您从输入中选择的是字符串,并且将其与整数进行比较。 将您的代码更改为

if choice is '1':