2017-02-13 41 views
0

我对Python非常陌生,所以我提前致歉!我正在尝试创建一个列表,用户可以选择添加数字,显示平均数,显示中位数,按顺序打印列表,按相反顺序打印列表或退出。我以为我在正确的轨道上,但我不能让它运行。谁能帮我?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' 
+0

你需要比“我无法让它运行”更具体。 –

+0

我试过复制/粘贴这个,还有一些未定义的东西。你有什么问题?这应该是一个独立的例子吗? – roganjosh

+0

如果我尝试选择计算平均值或计算平均值的选项,它会爆炸。如果我尝试选择该选项,则按顺序或反向打印列表,只显示一个空集。 –

回答

1

问题,平均

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

你的平均值计算还存在另一个问题:你的分子不正确的分裂。修复它是作为练习留给你的。

问题与中位数

再次,回溯消息给你一个很好的提示:AttributeError: 'list' object has no attribute 'median'common sequence operationsList-type operations都没有提供median方法。您需要将其定义为函数,或者构建一个将其定义为类方法的类,并将List作为内部存储。或者,您可以避免重新发明车轮 - 可能是所有Pythonic答案最多的 - 并使用标准库中的statistics模块。