Oct-15-2018, 04:30 PM
this is the text file https://transfernow.net/91bu72e2wb1l
My current code:
I need to print out the 5 closes cities that correspond with the user input. (ex: if the user inputs 'summer' and 'warm' then I need to print the closest 5 cities from that list)
My current code:
with open('cities.txt','r', encoding = 'cp1252') as fin: # opens file with read permission import math season = input('Will you take your vacation during summer or winter? ') climate = input('Do you want to go to a warm or a cold place? ') coldsummer = [] # these are empty lists that will be filled in later warmsummer = [] coldwinter = [] warmwinter = [] data = fin.read().splitlines(True) for line in data[1:-1]: line = line.split('\t') # splits elements in line with a tab lat = line[0] # these assign variables to certain parts of the file long = line[1] city = line[2] lat_deg = int(lat[0:2].strip('°').strip('N').strip('S')) # strips non integer parts lat_min = int(lat[3:5].strip('°').strip('N').strip('S')) long_deg = int(long[0:2].strip('°').strip('E').strip('W')) long_min = int(long[3:5].strip('°').strip('E').strip('W')) lat_DMS = lat_deg + (lat_min/60) # converts to degree-minute-second lat_rad = lat_DMS*(math.pi/180) # converts to radian long_DMS = long_deg + (long_min/60) long_rad = long_DMS*(math.pi/180) R = 6360 # assumed radius of Earth Mercedlat_DMS = 37 + 22/60 # coordinate for Merced, CA in degree-minute-second Mercedlat_rad = Mercedlat_DMS*(math.pi/180) # in radians Mercedlong_DMS = 107 + 25/60 Mercedlong_rad = Mercedlong_DMS*(math.pi/180) distance = 2*R*math.sin(math.sqrt(math.sin((lat_rad - Mercedlat_rad)/2)**2 + # distance formula math.cos(lat_rad)*math.cos(Mercedlat_rad) * math.sin((long_rad - Mercedlong_rad)/2)**2))**-1 line.append(distance) if lat_deg > 66: # these if statements will fill in lists with appropriate values coldsummer.append(line) coldwinter.append(line) elif lat_deg > 35 and lat_deg < 66: warmsummer.append(line) coldwinter.append(line) else: warmsummer.append(line) warmwinter.append(line) def sortByDistance(cityStats): return cityStats[len(cityStats)-1] coldsummer.sort(key = sortByDistance) warmsummer.sort(key = sortByDistance) coldwinter.sort(key = sortByDistance) warmwinter.sort(key = sortByDistance) for x in warmsummer: # the for loops will take desired list and print values if season == 'summer': if climate == 'warm': print(x[2]) for x in coldsummer: if season == 'summer': if climate == 'cold': print(x[2]) for x in warmwinter: if season == 'winter': if climate == 'warm': print(x[2]) for x in coldwinter: if season == 'winter': if climate == 'cold': print(x[2])I'm not sure what I'm doing wrong.
I need to print out the 5 closes cities that correspond with the user input. (ex: if the user inputs 'summer' and 'warm' then I need to print the closest 5 cities from that list)