Проблема с совпадением пользовательских вариантов в Text-adventure.

В настоящее время я работаю над простым текстовым приключением на 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

2 ответа

Решение

Python является "строго типизированным" языком. Он не превращает текст (строку) в число (целое число) автоматически. Это не превращает число randint(0, 1) в логическое значение либо. Но вы можете сказать это, чтобы сделать преобразования, такие как str(right_write) или же int(wire_choice),

Преобразование числа в логическое значение немного отличается. У объектов Python есть метод nonzero который Python вызывает при необходимости, неявно, чтобы определить, следует ли считать объект ложным или истинным. И логические значения являются подклассом int, поэтому они имеют целочисленные значения. У вас все еще есть возможность явного преобразования bool(randint(0, 1)) или используя выражение вроде randint(0, 1) == 0,

Я не объяснил, как именно кодировать ваше решение, потому что я уверен, что вы можете взять его оттуда и потому, что вы можете сделать свой собственный выбор того, как вы предпочитаете выражать свой код.

PS Я хотел бы дать ссылку на дополнительную информацию об особом случае логического значения небулевых объектов. В частности, Python специально позволяет нам проверять значение истинности не-логических значений. И мы советуем сделать это, или, по крайней мере, руководство Google рекомендует проверить истинное значение не-логических значений.

Почему не просто

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
Другие вопросы по тегам