1

I am working on a project for a python class, where we have to create a vin number look up tool. This code below works so far for country and year made. However I am having an issue with how I am indexing the user input.

Sometimes a country is the first two characters, and other times the country code is only the first character. I do not how to get around this problem, I tried using an if else kind of method while iterating through the dictionary, but it did not work.

class vinfo():

    def __init__(self):
        """ Get user input """
vin = input("Enter Vin: ")

""" Stupidity check """
unaccepted_chars = [
    "-","/",".",","," ","?",
    "^","$","*","(",")","[",
    "]","{","}","@","!","_",
    "+","'","=","|","#","<",
    ">","`","~","&"
    ]

for char in vin:
    if char in unaccepted_chars:
        vin = vin.replace(char, "")
else:
    print("", end = "")

""" Length check and index """
if len(vin) == 17:

    self.country_filt1 = vin[0]
    self.country_filt2 = vin[0:2]

    self.engine_filt = vin[7]

    self.year_filt = vin[9]

    self.manufact_filt = vin[1:3]
    self.manufact_filt1 = vin[1:4]

else:
    print("You must've entered something really stupid.\n(must be 17 characters, letters are uppercase)")

""" Vin Code Data """
# each manufacturer seems to have multiple vins for different car styles
# and for different countries
manufact_codes = {
    "1G1":"Chevy",
    "":"",
}

year_codes = {
    "M":"2021","L":"2020","K":"2019",
    "J":"2018","H":"2017","G":"2016",
    "F":"2015","E":"2014","D":"2013",
    "C":"2012","B":"2011","A":"2010",
    "9":"2009","8":"2008","7":"2007",
    "6":"2006","5":"2005","4":"2004",
    "3":"2003","2":"2002","1":"2001",
    "Y":"2000","X":"1999","W":"1998",
    "V":"1997","T":"1996","S":"1995",
    "R":"1994","P":"1993","N":"1992",
    "M":"1991","L":"1990","K":"1989",
    "J":"1988","H":"1987","G":"1986",
    "F":"1985","E":"1984","D":"1983",
    "C":"1982","B":"1981","A":"1980"
}

country_codes = {
    "1": "USA",
    "4": "USA",
    "5": "USA",
    "7F": "USA",
    "3X": "Mexico",
    "37": "Mexico",
    "3A": "Canada",
    "3W": "Canada",
    "W": "Germany",
    "SA": "United Kingdom",
    "SM": "United Kingdom",
    "J": "Japan",
    "KL": "Korea",
    "KR": "Korea"
}

engine_codes = {

}

""" Define the vehicles attributes using the find() function below """
self.year = self.find(self.year_filt, year_codes)[0]
# self.country = self.find(self.country_filt, country_codes)[0]
# self.manufact = self.find(self.manufact_filt, manufact_codes)
self.engine = self.find(self.engine_filt, engine_codes)

""" Find country (different lengths of country codes) """
for key, value in country_codes.items():
  if key == self.country_filt1:
    country = value
  elif key == self.country_filt2:
    country = value
  else:
    country = "Unsupported code"

""" Same for manufacturer """
for key, value in manufact_codes.items():
  if key == self.manufact_filt:
    manufact = value
  elif key == self.manufact_filt1:
    manufact = value
  else:
    manufact = "Unsupported code"

self.info = print(f"Year: {self.year}\nManufacturer: {manufact}\nCountry: {country}\nEngine: {self.engine}")

""" search through the dictionaries """
def find(self, filt, dict_of_codes):
    try:
        info = [value for key, value in dict_of_codes.items() if key == filt]
    except:
        info = "Unsupported"
    if len(info) > 1:
        info += " (Could be any of these)"
    return info
Barmar
  • 741,623
  • 53
  • 500
  • 612
Jensen_ray
  • 81
  • 2
  • 10

0 Answers0