ValueError:我的程序中的int()和if语句中的if无效字面量除外

问题描述 投票:0回答:2

我有一个程序,它接受输入并将其添加到列表中,并吐出所述列表的平均值。我要创建它,以便您可以键入MENU,它将停止programy()并让您退出或重新启动programy()。一切正常,直到您键入MENU(全部大写)为止。谢谢大家! :)还是python的新手。

from functools import reduce

def programy():
    running = True

    print("I output the average of a list that you add files to.")
    listy = []

    while running == True:
        def listaverage(givenlist):
            print(sum(listy) / len(listy))

        currentnum = input("Please type a number to add to the list: ")

        try:
            val = int(currentnum)
        except ValueError:
            if str(currentnum) == "MENU":
                running = False
            else:
                print("Not a number!")
                continue

        listy.append(int(currentnum))
        listaverage(listy)

    answer = input("Please type either: EXIT or RESTART")

    if str(answer) == "RESTART":
        running = True
    if answer == "EXIT":
        exit

programy()
Traceback (most recent call last):
  File "C:\Users\hullb\OneDrive\Desktop\average_via_input.py", line 34, in <module>
    programy()
  File "C:\Users\hullb\OneDrive\Desktop\average_via_input.py", line 24, in programy
    listy.append(int(currentnum))
ValueError: invalid literal for int() with base 10: 'MENU
python int literals valueerror except
2个回答
0
投票
if str(currentnum) == "MENU":
    running = False

while条件设置为false并停止下一次迭代的运行,但是当前迭代尚未结束,因此在int(currentnum)中,您尝试将"MENU"转换为int。

使用isdigit()代替检查值

if currentnum.isdigit():
    listy.append(int(currentnum))
    listaverage(listy)
else:
    if str(currentnum) == "MENU":
        running = False
    else:
        print("Not a number!")

0
投票

错误很简单,您将字符串作为输入,说出是否要退出循环,即菜单,然后在行中>]

listy.append(int(currentnum))

您正在将其强制转换为整数。这就是为什么您会收到上述错误。在无需更改大量代码的情况下,您只需要移动几行即可完成该工作。只需移动

    listy.append(int(currentnum))
    listaverage(listy)

在try块下,如果是数字,则根据需要执行。还要在主程序之外定义函数listaverage(listy),除非您希望它充当生成器。

© www.soinside.com 2019 - 2024. All rights reserved.