2010-07-16 2 views
0

Хорошо, так что ответ, вероятно, очевиден, но я не знаю, как правильно заставить программу реагировать по-разному в зависимости от того, что пользователь вводит.Проблема с синтаксисом - if/else и raw_input()

octopusList = {"first": ["red", "white"], 
      "second": ["green", "blue", "red"], 
      "third": ["green", "blue", "red"]} 
squidList = ["first", "second", "third"] 

squid = random.choice(squidList) 
octopus = random.choice(octopusList[squid]) 
списков и кальмар и осьминог генерировать случайную фразу
resp = raw_input("Please Type Something") 
while resp !=1: 
    if resp == octopusList: 
     print squid + " " +octopus 
     break 
    elif resp == "Something": 
     print "Elephants are pachyderms" 
     break 
    else: 
     print "That's another text to think about." 
     break 

print "One More Comment" 
Это должно напечатать кальмар + «» + осьминог, если пользователь вводит что-нибудь на octopusList. Или, если пользователь вводит «Что-то», он должен вернуть фразу «Слоны - это пахидермы». Если пользователь вводит что-нибудь esle, он должен вернуть фразу «Это другой текст, о котором нужно подумать». Наконец, он должен напечатать «Еще один комментарий». То, что он на самом деле делает, это пропустить пролив на другое, независимо от того, что пользователь вводит.

Он прольет к Else, так что я кое-что не получаю от if и elif ... спасибо за любой свет, который вы можете сиять на этом.

+0

Измените свой вопрос и отформатируйте весь свой код. Трудно понять, что это должно делать, тем более что это Python. – GreenMatt

+0

Даже после отступов, я все еще не совсем уверен, что программа должна делать ... –

ответ

1

Сопоставляя строку в словарь ничего полезного не делают (это всегда будет ложным, IIRC) - вы, возможно, хотите «if resp in octopusList»? Я не уверен, почему второе условие никогда не попадает, возможно, вы набрали «что-то» вместо «Что-то»?

+0

прямо на оба счета, спасибо – Tehto

0

Вы сравниваете строку (resp) со списком. Вы хотите что-то вроде этого:

if resp == octopus: # not octopusList! 
    # do something 
else: 
    # ... 
3

Редактировать: После того, как Нед Батчельдер отформатировал код, я перечитал вопрос и посмотрю, как я предполагаю, что вы хотите сделать, было не совсем правильным ... хотя он все еще не на 100% ясен, если вы пытаетесь цикл или нет. Если вы хотите только пройти один раз, нет необходимости в цикле while, просто удалите его. Что касается теста ввода с значениями в dictionary, называемом octopusList, вы можете использовать in test, но это только тесты против ключей dict. Если вы ищете значения в записях dict, вам нужно либо сделать octopusList истинным списком (например, octopusList = ['red', 'white', 'blue', 'green'] и выполнить тест (например, if resp in octopusList:), либо немного усложниться при разборе dict.

Оригинальный ответ: Похоже, вы пытаетесь создать цикл, чтобы получить пользовательский ввод и печать строку в ответ на этот вход Если это так, я вижу несколько вещей, нуждающихся в коррекции:.

  • Вам не нужны инструкции break, поскольку они вызывают цикл для выхода.
  • Как говорили другие, сравнение ввода с octopusList не будет работать, просто ком сравните его с произвольно генерируемым значением осьминога.
  • Если вы собираетесь использовать 1 в качестве входного входа, вам необходимо протестировать входные данные в форме строки ('1'), а не в виде целого (1).
  • Если моя догадка правильна о том, что вы делаете, raw_input должен находиться внутри цикла.

Это не помечено домашней работой, поэтому я разместил код, чтобы сделать то, что, как я думаю, вам нужно ниже. Если вы хотите, чтобы значение осьминога оставалось неизвестным пользователю, просто удалите строку print octopus, но я положил ее, чтобы вы знали, какое значение ввести для тестирования.

import random 
octopusList = {"first": ["red", "white"], 
      "second": ["green", "blue", "red"], 
      "third": ["green", "blue", "red"]} 
squidList = ["first", "second", "third"] 

squid = random.choice(squidList) 
octopus = random.choice(octopusList[squid]) 
print octopus # So we know what value to use - necessary for testing at least 
resp = '' 
while resp != '1': 
    resp = raw_input("Please Type Something: ") 
    if resp == octopus: 
     print squid + " " +octopus 
    elif resp == "Something": 
     print "Elephants are pachyderms" 
    else: 
     print "That's another text to think about." 
    print "One More Comment" 

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

Смежные вопросы