【问题标题】:How to use csv as instance attritubes in python?如何在python中使用csv作为实例属性?
【发布时间】:2022-01-18 17:01:51
【问题描述】:

如何导入 csv 文件并将其用作我的类的实例属性?

这是我写的代码:

import random
import csv 

class Cars:
    
    def __init__(self, driver, team):
        self.driver = driver
        self.team = team
    

class Race:
    def __init__(self, lap = 55):
        self.lap = lap
        self._finished = []
        
    def race(self, list_of_cars):
        for c in list_of_cars:
            c.distance = 0
            
        while list_of_cars:
            for c in list_of_cars:
                c.distance += random.randint(100,300)
                if c.distance >= self.lap:
                    self._finished.append(c)
                    list_of_cars.remove(c) 
            
    def print_results(self):
        print("Tournament Result\n" + "_" * 18)
        for i, c in enumerate (self._finished):
            print (i+1, c.driver, c.team)
            
cars_list = []
with open("driverandteam.csv",'r') as file:
    csv_reader = csv.reader(file)
    for line in csv_reader:
        cars_list.append(Cars(line[0],line[1]))


r = Race(65)
cars = cars_list
r.race(cars)
r.print.results()

driverandteam.csv 看起来像这样

Verstappen, Red Bull
Perez, Red Bull
Hamilton, Mercedes
Bottas, Mercedes
Leclerc, Ferrari
Sainz, Ferrari
Ricciardo, McLaren
Norris, McLaren
Ocon, Alphine
Alonso, Alphine
Tsunoda, AlphaTauri
Gasly, AlphaTauri
Vettel, Aston Martin
Stroll, Aston Martin
Latifi, Williams
Russell, Williams
Raikkonen, Alfa Romeo
Giovinazzi, Alfa Romeo
Mazepin, Haas
Schumacher, Haas

我在代码的第 36 行不断收到“超出范围列表”错误,但我不明白为什么。如何修复我的代码以使其正常工作。

【问题讨论】:

    标签: python-3.x csv class


    【解决方案1】:

    我在本地运行您的代码并使用提供的 csv(感谢您提供所有需要的信息!),最后我不得不对代码进行一点小改动:

    r.print_results()
    

    之后一切都按预期运行,我得到以下输出:

    Tournament Result
    __________________
    1 Verstappen  Red Bull
    2 Hamilton  Mercedes
    3 Leclerc  Ferrari
    4 Ricciardo  McLaren
    5 Ocon  Alphine
    6 Tsunoda  AlphaTauri
    7 Vettel  Aston Martin
    8 Latifi  Williams
    9 Raikkonen  Alfa Romeo
    10 Mazepin  Haas
    11 Perez  Red Bull
    12 Sainz  Ferrari
    13 Alonso  Alphine
    14 Stroll  Aston Martin
    15 Giovinazzi  Alfa Romeo
    16 Bottas  Mercedes
    17 Gasly  AlphaTauri
    18 Schumacher  Haas
    19 Norris  McLaren
    20 Russell  Williams
    

    所以我无法重现您收到的错误,如果您仍然遇到此错误,请告诉我们,并且可以更新任何代码/数据以帮助重现。

    【讨论】:

      猜你喜欢
      • 2013-11-18
      • 1970-01-01
      • 2020-06-13
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      • 2019-05-17
      • 1970-01-01
      • 2020-04-07
      相关资源
      最近更新 更多