Попытка оценить пользовательский ввод и использовать его как переменную в Python - PullRequest
1 голос
/ 29 февраля 2012

Я новичок в Python и вообще в любом кодировании, и у меня возникли проблемы с написанным мною кодом:

loop = 0
hellosentence = "You have selected the hello sentence"
questionsentence = "You have selected the question sentence"

usrinput  = raw_input("Which test would you like to bring up? ")

print eval(usrinput)+sentence

end = raw_input("Press any key to quit...")

Я пытаюсь запустить код с учетом этого.

иметь несколько имен с предложением в конце.

Запрос, какое "предложение" пользователь хочет выдвинуть

Как только пользователь набрал в предложении, он оценивает то, что он напечатал, скажем "привет" и объединяет его с «предложением», чтобы сделать переменную «hellosentence», таким образом вызывая строку переменной.

Мне 14 лет, и я действительно пытаюсь научиться понимать этот язык, поэтому, если кто-нибудь знает, что я могу сделать, чтобы исправить эту ошибку, я был бы очень признателен.

Ответы [ 3 ]

3 голосов
/ 29 февраля 2012

eval собирается взять указанную вами строку и оценить ее.В этом случае он принимает введенную строку ввода. Судя по определенным вами переменным, вы хотите взять ввод и добавить к нему sentence, поэтому, если они введут «привет», вы вернете значениеhellosentence.

Прямой способ исправить это - дать eval правильный ввод:

print eval(usrinput+'sentence')

Это, вероятно, решает вашу проблему, но это не очень хороший способ сделать это,eval - неподходящий инструмент для работы;восстановление после ошибок будет проблемой, и если бы это был рабочий код, вы бы открыли большую дыру для того, кто хотел превратить вашу программу в вирус.

Надлежащим инструментом является словарь, с которымВы можете использовать вход для поиска правильного вывода.

selection = {'hello': hellosentence, 'question': questionsentence}
print selection[usrinput]
1 голос
/ 29 февраля 2012

Прежде всего, ваш

loop = 0 

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

print eval(usrinput)+sentence 

Я вижу, что вы пытаетесь достичь, печатая hellosentence, как в переменной. Однако это не работает так. Использование eval () ничего не делает для вас, поэтому представьте, что вы пишете

print usrinput+sentence

Это не вывело бы значение любой переменной, имеющей то же начало, что и usrinput, и конец предложения. Это напечатало бы значение usrinput и затем напечатало бы значение предложения. Поскольку у вас нет переменной предложения, вы получаете ошибку, потому что значение предложения не существует.

Скажите, что пользователь ввел "привет", когда его попросят ввести. Строка печати не будет печатать значение hellosentence, но будет печатать «hello», а затем возникнет ошибка, потому что предложение не существует. По сути, вы не можете относиться к этому как к чисто английскому, потому что у вас может быть что-то вроде этого:

pretzel = "apple"
print pretzel

Это напечатает слово «яблоко», а не «крендель». Если вы этого не понимаете, я настоятельно рекомендую вам прочитать о переменных и присваиваниях.

Вы должны проверить значение usrinput.

if usrinput = "hello":
    print hellosentence

Ваша переменная конца в последней строке вашей программы ничего не делает, так как вы просто присваиваете значение end. Попробуйте проверить значение end, как мы сделали с usrinput.

Похоже, вы неправильно понимаете, как на самом деле выполняется программа. Я бы порекомендовал прочитать о переменных и присваивании.

0 голосов
/ 29 февраля 2012

это должно сделать работу - все, кроме небезопасных частей eval;))

input = raw_input # remove this if you already use Python 3...

def my_func():
    for i in range(10):
        pass
    return "How are you today?"

sentences = {}
sentences["hello"] = "Hello world..."
sentences["question"] = my_func

usrinput = input("Which test...?")

try:
    obj = sentences[usrinput]
    if hasattr(obj, '__call__'):
        print(obj())
    else:
        print(obj)
except KeyError:
    print("Invalid input...")
finally:
    input("Press ENTER to quit...")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...