Проблема с совпадением пользовательских вариантов в 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