请考虑代码:
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
的重点是什么?它的目的是什么?
答案 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)
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。如果number2
为number1
,10
为oper
,而+
为number2
,则会生成字符串20
,传递给'10+20'
函数并评估为eval
。然后,评估值存储在变量10+20
中。最后将result
与用户提供的答案进行比较。如果匹配,result
将存储在答案中,否则为True
,然后检查该字段以输出“正确”或“不正确”