解析eval时出现意外的EOF(输入(

时间:2015-11-17 19:24:10

标签: python list python-3.x if-statement while-loop

python的新手,像往常一样需要帮助,我必须创建一个函数,如果范围之外的数字是,则要求用户输入10到50之间的int。 输入,打印错误信息并继续询问输入,但如果没有输入,则必须返回用户输入的所有数字的列表以及这些数字的平均值。

Example input/output:
myAvg()
Enter an int: 34
Enter an int: 43
Enter an int: 23
Numbers entered: 34 42 23
Average of list: 33

到目前为止,这是我的代码,尚未完成以使其返回列表。我在解析时得到了一个意想不到的EOF,如果我没有弄错,那是因为eval(输入))但是我不确定如何解决这个问题。

   def myAvg():
    lst = []

    while True:
        n = eval(input('Enter an int between 10 and 50: '))
        if n < 10:
                 print('Please enter ant int between 10 and 50')
        elif n > 50:
                 print('Please enter an int between 10 and 50')
        elif n == '':
            return lst
        lst.append(n)

编辑:现在收到ValueError:基数为10的int()的无效文字:'' 试图只使用我们在课堂上讨论的内容

def myAvg():
    lst = []

    while True:
        n = input('Enter an int between 10 and 50: ')
        if int(n) < 10 or int(n) > 50:
            print("Please enter an integer between 10 and 50")
        elif n == '':
            lst.append(int(n))
            return lst

EDIT2:

def myAvg():
lst = []


while True:
    n = input("Enter an integer between 10 and 50: ")

    if n == '':
        print('Numbers entered:')
        return lst
    else:
        ntemp = int(n)

    if ntemp < 10 or ntemp > 50:
            print("Please enter a value between 10 and 50.")
    else:
        lst.append(ntemp)

    print('Average of numbers:')
    return sum(lst) / len(lst)

输出的内容:

Enter an integer between 10 and 50: 45
Average of numbers:
45.0

2 个答案:

答案 0 :(得分:0)

这是你的代码,它试图将一个数字转换为整数,当提供一个空输入时,它捕获抛出的ValueError并返回列表。我还将两个条件n < 10n > 50合并为一个。

def myAvg():
    lst = []

    while True:
        try:
            n = int(input("Enter a number: "))

            if n < 10 or n > 50:
                print("Please enter a number between 10 and 50")
            else:
                lst.append(n)
        except ValueError:
            print(lst)
            return sum(lst) / len(lst)

print(myAvg())

输出:

C:\Users\jermenkoo\Desktop>test.py
Enter a number: 10
Enter a number: 10
Enter a number: 1
Please enter a number between 10 and 50
Enter a number:
10.0

最重要的是,eval()是危险的,不应该被使用,因为它可以执行任意输入,例如__import__('os').system(<your command here>)。如果命令为rm,您可能会发现所有文件都已删除。

其他可能性是检查提供的输入是否等于'',例如:

def myAvg():
    lst = []

    while True:
        n = input("Enter a number: ")

        if n == '':
            print(lst)
            return sum(lst) / len(lst)
        else:
            temp = int(n)

            if temp < 10 or temp > 50:
                print("Please enter a value between 10 and 50.")
            else:
                lst.append(temp)

print(myAvg())

计算列表的平均值是一项简单的任务 - sum(lst) / len(lst)sum(lst)返回列表中数字的总和,len(lst)返回元素数。

由于您似乎使用的是Python 2.x,因此修改了代码:

def myAvg():
    lst = []

    while True:
        n = raw_input("Enter a number: ")

        if n == '':
            return 1.0 * sum(lst) / len(lst)
        else:
            temp = int(n)

            if temp < 10 or temp > 50:
                print("Please enter a value between 10 and 50.")
            else:
                lst.append(temp)

print(myAvg())

答案 1 :(得分:0)

再次,像凯文所说,不要使用eval

def myAvg():
    lst = []
    while True:
        n = raw_input('Enter an int between 10 and 50: ')
        if n=="":
            print lst
            break
        if 10<int(n)<50:
            lst.append(int(n))

myAvg()