import os .path
import csv
class BaseCar:
def __init__ ( self , car_type, photo_file_name) :
self .car_type = car_type
self .photo_file_name = photo_file_name
def get_photo_file_ext( self ) :
return os .path .splitext ( self .photo_file_name ) [ 1 ] .strip ( '.' )
class Car( BaseCar) :
def __init__ ( self , car_type, brand, passenger_seats_count, photo_file_name, carrying) :
super ( ) .__init__ ( car_type, photo_file_name)
self .brand = brand
self .carrying = carrying
self .passenger_seats_count = passenger_seats_count
class Truck( BaseCar) :
def __init__ ( self , car_type, brand, photo_file_name, carrying, body_whl) :
super ( ) .__init__ ( car_type, photo_file_name)
self .brand = brand
self .carrying = carrying
self .body_whl = body_whl
self .body_width = float ( body_whl.split ( 'x' ) [ 0 ] ) or 0
self .body_height = float ( body_whl.split ( 'x' ) [ 1 ] ) or 0
self .body_length = float ( body_whl.split ( 'x' ) [ 2 ] ) or 0
def get_body_volume( self ) :
return "volume: {} cubic meters" .format ( self .body_length * self .body_width * self .body_height )
class SpecMachine( BaseCar) :
def __init__ ( self , car_type, brand, photo_file_name, carrying, extra) :
super ( ) .__init__ ( car_type, photo_file_name)
self .brand = brand
self .carrying = carrying
self .extra = extra
def get_car_list( filename) :
result = [ ]
with open ( filename, newline= '' ) as csvfile:
content = csv .reader ( csvfile)
next( content)
for line in content:
try :
arguments = line[ 0 ] .split ( ';' )
if len ( arguments) == 7 : # proper string contains 7 elenets
car_type, brand, passenger_seats_count, photo_file_name, body_whl, carrying, extra = arguments
if arguments[ 0 ] == 'car' :
result.append ( Car( car_type, passenger_seats_count, photo_file_name, carrying, car_type) )
elif arguments[ 0 ] == 'truck' :
result.append ( Truck( car_type, brand, photo_file_name, body_whl, carrying) )
elif arguments[ 0 ] == 'spec_machine' :
result.append ( SpecMachine( car_type, brand, photo_file_name, carrying, extra) )
except IndexError :
print ( 'Something goes wrong' )
return result
print ( get_car_list( 'cars.csv' ) )
aW1wb3J0IG9zLnBhdGgKaW1wb3J0IGNzdgoKY2xhc3MgQmFzZUNhcjoKCWRlZiBfX2luaXRfXyhzZWxmLCBjYXJfdHlwZSwgcGhvdG9fZmlsZV9uYW1lKToKCQlzZWxmLmNhcl90eXBlID0gY2FyX3R5cGUKCQlzZWxmLnBob3RvX2ZpbGVfbmFtZSA9IHBob3RvX2ZpbGVfbmFtZQoKCgoJZGVmIGdldF9waG90b19maWxlX2V4dChzZWxmKToKCQlyZXR1cm4gb3MucGF0aC5zcGxpdGV4dChzZWxmLnBob3RvX2ZpbGVfbmFtZSlbMV0uc3RyaXAoJy4nKQoJCQoKCgpjbGFzcyBDYXIoQmFzZUNhcik6CglkZWYgX19pbml0X18oc2VsZiwgY2FyX3R5cGUsIGJyYW5kLCBwYXNzZW5nZXJfc2VhdHNfY291bnQsIHBob3RvX2ZpbGVfbmFtZSwgY2FycnlpbmcpOgoJCXN1cGVyKCkuX19pbml0X18oY2FyX3R5cGUsIHBob3RvX2ZpbGVfbmFtZSkKCQlzZWxmLmJyYW5kID0gYnJhbmQKCQlzZWxmLmNhcnJ5aW5nID0gY2FycnlpbmcKCQlzZWxmLnBhc3Nlbmdlcl9zZWF0c19jb3VudCA9IHBhc3Nlbmdlcl9zZWF0c19jb3VudAoKCgoKCmNsYXNzIFRydWNrKEJhc2VDYXIpOgoJZGVmIF9faW5pdF9fKHNlbGYsIGNhcl90eXBlLCBicmFuZCwgcGhvdG9fZmlsZV9uYW1lLCBjYXJyeWluZywgYm9keV93aGwpOgoJCXN1cGVyKCkuX19pbml0X18oY2FyX3R5cGUsIHBob3RvX2ZpbGVfbmFtZSkKCQlzZWxmLmJyYW5kID0gYnJhbmQKCQlzZWxmLmNhcnJ5aW5nID0gY2FycnlpbmcKCQlzZWxmLmJvZHlfd2hsID0gYm9keV93aGwKCQlzZWxmLmJvZHlfd2lkdGggPSBmbG9hdChib2R5X3dobC5zcGxpdCgneCcpWzBdKSBvciAwCgkJc2VsZi5ib2R5X2hlaWdodCA9IGZsb2F0KGJvZHlfd2hsLnNwbGl0KCd4JylbMV0pIG9yIDAKCQlzZWxmLmJvZHlfbGVuZ3RoID0gZmxvYXQoYm9keV93aGwuc3BsaXQoJ3gnKVsyXSkgb3IgMAoKCWRlZiBnZXRfYm9keV92b2x1bWUoc2VsZik6CgkJcmV0dXJuICJ2b2x1bWU6IHt9IGN1YmljIG1ldGVycyIuZm9ybWF0KHNlbGYuYm9keV9sZW5ndGggKiBzZWxmLmJvZHlfd2lkdGggKiBzZWxmLmJvZHlfaGVpZ2h0KQoKY2xhc3MgU3BlY01hY2hpbmUoQmFzZUNhcik6CglkZWYgX19pbml0X18oc2VsZiwgY2FyX3R5cGUsIGJyYW5kLCBwaG90b19maWxlX25hbWUsIGNhcnJ5aW5nLCBleHRyYSk6CgkJc3VwZXIoKS5fX2luaXRfXyhjYXJfdHlwZSwgcGhvdG9fZmlsZV9uYW1lKQoJCXNlbGYuYnJhbmQgPSBicmFuZAoJCXNlbGYuY2FycnlpbmcgPSBjYXJyeWluZwoJCXNlbGYuZXh0cmEgPSBleHRyYQoKCgoKZGVmIGdldF9jYXJfbGlzdChmaWxlbmFtZSk6CglyZXN1bHQgPSBbXQoJd2l0aCBvcGVuKGZpbGVuYW1lLCBuZXdsaW5lPScnKSBhcyBjc3ZmaWxlOgoJCWNvbnRlbnQgPSBjc3YucmVhZGVyKGNzdmZpbGUpCgkJbmV4dChjb250ZW50KQoKCQlmb3IgbGluZSBpbiBjb250ZW50OgoJCQl0cnk6CgkJCQlhcmd1bWVudHMgPSBsaW5lWzBdLnNwbGl0KCc7JykKCQkJCWlmIGxlbihhcmd1bWVudHMpID09IDc6ICMgcHJvcGVyIHN0cmluZyBjb250YWlucyA3IGVsZW5ldHMKCQkJCQljYXJfdHlwZSwgYnJhbmQsIHBhc3Nlbmdlcl9zZWF0c19jb3VudCwgcGhvdG9fZmlsZV9uYW1lLCBib2R5X3dobCwgY2FycnlpbmcsIGV4dHJhID0gYXJndW1lbnRzCgkJCQkJaWYgYXJndW1lbnRzWzBdID09ICdjYXInOgoJCQkJCQlyZXN1bHQuYXBwZW5kKENhcihjYXJfdHlwZSwgcGFzc2VuZ2VyX3NlYXRzX2NvdW50LCBwaG90b19maWxlX25hbWUsIGNhcnJ5aW5nLCBjYXJfdHlwZSkpCgkJCQkJZWxpZiBhcmd1bWVudHNbMF0gPT0gJ3RydWNrJzoKCQkJCQkJcmVzdWx0LmFwcGVuZChUcnVjayhjYXJfdHlwZSwgYnJhbmQsIHBob3RvX2ZpbGVfbmFtZSwgYm9keV93aGwsIGNhcnJ5aW5nKSkKCQkJCQllbGlmIGFyZ3VtZW50c1swXSA9PSAnc3BlY19tYWNoaW5lJzoKCQkJCQkJcmVzdWx0LmFwcGVuZChTcGVjTWFjaGluZShjYXJfdHlwZSwgYnJhbmQsIHBob3RvX2ZpbGVfbmFtZSwgY2FycnlpbmcsIGV4dHJhKSkKCQkJZXhjZXB0IEluZGV4RXJyb3I6CgkJCQlwcmludCgnU29tZXRoaW5nIGdvZXMgd3JvbmcnKQoJCQkKCQlyZXR1cm4gcmVzdWx0CgoKcHJpbnQoZ2V0X2Nhcl9saXN0KCdjYXJzLmNzdicpKQ==