Python 3.4-附加到列表中的数字被认为是非类型的

Python 3.4-附加到列表中的数字被认为是非类型的,python,python-3.4,Python,Python 3.4,我正在制作一个程序,用户在其中输入一些数字,然后他们可以选择计算数字的平均值、中值、模式或范围 这是我的密码 import statistics def number(): yn = 'y' while yn == 'y': x = input("Enter a number.") numbers = [] numbers.append(x) yn = input('Enter another one? y/n')

我正在制作一个程序,用户在其中输入一些数字,然后他们可以选择计算数字的平均值、中值、模式或范围

这是我的密码

import statistics

def number():
    yn = 'y'
    while yn == 'y':
        x = input("Enter a number.")
        numbers = []
        numbers.append(x)
        yn = input('Enter another one? y/n')
        if yn == 'n':
            break
            return numbers
def findaverage(x):
    x = sum(x)-len(x)
    print(x)
def findrange(x):
    x = max(x) - min(x)
    print(x)
def findmode(x):
    x = statistics.mode(x)
    print(x)
def findmedian(x):
    x = statistics.median(x)
    print(x)
def main():
    numbers = number()
    x = ''
    while x != "1" or x != "2" or x != "3" or x != "4":
        x = str(input("What would you like to do?\n1.Average\n2.Range\n3.Mode\n4.Median"))
        if x == "1":
            findaverage(numbers)
        elif x == "2":
            findrange(numbers)
        elif x == "3":
            findmode(numbers)
        elif x == "4":
            findmedian(numbers)


main()
当我运行程序时,它会给我以下回溯:

Enter a number.2
Enter another one? y/ny
Enter a number.4
Enter another one? y/ny
Enter a number.5
Enter another one? y/nn
What would you like to do?
1.Average
2.Range
3.Mode
4.Median1

File "C:\file.py", line 45, in <module>
  File , line 45, in <module>
    main()
    main()
  File , line 36, in main
  File , line 36, in main
    findaverage(numbers)
    findaverage(numbers)
  File , line 19, in findaverage
    x = sum(x)-len(x)
TypeError: 'NoneType' object is not iterable
输入一个数字。2
输入另一个?y/纽约
输入一个数字
输入另一个?y/纽约
输入一个数字
输入另一个?是/否
你想做什么?
1.平均
2.射程
3.模式
4.1
文件“C:\File.py”,第45行,在
文件,第45行,在
main()
main()
文件,第36行,主
文件,第36行,主
findaverage(数字)
findaverage(数字)
文件,第19行,findaverage
x=总和(x)-长度(x)
TypeError:“非类型”对象不可编辑
我不确定是什么导致了这个问题


非常感谢您的帮助,谢谢

问题在于并非所有通过
number()
的代码路径都有明确的
return
语句。当没有显式返回时,
None
将隐式返回。

问题在于,并非通过
number()
的所有代码路径都有显式
return
语句。当没有显式返回时,
None
隐式返回。

问题是:

  • 每次都要重置数字列表(
    numbers=[]
    )。把它移出循环
  • 在你返回列表之前,你正在打破循环。完全删除
    break
    语句
  • 您从
    输入中获取字符串,但您的函数需要整数。使其
    x=int(输入(“输入一个数字”)
    • 问题是:

      • 每次都要重置数字列表(
        numbers=[]
        )。把它移出循环
      • 在你返回列表之前,你正在打破循环。完全删除
        break
        语句
      • 您从
        输入中获取字符串,但您的函数需要整数。使其
        x=int(输入(“输入一个数字”)

      我将
      numbers=[]
      移出循环,现在它介于
      yn='y'
      之间,而yn='y':
      但它仍然这样做啊。我懂了。现在删除
      break
      语句
      x=int(输入(“输入一个数字”)
      我把
      numbers=[]
      移出了循环,现在它介于
      yn='y'
      之间,而yn='y':
      但它仍然这样做啊。我懂了。现在删除
      break
      语句
      x=int(输入(“输入一个数字”)
      我已经编辑了这个问题,并将其放回了导致您所问问题的代码中。否则你的问题就没有任何意义了。请随意问另一个问题来解决你的其他问题。我已将此问题编辑回导致你所问问题的代码中。否则你的问题就没有意义了。请随便问另一个问题来解决你的其他问题。