什么是" eval()"函数在Python中做什么?

时间:2016-01-02 16:30:49

标签: python

请考虑代码:

printf

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的重点是什么?它的目的是什么?

2 个答案:

答案 0 :(得分:4)

在您的代码中,answer变量是用户为响应您对input的请求而输入的内容。这是他们回答你的问题的答案。 result变量是随机生成的问题的正确答案。您要做的是检查他们的answer是否与预期的result相同(这就是我在回答您之前的问题时调用该变量correct_answer的原因)。

使用eval的原因是 eval 更改了一个以字符串形式传递的表达式。例如,如果你通过" 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是一个代码语句。 sequence做的是将字符串转换为可以作为代码执行的语句。

答案 1 :(得分:1)

Documentation说:

  

eval(表达式,全局变量=无,本地人=无)

     

get_vert_distance参数被解析并作为Python进行评估   表达

简而言之,传递给expression的字符串参数作为普通的python指令执行。例如:

eval()

hello_printer = 'print("hello")' eval(hello_printer) 打印到屏幕上,就像执行hello指令时一样。 Python解释器只是尝试并执行传递给print("hello")函数的字符串参数。

你的eval函数的参数是eval,它被细分为:

  • str(number1)+oper+str(number2)转换为字符串格式
  • 将运算符连接到number1,这是字符串形式
  • number1转换为字符串形式,并将其连接到上一个

e.g。如果number2number110oper,而+number2,则会生成字符串20,传递给'10+20'函数并评估为eval。然后,评估值存储在变量10+20中。最后将result与用户提供的答案进行比较。如果匹配,result将存储在答案中,否则为True,然后检查该字段以输出“正确”或“不正确”