Python 3.4 - 附加到列表的数字被认为是 NoneType

Python 3.4 - Numbers appended to a list are considered NoneType

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

这是我的代码。

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

我不确定是什么导致了这个问题。

感谢您的帮助,谢谢!

问题是并非所有通过 number() 的代码路径都有明确的 return 语句。当没有显式 return 时,None 会隐式 returned。

问题是:

  • 您每次都在重置数字列表 (numbers = [])。将其移出循环。
  • 您要在返回列表之前跳出循环。完全删除 break 语句。
  • 您正在从 input 获取字符串,但您的函数需要整数。使 x = int(input("Enter a number.")).