[英]Two-dimensional lists for Python
函數avgavg()
將一個列表作為輸入,該列表的項目是三個數字的列表。 每個三位數列表代表特定學生為課程收到的三個等級。 例如,這是一個四個學生班級的輸入列表(您永遠不知道您將需要處理多少學生):
[[95, 92, 86], [66, 75, 54], [89, 72, 100], [34, 0, 0]]
函數avgavg()
應該在屏幕上打印兩行。 第一行將包含一個包含每個學生平均成績的列表。 第二行只包含一個數字:平均班級,定義為所有學生平均成績的平均值。
給出以上數據的輸出:
[91.0, 65.0, 87.0, 11.333333333334]
63.5833333333
(這是我的任務問題。我試圖以一些不同的方式開始這個,我似乎無法得到我的輸入連接到任何東西。我將如何解決這個問題?這是我最近的嘗試:COLS = int(輸入( “輸入學生人數:”))ROWS = int(輸入(“輸入每個學生的成績數:”))
def avgavg():
student_grades = []
for c in range(COLS):
student = input("Enter the number of the student: ")
grades = []
for r in range (ROWS):
grade = eval(input("Enter the grades for the student: "))
grades.append(grade)
student_grades[student] = grades
print(grades)
要獲得列表的平均值,比如說[1, 2, 3]
,你可以這樣做:
a = [1, 2, 3]
print sum(a)/float(len(a))
希望這足以讓你開始。 我會讓你弄明白具體細節。 此外,一旦你充分證明你已經嘗試過自己的工作並且無法按預期工作,我將只發布完整的解決方案。
現在你已經展示了一些努力:
a = [[95, 92, 86], [66, 75, 54], [89, 72, 100], [34, 0, 0]]
b = [sum(i)/float(len(i)) for i in a]
>>> print b
[91.0, 65.0, 87.0, 11.333333333333334]
print sum(b)/float(len(b))
63.5833333333
這是詳細說明sshashank124的答案並添加用戶輸入功能。 我還添加了一些錯誤處理代碼(while循環),因此如果用戶輸入字符串而不是成績,它將再次詢問:
請記住,請勿在提交時使用此確切代碼。 這可能是您班級中的完整性違規行為。 嘗試從頭開始重寫代碼並告訴我哪些方法不順利
你在代碼中做錯了,就是你自己把兩個for循環。 它們需要嵌套。
error = "Non integer input. Try again>> " #Error message
def isfloat(value): #Functon to check if a number can be a grade
try:
float(value)
return True
except ValueError:
return False
n = raw_input("Enter number of students>> ") #Number of students
while not n.isdigit():
n = raw_input(error)
g = raw_input("\nEnter number of grades per student>> ") #Number of Grades per student
while not g.isdigit():
g = raw_input(error)
grades = [] #The two dimensional list
print
#Receiving input from the user
for a in range(int(n)):
temp = []
print "Student %i" % (a+1)
for b in range(int(g)):
grade = raw_input("Grade %i>> " % (b+1))
while not isfloat(grade):
grade = raw_input(error)
temp.append(float(grade))
grades.append(temp)
print
students = [sum(stud)/float(len(stud)) for stud in grades]
#Returning output
print students
print sum(students)/float(len(students))
我意識到這是一項任務,在現實世界中我會毫不猶豫地使用numpy:
> grades = [[95, 92, 86], [66, 75, 54], [89, 72, 100], [34, 0, 0]]
> np.average(grades, axis=1)
array([ 91. , 65. , 87. , 11.33333333])
> np.average(grades)
63.583333333333336
這是工作代碼:
lists = eval(raw_input('Enter the class data as a list: '))
def avgavg(lists):
avg = [float(sum(sub))/float(len(sub)) for sub in lists]
everything = [item for sub in lists for item in sub]
allavg = float(sum(everything))/float(len(everything))
return avg, allavg
avg, allavg = avgavg(lists)
print avg
print allavg
這運行如下:
bash-3.2$ python lists.py
Enter the class data as a list: [[95, 92, 86], [66, 75, 54], [89, 72, 100], [34, 0, 0]]
[91.0, 65.0, 87.0, 11.333333333333334]
63.5833333333
bash-3.2$
此代碼使用eval(raw_input(...))
獲取輸入以從字符串中刪除引號。 然后,我們用列表解析得到每個人的平均值,然后使用列表解析,使所有列出清單列表一個列表(對不起,所有的名單 :))。 然后我們將它返回,最后打印出來。
不要猶豫,不要在下面提出任何問題!
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.