2016-01-02 2 views
-1

Пожалуйста, обратите внимание на код:Что делает функция eval() в Python?

import random 
name = input("Welcome to this Arithmetic quiz,please enter your name:") 

number1 = random.randint(20,50) 
number2 = random.randint(1,20) 
oper = random.choice('+-*') 

result = eval(str(number1)+oper+str(number2)) 
answer = (int(input('What is:'+str(number1)+oper+str(number2)+'=')) == result) 

if answer == True: 
    print('Correct!') 
else: 
    print('Incorrect!') 

В чем разница между answer и result переменных и какова точка eval, что это цель?

+2

Пожалуйста, измените заголовок на что-то значимое и исправьте свой отступ. Пожалуйста, укажите, какая часть документации по используемым функциям вы не поняли. – timgeb

+0

Изменено, и я определенно прочитал последнюю строку. – PythonNooby

+1

@PythonNooby, это Python 2 или Python 3? Для первого, 'input()' уже включает неявный 'eval()'. –

ответ

4

В вашем коде переменная answer - это то, что пользователь вводит в ответ на ваш запрос для input. Это их ответ на ваш вопрос. Переменная result является правильным ответом на ваш случайный вопрос. То, что вы хотите сделать, это проверить, являются ли их answer такими же, как ожидалось result (вот почему я назвал эту переменную correct_answer в ответе на ваш предыдущий вопрос).

Причина использования eval в том, что он eval uates выражение, которое передается как строка. Так, например, если вы пройдете «2 * 3» до eval, он вернется. 6.

Документация для eval - это here, которая всегда является хорошим местом для начала.

Разбивка линии, которая дает вам неприятности:

result = eval(str(number1)+oper+str(number2)) 

Перерывы вниз для примера, где number1 составляет 4 и number2 7:

result = eval("4*7") 

"4 * 7" тогда преобразуется в eval из строки «4 * 7» в исходный код 4*7, который затем рассчитывается как 28.

Я думаю, что трудности, с которыми вы сталкиваетесь, видят, что существует разница между «4 * 7», которая является строкой, и 4*7, которая является кодовым выражением. То, что eval делает, преобразует строки в операторы, которые затем могут быть выполнены как код.

+0

Благодарим вас за ответ, но как строка 6 даст нам реальный ответ, как работает линия 6? – PythonNooby

+0

Спасибо, ответ должен быть целым числом, потому что я использую только умножение, добавление и вычитание. Также я изменил случайные числа, чтобы они не пошли отрицательно. (Предполагается, что это для начальной школы) . Я сказал, строка 6 извините, вы объяснили, строка 7 .... – PythonNooby

+0

А, это имеет смысл. Также я внесла поправки в свой ответ. –

1

Documentation говорит:

Eval (выражение, глобалы = нет, местные жители = нет)

expression аргумент анализируется и оценивается как выражение Python

Короче говоря, аргумент строки, переданный в eval(), выполняется как обычные инструкции python. Например:

hello_printer = 'print("hello")' 
eval(hello_printer) 

печатает hello на экране, как это делается при выполнении print("hello") инструкции. Python-интерпретатор просто пытается и выполняет строковый аргумент, переданный функции eval.

Аргумент к вашей функции Eval является str(number1)+oper+str(number2), которая разбивается на:

  • конвертировать number1 в виде строки
  • CONCAT оператора number1 который является строкой формы
  • преобразовать number2 в строку форме и представить его по сравнению с предыдущими

eg если number1 является 10, oper является + и number2 является 20, то это делает строку '10+20', которая передается в eval функции и оцененную в 10+20. Затем оцениваемое значение сохраняется в переменной result. Наконец, result сравнивается с ответом, предоставленным пользователем. Если они совпадают, True сохраняется в ответе, в противном случае False, который затем проверяется, чтобы дать результат «правильный» или «неверный»

+0

Итак, eval() бесполезен в пути? – PythonNooby

+0

Совсем нет. Используя eval(), вы можете выполнить динамически созданный код python. Прочтите документацию, чтобы узнать больше об eval() –

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