2014-03-13 20 views
0

任務:我如何提高我的認爲Python代碼,鍛鍊7.4 EVAL和循環

編寫一個叫做eval_loop是反覆提示用戶功能,需要所產生的輸入,並使用eval()計算它,並打印結果。

它應該繼續,直到用戶輸入'done',然後返回它評估的最後一個表達式的值。

我的代碼:

import math 

def eval_loop(m,n,i): 
    n = raw_input('I am the calculator and please type: ') 
    m = raw_input('enter done if you would like to quit! ') 
    i = 0 
    while (m!='done' and i>=0): 
     print eval(n) 
     eval_loop(m,n,i) 
     i += 1 
     break; 

eval_loop('','1+2',0) 

我的代碼不能返回最後一個表達式計算它的價值!

+1

我希望這本書也告訴你,除了這個玩具程序之外,你絕對不應該使用eval來實現任何東西......見http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html或https:// stackoverflow .com/questions/3513292/python-make-eval-safe或其他多個SO問題討論此問題。 TL; DR版本:這是一個安全風險,很慢,您失去了可讀性/ IDE支持(突出顯示,重構)等等,等等。 – l4mpi

+0

謝謝!這只是一本適合初學者甚至業餘愛好者的書。 –

回答

1

三種意見:

  1. 使用這個遞歸意味着你最終將打擊系統遞歸限制,迭代可能是一個更好的辦法;(你被要求參加一個!)
  2. 如果你想returneval的結果,你需要指定它;和
  3. 我不知道什麼i適合您的代碼,但它似乎沒有任何幫助。

有了這些想法,簡要概述:

def eval_loop(): 
    result = None 
    while True: 
     ui = raw_input("Enter a command (or 'done' to quit): ") 
     if ui.lower() == "done": 
      break 
     result = eval(ui) 
     print result 
    return result 

對於一個更強大的功能,可以考慮在try包裝eval和處理從它而產生理智的任何錯誤。