分析eval(input)时出现意外的EOF(

2024-05-15 00:00:14 发布

您现在位置:Python中文网/ 问答频道 /正文

作为python的新手,我需要创建一个函数,如果超出范围的数字是 输入后,打印一条错误消息并继续请求输入,但如果没有输入任何内容,则必须返回用户输入的所有数字的列表以及这些数字的平均值。在

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(input))造成的,但是我不确定如何解决这个问题。在

^{pr2}$

编辑:现在接收值错误:基为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

编辑2:

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

Tags: andofaninputif数字integerbetween
2条回答

同样,就像凯文说的,不要使用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()

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

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())

输出:

^{pr2}$

最重要的是,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())

相关问题 更多 >

    热门问题