循环帮助,减少程序

时间:2015-03-19 18:38:12

标签: python loops

是否有人能够帮助我尝试将其设置为循环或者代码不长,我一直在尝试并尝试失败:/

from collections import defaultdict
scores = defaultdict(list)
def alpha():
  with open('Class X.txt', '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)))
def beta():
      with open('Class Y.txt', '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)))
def charlie():
  with open('Class Z.txt', '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 个答案:

答案 0 :(得分:0)

class Scores(object): 

    def get_scores(file_name):
        scores = defaultdict(list)
        with open(filename, 'r') as f:
            for line in f:
                student, score = line.split(':')
                scores[student].append(int(score))
        return sorted(scores.items())

    def alpha():
        for student, scorelist in self.get_scores('Class X.txt')):
            print("%s : %d" % (student, max(scorelist)))

    def beta():
        for student, scorelist in self.get_scores('Class Y.txt')):
            print("%s : %d" % (student, max(scorelist)))

    def charlie():
        for student, scorelist in self.get_scores('Class Z.txt')):
            print("%s : %d" % (student, max(scorelist)))

答案 1 :(得分:0)

from collections import defaultdict
scores = defaultdict(list)

def read_scores(scorefile):
  with open(scorefile, '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)))


for scorefile in ['Class X.txt', 'Class Y.txt', 'Class Z.txt']:
    read_scores(scorefile)

基本上,我将您的alpha beta charlie个函数更改为单个函数:read_scores()

read_scores()作为参数scorefile,在这种情况下只是您要阅读的文本文件的名称...例如:Class Z.txt

然后我们在列表['Class X.txt', 'Class Y.txt', 'Class Z.txt']上创建一个循环,并将每个循环传递给这个新函数。

答案 2 :(得分:0)

import os
my_folder = 'path/to/your/folder'
if os.path.isdir(my_folder):
    my_files = [file for file in os.listdir(my_folder) if file.endswith('.txt')]

def alpha(filename):
    with open(filename, '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)))

for each_file in my_files:
    alpha(each_file)