1

我目前正在用 python 进行简单的文本冒险。基本上我希望randint选择1或2然后分配给right_wire,然后raw_input成为wire_choice,然后匹配2以提供所需的结果。我相信你们无论如何都能弄清楚我想在这里做什么。我离这里很近还是真的很远?谢谢!

    right_wire = randint(1, 2)

    wrong_wire = 0

    if right_wire == 1:
        wrong_wire = 2
    elif right_wire == 2:
        wrong_wire = 1
    else:
        print "ERROR"

    while True:
        print "Which wire do you pull?"
        print
        print "1. The red one."
        print "2. The blue one."
        print
        wire_choice = raw_input('*>>*')

        if wire_choice == 1 and right_wire == 1:
            print "**BOMB DEFUSED**"
            return 'engineering2'
        elif wire_choice == 2 and right_wire == 2:
            print "**BOMB DEFUSED**"
            return 'engineering2'
        elif wire_choice == 1 and right_wire == 2:
            print "**FAILED**"
            return 'death'
        elif wire_choice == 2 and right_wire ==1:
            print "**FAILED**"
            return 'death'
        else:
            print no_understand
4

2 回答 2

5

为什么不只是:

while True:
    print "Which wire do you pull?"
    print
    print "1. The red one."
    print "2. The blue one."
    print
    raw_input('*>>*')
    if randint(0, 1):
        print "**BOMB DEFUSED**"
        return 'engineering2'
    else:
        print "**FAILED**"
        return 'death'

/!\ raw_input 返回一个字符串,并且您将返回值与一个整数进行比较,它永远不会匹配:

$ python
Python 2.6.6 (r266:84292, Dec 26 2010, 22:31:48) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 1 == "1"
False
于 2013-02-03T17:28:48.693 回答
4

Python 是一种“强类型”语言。它不会自动将文本(字符串)转换为数字(整数)。它也不会将数字randint(0, 1)转换为布尔值。但是您可以告诉它进行转换,例如str(right_write)int(wire_choice)

将数字转换为布尔值有点不同。Python 对象有一个方法nonzero,Python 在需要时隐式调用该方法,以确定该对象是被认为是假的还是真的。布尔值是 的子类int,因此它们具有整数值。您仍然可以选择显式转换为bool(randint(0, 1))或使用类似randint(0, 1) == 0.

我没有确切解释如何编写您的解决方案,因为我确信您可以从那里获取它,并且您可以自行选择您喜欢如何表达您的代码。

PS我想链接到有关非布尔对象的布尔值的特殊情况的更多信息。特别是,Python 特别允许我们测试非布尔值的真值。我们被建议这样做,或者至少,谷歌指南建议测试非布尔值的真值

于 2013-02-03T17:30:30.153 回答