首页 > 解决方案 > 从一个大列表中将对象分配给一个类并打印它们中的每一个?

问题描述

我有一个包含 3331 场橄榄球比赛的文件,每场比赛有 9 个属性,它们是;

(日期、日期、年份、team_1、team_2、team_1_score、team_2_score、team_1_tries、team_2_tries、中立)。

样本数据:

15 Feb 1875, Mon, 1875, ENG, IRE, 7, 0, 2, 0, N
08 Mar 1875, Mon, 1875, SCO, ENG, 0, 0, 0, 0, N
13 Dec 1875, Mon, 1875, IRE, ENG, 0, 4, 0, 2, N

我创建了一个名为 Match 的类来存储这些数据,并尝试实现一种方法来打印每个匹配的数据,这就是我所拥有的;

class Match:

def __init__(self, date, day, year, team_1, team_2, team_1_score, team_2_score, team_1_tries, team_2_tries, neutral):
    self.date=date
    self.day=day
    self.year=year
    self.team_1=team_1
    self.team_2=team_2
    self.team_1_score=team_1_score
    self.team_2_score=team_2_score
    self.team_1_tries=team_1_tries
    self.team_2_tries=team_2_tries
    self.neutral=neutral

def show(self):
    print("Date: " + self.date /n +
         "Day: " + self.day /n +
         "Year: " + self.year/n + 
         "Home Team :" + self.team_1 /n +
         "Home Team Score: " + self.team_1_score /n +
         "Home Team Tries: " + self.team_1_tries /n +
         "Away Team: " + self.team_2 /n +
         "Away Team Score: " + self.team_2_score /n +
         "Away Team Tries: " + self.team_2_tries /n +
         "Neutrality: " + self.neutral /n)

这部分是我认为我遇到麻烦的地方,我们必须真正检查我的文件(“RugbyResultsData.csv”)并为每场比赛创建一个对象,我们的讲师给了我们除了我们需要的一行之外的所有代码调整,但我不确定该去哪里,这是编程课程的第一年介绍,而且我本身并不是与 CS 相关的学位(数学)。

#Adjust this code to create a list of Match objects

matches = list()
count = 0
with open('RugbyResultsData.csv') as f:
    for line in f:
        words = line.split(',')

        match = #Adjust code here

        matches.append(match)
        count = count + 1

print(str(count) + " matches loaded")`

在它说“在此处调整代码”的地方,我尝试执行 list(words) 可以让我获得匹配的每一行,但我不知道如何将这些数据转换为对象。之后,我需要遍历类的每个元素并打印它。

任何帮助表示赞赏,对不起,如果这是一个nooby问题

标签: pythonoopobjectmethods

解决方案


这有效:

class Match:
    def __init__(self, date, day, year, team_1, team_2, team_1_score, team_2_score, team_1_tries, team_2_tries, neutral):
        self.date=date
        self.day=day
        self.year=year
        self.team_1=team_1
        self.team_2=team_2
        self.team_1_score=team_1_score
        self.team_2_score=team_2_score
        self.team_1_tries=team_1_tries
        self.team_2_tries=team_2_tries
        self.neutral=neutral

    def show(self):
        print(
            "\n".join((
                "Date: " + self.date,
                "Day: " + self.day,
                "Year: " + self.year,
                "Home Team :" + self.team_1,
                "Home Team Score: " + self.team_1_score,
                "Home Team Tries: " + self.team_1_tries,
                "Away Team: " + self.team_2,
                "Away Team Score: " + self.team_2_score,
                "Away Team Tries: " + self.team_2_tries,
                "Neutrality: " + self.neutral
            ))
        )


matches = list()
count = 0

with open('RugbyResultsData.csv') as f:
    for line in f:
        words = line[:-1].split(',')

        match = Match(*words)

        matches.append(match)
        count = count + 1

print(str(count) + " matches loaded")

正如@b_c 指出的那样,错误在show.


推荐阅读