簡體   English   中英

“ eval()”函數在Python中做什么?

[英]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!')

answerresult變量之間有什么區別, 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轉換為字符串形式並將其連接到前一個

例如,如果number110oper+ ,而number220 ,那么這將使字符串'10+20'傳遞給eval函數並評估為10+20 然后將評估值存儲在變量result 最后將result與用戶提供的答案進行比較。 如果它們匹配,則將True存儲在答案中,否則將存儲False ,然后對其進行檢查以提供“正確”或“不正確”的輸出

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM