2013-03-24 2 views
0
def monster(name): 

    with open('yvd.txt') as fd: 
     input=[x.strip('|').split('|') for x in fd.readlines()] 
     to_search={x[0]:x for x in input} 
     print('\n'.join(to_search[name])) 
monster_name=input('Input monster to search: ') 
monster(monster_name) 

Хорошо, поэтому я пытаюсь вызвать функцию monster с помощью ввода пользователем. input просит пользователя ввести имя монстра для поиска. Затем функция monster выполняет поиск введенного монстра и распечатывает его. Но как мне получить, чтобы строка вызывалась в функции?Попытка вызова функции через пользовательский ввод

Пример вывода:

Input monster to search: Boogie Man 
    Traceback (most recent call last): 
    File "C:\Users\Trevor\Desktop\yvd_read.py", line 8, in <module> 
    monster(monster_name) 
    TypeError: 'str' object is not callable 
>>> 
+2

Что вы подразумеваете под «заставить его иметь строку, подлежащую вызову в функции»? – yehe

+0

Не понимаю, что вы имеете в виду. Может быть, вы должны более четко описать свой вопрос. Лучше, если вы можете дать образец вашего ввода и вывода. – zhangyangyu

+0

monster_name будет именем монстра, так что это будет строка, я хочу, чтобы это имя было аргументом для функции монстра. Но я получаю сообщение об ошибке «объект str не может быть вызван» – user1985351

ответ

0

Проблема является метод input. Вместо этого вы должны использовать raw_input. input попытаться оценить строку, но raw_input просто помещает строку, навязанную пользователем в переменной.

+0

Я использую 3.3, поэтому raw_input больше не используется – user1985351

+0

Ошибка говорит, что вы используете python 2.x, вы уверены, что используете python 3.x? – diegueus9

+0

Довольно уверен. Говорит 3,3,0 везде. – user1985351

0

Вам нужно заменить встроенную функцию raw_input на python, чтобы читать значения вместо ввода. Пожалуйста, обратитесь к документации input function here. Вот обновленный код:

def monster(name): 

with open('yvd.txt') as fd: 
    user_input=[x.strip('|').split('|') for x in fd.readlines()] 
    to_search={x[0]:x for x in input} 
    print('\n'.join(to_search[name])) 

monster_name=raw_input('Input monster to search: ') 
monster(monster_name) 
+0

Я не могу. Я использую 3.3, а raw_input больше не используется в версии 3.3. Другой парень думал то же самое. – user1985351

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