如何改进Think Python的代码,练习7.4 eval和loop

时间:2014-03-13 09:02:34

标签: python

任务:

  

编写一个名为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)

我的代码无法返回它评估的最后一个表达式的值!

4 个答案:

答案 0 :(得分:1)

三条评论:

  1. 使用递归意味着你最终会达到系统递归限制,迭代可能是一种更好的方法(也就是你被要求采取的方法!);
  2. 如果您想return eval的结果,则需要指定它;和
  3. 我不知道代码中的i是什么,但它似乎没有任何帮助。
  4. 考虑到这些,简要概述:

    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
    

    要获得更强大的功能,请考虑将eval包装在try中并合理处理由此产生的任何错误。

答案 1 :(得分:1)

import math
def eval_loop():
    while True:
        x=input('Enter the expression to evaluate: ')
        if x=='done':
            break
        else:
            y=eval(x)
            print(y)
    print(y)

eval_loop()

答案 2 :(得分:1)

这是我想出的代码。首先,它使用If,else条件语句来理解代码流。然后使用while循环将其编写

    import math
    #using the eval function
    """eval("") takes a string as a variable and evaluates it
    Using (If,else) Conditionals"""

    def eval_(n):
        m=int(n)
        print("\nInput n = ",m)
        x=eval('\nmath.pow(m,2)')
        print("\nEvaluated value is = ", x)
    def run():
        n= input("\nEnter the value of n = ") 
        if n=='done' or n=='Done':
            print("\nexiting program")
            return
        else:
             eval_(n)
        run() # recalling the function to create a loop
    run()

现在使用While循环执行相同的操作

    "using eval("") function using while loop"

    def eval_1():
        while True:
            n=input("\nenter the value of n = ") #takes a str as input
            if n=="done" or n=="Done": #using string to break the loop
                break
            m=int(n) # Since we're using eval to peform a math function.
            print("\n\nInput n = ",m) 
            x=eval('\nmath.pow(m,2)') #Using m to perform the math
            print("\nEvaluated value is " ,x)        
    eval_1()

答案 3 :(得分:0)

此方法将首先对用户输入的内容运行 eval,然后将该输入添加到名为 b 的新变量中。 当用户输入单词“done”时,它将打印新创建的变量 b - 完全按照练习的要求。

def eval_loop():
    while True:
        a = input("enter a:\n")
        if a == "done":
            print(eval(b)) # if "done" is entered, this line will print variable "b" (see comment below)
            break
        print(eval(a))
        b = a # this adds the last evaluated to a new variable "b"
eval_loop()