我对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 :(得分:1)
您从回溯消息中得到了非常好的提示:ZeroDivisionError: division by zero
。你师的分母是什么? listLength
。从listLength
计算的位置是什么?使用本地范围为函数创建的空列表(myList
)的长度。您需要将作为参数传递的列表的长度改为。
你的平均计算还有另一个问题:你的分子也不正确。修复它留给你锻炼。
同样,回溯消息为您提供了一个非常好的提示:AttributeError: 'list' object has no attribute 'median'
。 common sequence operations和List-type operations都不提供median
方法。您需要将其定义为函数或构建一个类,将其定义为类方法并将List作为内部存储。
或者,您可以避免重新发明轮子 - 可能是最恐怖的回答 - 并使用标准库中的statistics
模块。