Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-从文本文件按字母顺序排列的最高值_Python - Fatal编程技术网

Python-从文本文件按字母顺序排列的最高值

Python-从文本文件按字母顺序排列的最高值,python,Python,我用python做了一个测验,总分是10分。从这个测验中,每个用户名、班级和分数都保存在一个文本文件中。现在我要做的是创建一个新的程序,它可以按照字母顺序组织用户名,并且只使用用户的最高分数,然后打印出来。到目前为止,我已经成功地按字母顺序组织了用户名。 到目前为止,我的代码就是这样的 def alpha(): b = open("Class X.txt" , "r") fo = b.readlines() for x in sorted (fo): print(x)

我用python做了一个测验,总分是10分。从这个测验中,每个用户名、班级和分数都保存在一个文本文件中。现在我要做的是创建一个新的程序,它可以按照字母顺序组织用户名,并且只使用用户的最高分数,然后打印出来。到目前为止,我已经成功地按字母顺序组织了用户名。 到目前为止,我的代码就是这样的

def alpha():
  b = open("Class X.txt" , "r")
  fo = b.readlines()
  for x in sorted (fo): 
      print(x)
def beta():
  b = open("Class Y.txt" , "r")
  fo = b.readlines()
  for x in sorted(fo):
      print(x)
def charlie():
  b = open("Class Z.txt" , "r")
  fo = b.readlines()
  for x in sorted(fo):
      print(x)

if option == "A":
  if Class == "X":
    alpha()

  elif Class == "Y":
    beta()

  elif Class == "Z":
    charlie()`
我一直在尝试从所需类的文本文件中按字母顺序打印所有用户名,我已经成功地使用了该类。然而,我在试图打印每个用户的最高分数时遇到了很大的麻烦,因为它与他们的名字一起打印,而不是打印他们的任何分数

每个学生的名字和分数都是这样保存的(Nakita:0),每个文本文件保存在三个类中,X、Y和Z


我想知道是否有人能帮我从文本文件中找出如何按照字母顺序将用户名中的最高分数包括进来,就像我所做的那样。文本文件的格式如上图所示。我还使用了Python 3.3.2版本。

首先,我可能会使用
defaultdict
,使用学生姓名作为键,值是他们的分数列表
defaultdict
仅在首次访问时初始化,在本例中为空列表

from collections import defaultdict

scores = defaultdict(list)
接下来,您可以通过创建一个要处理的文件名列表来压缩脚本,然后将其用作外部循环,这样您就不必重复很多次:

def alpha():
  b = open("Class X.txt" , "r")
  fo = b.readlines()
  for x in sorted (fo): 
      print(x)
def beta():
  b = open("Class Y.txt" , "r")
  fo = b.readlines()
  for x in sorted(fo):
      print(x)
def charlie():
  b = open("Class Z.txt" , "r")
  fo = b.readlines()
  for x in sorted(fo):
      print(x)
变成:

class_filenames = ['Class X.txt', 'Class Y.txt', 'Class Z.txt']

for class_file in class_filenames:
    with open(class_file, 'r') as f:
        ...
最后,对于循环体,我们需要将每一行拆分为名称和分数(作为整数),并将它们添加到正确的条目中,这很容易通过以下方法完成:

for line in f.readlines():
    student, score = line.split(':')
    scores[student].append(int(score))
然后,我们可以通过使用
排序的
迭代器对最终的dict进行排序,按字母顺序打印每个名字,并打印每个学生的得分列表的
max

for student, scorelist in sorted(scores.items()):
    print("%s : %d" % (student, max(scorelist)))
现在大家一起:

from collections import defaultdict

scores = defaultdict(list)

class_filenames = ['Class X.txt', 'Class Y.txt', 'Class Z.txt']

for class_file in class_filenames:
    with open(class_file, 'r') as f:
        for line in f.readlines():
            student, score = line.split(':')
            scores[student].append(int(score))

for student, scorelist in sorted(scores.items()):
    print("%s : %d" % (student, max(scorelist)))

如果您有3个同名文件,则代码可以如下所示:

lstX = []
lstY = []
lstZ = []
b = open("Class X.txt" , "r")
lstX = b.read().split('\n')
lstX.sort()
b.close()
b = open("Class Y.txt" , "r")
lstY = b.read().split('\n')
lstY.sort()
b.close()
b = open("Class Z.txt" , "r")
lstZ = b.read().split('\n')
lstZ.sort()
b.close()

lst = []
lst.append(lstX)
lst.append(lstY)
lst.append(lstZ)

res = []
for i in range(len(lst)):
    for q in range(len(lst[i])):
        res.append(int(lst[q][i].split(':')[1]))
    print("%s max. = %s" % (lst[q][i].split(':')[0], max(res)))
    res = []
注意:对于此代码,文本文件在最后一条记录后不得有新行! 例如,文件“Class X.txt”看起来是这样的:

Nakita:0
Makita:1
Zakita:7

那么,每个学生分为三个班,为每个打印输出生成一个相同姓名的列表,并附上不同的分数?你想要一份每个学生的单子,以及他们三个分数中最高的一个?