在 python 的 2D 矩阵(二维)中找到不同列表的最小值、最大值和平均值
finding the minimum, maximum and average of different list in a 2D matrix (two-dimensional) in python
我试图找到矩阵之后(或之内)每个学生的最小值、最大值和平均值。我如何在循环迭代中访问每个学生的分数列表?我从在函数 (findlowest()) 中找到最小值开始,但无法弄清楚如何一次只获得 1 个学生的考试成绩。
studentExam = 5
minMaxScore = 5
def main():
global studentName, studentExam, score, scoreList, examScoreMaxList, min, max
def ValidateUser(score):
while score < 0 or score > 100:
score = float(input("Invalid input, please try again"))
return score
def getStudentInfo():
studentName = int(input("enter the number of student: "))
# studentExam = int(input("how many exam scores: "))
# Initialize matrix
matrix = []
# For user input
for i in range(studentName): # A for loop for row entries
scoreList = []
scoreList.append(input("enter name of students " + str(i + 1) + ": "))
for j in range(studentExam): # A for loop for column entries
score = float(input("enter exam " + str(j + 1) + ": "))
score = ValidateUser(score)
scoreList.append(score)
matrix.append(scoreList)
print(matrix)
# for printing
for i in range(studentName):
for j in range(studentExam+1):
print(matrix[i][j], end=" ")
print()
getStudentInfo()
def findLowest():
minlist = []
min = minlist[0]
for i in studentExam[0:5]:
if i < min:
min = i
print("the minimum number is: ", min)
findLowest()
我希望代码显示类似于以下内容:
Mike H: min score - 78
max score - 94
avg score - 85
Sarah G: min score - 78
max score - 94
avg score - 85
这应该可以做到。您只需要一个嵌套的 for 循环。
scores = [["Mike", 100, 98, 43, 56, 43], ["John", 95, 32, 79, 75, 67]]
for arr in scores:
#arr = ["Mike", 100, 98, 43, 56, 43] or ["John", 95, 32, 79, 75, 67]
min = None
max = None
sum = 0
studentName = None
for i in arr:
if type(i) != str:
if not min or i < min:
min = i
if not max or i > max:
max = i
sum += i
else:
studentName = i
avg = sum/5
print(studentName + ": \t min score - " + str(min))
print("\t max score - " + str(max))
print("\t avg score - " + str(avg))
print()
在列表中混合不同类型的数据可能会造成混淆。我将它们分开 - 学生姓名是字典中的键,分数列表是值。
此外,关于示例代码的前半部分,一般的最佳做法是避免使用全局变量,常量值除外。
def getStudentInfo():
studentName = int(input("enter the number of student: "))
# studentExam = int(input("how many exam scores: "))
# Initialize matrix
matrix = {}
# For user input
for i in range(studentName): # A for loop for row entries
name = input("enter name of students " + str(i + 1) + ": ")
matrix[name] = []
for j in range(studentExam): # A for loop for column entries
score = float(input("enter exam " + str(j + 1) + ": "))
score = ValidateUser(score)
matrix[name].append(score)
print(matrix)
return matrix
data = getStudentInfo()
def findInfo(data, name = None):
def findInfoByName(name):
if name in data:
scores = data[name]
minScore = min(scores)
maxScore = max(scores)
avgScore = sum(scores) / len(scores)
print(f"{name}:\tmin score - {minScore}")
print(f"\tmax score - {maxScore}")
print(f"\tavg score - {avgScore}")
if name is None:
for name in data:
findInfoByName(name)
else:
findInfoByName(name)
findInfo(data)
我试图找到矩阵之后(或之内)每个学生的最小值、最大值和平均值。我如何在循环迭代中访问每个学生的分数列表?我从在函数 (findlowest()) 中找到最小值开始,但无法弄清楚如何一次只获得 1 个学生的考试成绩。
studentExam = 5
minMaxScore = 5
def main():
global studentName, studentExam, score, scoreList, examScoreMaxList, min, max
def ValidateUser(score):
while score < 0 or score > 100:
score = float(input("Invalid input, please try again"))
return score
def getStudentInfo():
studentName = int(input("enter the number of student: "))
# studentExam = int(input("how many exam scores: "))
# Initialize matrix
matrix = []
# For user input
for i in range(studentName): # A for loop for row entries
scoreList = []
scoreList.append(input("enter name of students " + str(i + 1) + ": "))
for j in range(studentExam): # A for loop for column entries
score = float(input("enter exam " + str(j + 1) + ": "))
score = ValidateUser(score)
scoreList.append(score)
matrix.append(scoreList)
print(matrix)
# for printing
for i in range(studentName):
for j in range(studentExam+1):
print(matrix[i][j], end=" ")
print()
getStudentInfo()
def findLowest():
minlist = []
min = minlist[0]
for i in studentExam[0:5]:
if i < min:
min = i
print("the minimum number is: ", min)
findLowest()
我希望代码显示类似于以下内容:
Mike H: min score - 78
max score - 94
avg score - 85
Sarah G: min score - 78
max score - 94
avg score - 85
这应该可以做到。您只需要一个嵌套的 for 循环。
scores = [["Mike", 100, 98, 43, 56, 43], ["John", 95, 32, 79, 75, 67]]
for arr in scores:
#arr = ["Mike", 100, 98, 43, 56, 43] or ["John", 95, 32, 79, 75, 67]
min = None
max = None
sum = 0
studentName = None
for i in arr:
if type(i) != str:
if not min or i < min:
min = i
if not max or i > max:
max = i
sum += i
else:
studentName = i
avg = sum/5
print(studentName + ": \t min score - " + str(min))
print("\t max score - " + str(max))
print("\t avg score - " + str(avg))
print()
在列表中混合不同类型的数据可能会造成混淆。我将它们分开 - 学生姓名是字典中的键,分数列表是值。
此外,关于示例代码的前半部分,一般的最佳做法是避免使用全局变量,常量值除外。
def getStudentInfo():
studentName = int(input("enter the number of student: "))
# studentExam = int(input("how many exam scores: "))
# Initialize matrix
matrix = {}
# For user input
for i in range(studentName): # A for loop for row entries
name = input("enter name of students " + str(i + 1) + ": ")
matrix[name] = []
for j in range(studentExam): # A for loop for column entries
score = float(input("enter exam " + str(j + 1) + ": "))
score = ValidateUser(score)
matrix[name].append(score)
print(matrix)
return matrix
data = getStudentInfo()
def findInfo(data, name = None):
def findInfoByName(name):
if name in data:
scores = data[name]
minScore = min(scores)
maxScore = max(scores)
avgScore = sum(scores) / len(scores)
print(f"{name}:\tmin score - {minScore}")
print(f"\tmax score - {maxScore}")
print(f"\tavg score - {avgScore}")
if name is None:
for name in data:
findInfoByName(name)
else:
findInfoByName(name)
findInfo(data)