Can someone help with my assignment. I have most of the code written theres just a few errors I need help with.
the text file and assignment: https://transfernow.net/49ffh2n6pjez
The code:
Any help would be greatly appreciated. Thank!
Mainly the issues are with my sorting
the text file and assignment: https://transfernow.net/49ffh2n6pjez
The code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
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 ] """ The key argument requires a function or method that will act upon each item in the list. The function defined above should suffice in this case. In effect, list.sort() does this with more finesse: length = len(self) for i in range(length): if key(self[i]) > key(self[i + 1]): swap(self[i], self[i + 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 ]) |
(Oct-15-2018, 08:55 PM)gonzo620 Wrote: Can someone help with my assignment. I have most of the code written theres just a few errors I need help with.
the text file and assignment: https://transfernow.net/49ffh2n6pjez
The code:
Any help would be greatly appreciated. Thank!
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485with
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
]
""" The key argument requires a function or method that will act upon each item in the list.
The function defined above should suffice in this case.
In effect, list.sort() does this with more finesse:
length = len(self)
for i in range(length):
if key(self[i]) > key(self[i + 1]):
swap(self[i], self[i + 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'
:
(x[
2
])
for
x
in
coldsummer:
if
season
=
=
'summer'
:
if
climate
=
=
'cold'
:
(x[
2
])
for
x
in
warmwinter:
if
season
=
=
'winter'
:
if
climate
=
=
'warm'
:
(x[
2
])
for
x
in
coldwinter:
if
season
=
=
'winter'
:
if
climate
=
=
'cold'
:
(x[
2
])
Mainly the issues are with my sorting