[英]What does the “eval()” function do in 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
的意義是什么,目的是什么?
在您的代碼中, answer
變量是用戶響應您的input
請求而input
。 這是他們對您問題的回答。 result
變量是您隨機生成的問題的正確答案。 您要做的就是檢查他們的answer
是否與預期result
相同(這就是為什么我在上一個問題的答案中correct_answer
變量稱為correct_answer
)。
使用eval
的原因是它評估一個作為字符串傳遞的表達式。 因此,例如,如果將“ 2 * 3”傳遞給eval
,它將返回6。
eval
的文檔在這里總是一個不錯的起點。
破壞線給您帶來麻煩:
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
作用是將字符串轉換為可以作為代碼執行的語句。
文檔說:
eval(表達式,全局變量=無,本地變量=無)
expression
參數被解析並評估為Python表達式
簡而言之,傳遞給eval()
的字符串參數按照常規的python指令執行。 例如:
hello_printer = 'print("hello")'
eval(hello_printer)
在執行print("hello")
指令時會在屏幕上打印出hello
。 Python解釋器僅嘗試並執行傳遞給eval
函數的字符串參數。
eval函數的參數為str(number1)+oper+str(number2)
,其分解為:
number1
轉換為字符串形式 number1
number2
轉換為字符串形式並將其連接到前一個 例如,如果number1
是10
, oper
是+
,而number2
是20
,那么這將使字符串'10+20'
傳遞給eval
函數並評估為10+20
。 然后將評估值存儲在變量result
。 最后將result
與用戶提供的答案進行比較。 如果它們匹配,則將True
存儲在答案中,否則將存儲False
,然后對其進行檢查以提供“正確”或“不正確”的輸出
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.