我有一个程序,它接受输入并将其添加到列表中,并吐出所述列表的平均值。我要创建它,以便您可以键入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
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!")
错误很简单,您将字符串作为输入,说出是否要退出循环,即菜单,然后在行中>]
listy.append(int(currentnum))
您正在将其强制转换为整数。这就是为什么您会收到上述错误。在无需更改大量代码的情况下,您只需要移动几行即可完成该工作。只需移动
listy.append(int(currentnum)) listaverage(listy)
在try块下,如果是数字,则根据需要执行。还要在主程序之外定义函数listaverage(listy),除非您希望它充当生成器。