我想编写一个程序,从文件中读取3个主题的标记,并显示每个主题的最高分,并带有相应的名称。到目前为止,我能够编写程序以获得最高分,但我无法开发它以显示相应的名称。
这是我的代码:
def mymax(m):
m.sort()
mx=m[-1]
return mx
s1=s2=s3=[]
rfile=open("marks.txt","r")
record=rfile.readline()
while record!="":
data=record.strip("\n").split(",")
x=int(data[1])
y=int(data[2])
z=int(data[3])
s1=s1+[x]
s2=s2+[y]
s3=s3+[z]
record=rfile.readline()
print("Highest marks of subject 1:",mymax(s1))
print("Highest marks of subject 2:",mymax(s2))
print("Highest marks of subject 3:",mymax(s3))
rfile.close()
我想要的输出是:
主题1的最高分:标记,名称
主题2的最高分:标记,名称
主题3的最高分:标记,名称
答案 0 :(得分:0)
根据您的文件格式,您可以更轻松地使用csv
模块:
import csv
with open('marks.txt') as f:
subjects = 1, 2, 3 # specify subject columns
reader = csv.reader(f)
rows = list(reader) # e.g. row: ['name_x', '3', '4', '5']
# for each subject, zip the grades with their corresponding name
named_grades = [[(int(r[i]), r[0]) for r in rows] for i in subjects]
for i, s in enumerate(subjects):
# feed max the (grade, name) pairs for each subject
print("Highest marks of subject {}: {}, {}".format(s, *max(named_grades[i])))
对于像
这样的文件name1,2,7,1
name2,1,3,4
name3,6,6,2
name4,5,3,4
name5,3,2,5
name6,2,3,4
输出将是:
Highest marks of subject 1: 6, name3
Highest marks of subject 2: 7, name1
Highest marks of subject 3: 5, name5
答案 1 :(得分:0)
另一种方法是使用python词典而不是代码中的列表。s1=s2=s3=[]
。
s1=s2=s3=[]
是一个逻辑错误,因为所有列表都指向同一个列表。因此,所有3个列表的列表中都有相同的值/元素。
字典元素而不仅仅是一个int ,这里
x=int(data[1])
y=int(data[2])
z=int(data[3])
因此它基本上是每个主题的字典,其名称为键(假设名称是唯一的),并将相应主题标记为值。
因此,必须在mymax
函数中进行小的更改。您可以导入operator.itemgetter
以根据指定的列找到字典的最大值。Sorting dictionary,finding Max value in a dictionary
因此,修改后的代码将是
import operator
def mymax(m):
sorted_m = sorted(m.items(), key=operator.itemgetter(1))
return sorted_m[-1]
s1={}
s2={}
s3={}
rfile=open("marks.txt","r")
record=rfile.readline()
while record!="":
data=record.strip("\n").split(",")
'''x=int(data[1])
y=int(data[2])
z=int(data[3])''' #not needed
s1[data[0]]=int(data[1])
s2[data[0]]=int(data[2])
s3[data[0]]=int(data[3])
record=rfile.readline()
print("Highest marks of subject 1:",mymax(s1))
print("Highest marks of subject 2:",mymax(s2))
print("Highest marks of subject 3:",mymax(s3))
rfile.close()
根据您的格式修改您希望打印值的方式。