2015-04-19 3 views
-2

В приведенном ниже коде строки prod = eval("beg1" "operation" "beg2") не работает! Если бы кто-нибудь мог мне помочь, я бы с благодарностью оценил это!Использование eval для выполнения математической операции

def quiz(): 

    global tally 

    tally = 0 
    questions = 10 

    name = input("What is your surname name") 

    form = input("What is your form") 




    for i in range(questions): 
      ops = ['+', '-', '*', '/'] 
      operation = random.choice(ops) 
      beg1 = random.randint(1, 10) 
      beg2 = random.randint(1, 10) 
      prod = eval("beg1" "operation" "beg2") 
      print (prod) 

      begAns = input("What is " + str(beg1)+ operation + str(beg2) + "? ") 

      if int(begAns) == prod: 
       print("That's right -- well done.\n") 
       tally += 1 
      else: 
       print("No, I'm afraid the answer is ",prod) 



    print ("Your score was", tally, "out of 10") 
+5

Что «не работает» означает? Пожалуйста, добавьте более подробную информацию. – Cristik

+0

Чего вы ждете от этого? – jonrsharpe

ответ

2

Как было отмечено, использование конкатенации с + поставить значение переменной operation в строку, которая получает eval изд:

prod = eval(str(beg1) + operation + str(beg2)) 

В противном случае программа пытается eval строковую "operation" (это как, например, ввести 1operation4 в интерпретатор python).

Тем не менее, я бы рекомендовал вам не использовать eval. Вместо этого составьте список функций оператора (от operator модуля), а затем применить его к двум случайным Интс:

import operator 
op_names = {operator.add:'+', operator.sub:'-', operator.mul:'*', 
      operator.floordiv:'/'} 
ops = list(op_names.keys()) 
operation = random.choice(ops) 
beg1 = random.randint(1, 10) 
beg2 = random.randint(1, 10) 
prod = operation(beg1, beg2) 
print('What is {0} {1} {2}?'.format(beg1, op_names[operation], beg2)) 
+0

Большое спасибо за этот dddsnn !! Очень полезно! Единственная проблема, с которой я сейчас сталкиваюсь, - это фактически отобразить оператора в заявлении на печать, который запрашивает у пользователя вопрос.begAns = input («Что есть» + str (beg1) + (операция) + str (beg2) + «?») – David

+0

Большое спасибо за этот dddsnn !! Очень полезно! Единственная проблема, с которой я сейчас сталкиваюсь, - это фактически отображение оператора в заявлении печати, задающего пользователю вопрос. begAns = input («Что есть» + str (beg1) + (str (операция)) + str (beg2) + «?») Я хочу отображать +/* или-, а не что такое 5 <встроенная функция mul > 2? – David

+0

Правильно, забыл об этом. Я бы сказал, что лучше всего было бы превращать словарные имена имен в функции. Я отредактирую его в ответ. – dddsnn

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