Python中的菜单列表

时间:2017-02-13 21:16:40

标签: python list mean median

我对Python非常新,所以我提前道歉!我正在尝试创建一个列表,用户可以选择添加数字,显示均值,显示中位数,按顺序打印列表,按相反顺序打印列表,或退出。我以为我是在正确的轨道上,但我不能让它运行。任何人都可以帮助我吗?

def main():
    myList = [ ]
    addOne(myList)
    choice = displayMenu()
    while choice != '6':
        if choice == '1':
            addOne(myList)
        elif choice == '2':
            mean(myList)
        elif choice == '3':
            median(myList)
        elif choice == '4':
             print(myList)
        elif choice == '5':
            print(myList)
        choice = displayMenu()

    print ("\nThanks for playing!\n\n")

def displayMenu():
    myChoice = '0'
    while myChoice != '1' and myChoice != '2' \
              and myChoice != '3' \
              and myChoice != '4' and myChoice != '5':
        print("""\n\nPlease choose
                1. Add a number to the list/array
                2. Display the mean
                3. Display the median
                4. Print the list/array to the screen
                5. Print the list/array in reverse order
                6. Quit
                """)
        myChoice = input("Enter option---> ")
        if myChoice != '1' and myChoice != '2' and \
           myChoice != '3' and myChoice != '4' and myChoice != '5':
            print("Invalid option. Please select again.")

    return myChoice

#This should make sure that the user puts in a correct input
def getNum():
    num = -1
    while num < 0:
        num = int(input("\n\nEnter a non-negative integer: "))
        if num < 0:
            print("Invalid value. Please re-enter.")

    return num

#This is to take care of number one on the list: Add number
def addOne(theList):
    while True:
        try:
            num = (int(input("Give me a number:")))
            num = int(num)
            if num < 0:
                raise exception
            print("Thank you!")
            break
        except:
            print("Invalid. Try again...")
        theList.append(num)


#This should take care of the second on the list: Mean       
def mean(theList):
    myList = []
    listSum = sum(myList)
    listLength = len(myList)
    listMean = listSum / listLength
    print("The mean is", listMean)

#This will take care of number three on the list: Median
def median(theList):
    myList = []
    return myList.median(theList.array(myList))
    print("The median is", listMedian)


#This will take care of the fourth thing on the list: Print the list 
def sort(theList):
    theList.sort()
    print(theList) 

#This will take care of the fifth thing on the list
def reversesort(theList):
    theList.sort(reverse=True)
    print(theList)


main()  

当我尝试选择选项2时,它会给我:

Traceback (most recent call last):
  File "/Users/Gunter/Documents/CS 110/List and Traversal and Exception        Handling.py", line 94, in <module>
    main()
  File "/Users/Gunter/Documents/CS 110/List and Traversal and Exception   Handling.py", line 12, in main
    mean(myList)
  File "/Users/Gunter/Documents/CS 110/List and Traversal and Exception   Handling.py", line 73, in mean
    listMean = listSum / listLength
ZeroDivisionError: division by zero

当我尝试运行第三个选项时,它会给我:

Traceback (most recent call last):
  File "/Users/Gunter/Documents/CS 110/List and Traversal and Exception  Handling.py", line 94, in <module>
    main()
  File "/Users/Gunter/Documents/CS 110/List and Traversal and Exception Handling.py", line 14, in main
    median(myList)
  File "/Users/Gunter/Documents/CS 110/List and Traversal and Exception Handling.py", line 79, in median
    return myList.median(theList.array(myList))
AttributeError: 'list' object has no attribute 'median'

1 个答案:

答案 0 :(得分:1)

平均值

的问题

您从回溯消息中得到了非常好的提示:ZeroDivisionError: division by zero。你师的分母是什么? listLength。从listLength计算的位置是什么?使用本地范围为函数创建的空列表(myList)的长度。您需要将作为参数传递的列表的长度改为。

你的平均计算还有另一个问题:你的分子也不正确。修复它留给你锻炼。

中位数

的问题

同样,回溯消息为您提供了一个非常好的提示:AttributeError: 'list' object has no attribute 'median'common sequence operationsList-type operations都不提供median方法。您需要将其定义为函数或构建一个类,将其定义为类方法并将List作为内部存储。

或者,您可以避免重新发明轮子 - 可能是最恐怖的回答 - 并使用标准库中的statistics模块。