Reputation: 57
I searched through stack, but I still can't get this to work. I'm learning how to construct algorithms and need to code an algroithm (using insertion sort) to sort the array in ascending order and display the value it contains. Currently I'm getting None.
def sortedRainfall (rainfall):
month = ['January','Febuary','March','April','May','June','July','August'\
,'September','October','November','December']
for index in range(1,len(rainfall)):
value = rainfall[index]
i = index - 1
while (i >= 0):
if value < rainfall[i]:
rainfall[i+1] = rainfall[i] #shift number in slot i right to slot i + 1
rainfall[i] = value #shif value left into slot i
i = i - 1
else:
break
return
Full code is below:
#Main module --------------------------------------------------------------------------------------------------------------
def main ():
rainfall = rainInput () #Gets rainfall per month from user.
totalRain = totalRainfall (rainfall) #Totals rainfall from user inputted data.
average_Rainfall = averageRainfall (totalRain) #Averages rainfall for the year.
highestMonth, highestMonthly = highestMonthNumber (rainfall) #Finds highest month of rainfall and displays to the user.
lowestMonth, lowestMonthly = lowestMonthNumber (rainfall) #Finds lowest month of rainfall and displays to the user. ---
rainfallSorted = sortedRainfall(rainfall)
print #this is for spacing output
print ('The total rainfall for the year was: ' +str(totalRain) + ' inche(s)')
print #this is for spacing output
print ('The average rainfall for the year was: ' +str(average_Rainfall) +\
' inche(s)')
print #this is for spacing in output
print ('The highest amount of rain was', highestMonthly, 'in' , highestMonth)
print #this is for spacing in output
print ('The lowest amount of rain was', lowestMonthly, 'in' , lowestMonth)
print(rainfallSorted)
#Gets rainfall per month from user. ---------------------------------------------------------------------------------------
def rainInput ():
rainfall = ['January','Febuary','March','April','May','June','July','August'\
,'September','October','November','December']
month = 0
while month < len(rainfall):
rainfall[month] = int(input ('Please enter the amount for month ' + str\
(month + 1) + ': '))
month += 1
rainfall.append
return rainfall
#Totals rainfall from user inputted data. ---------------------------------------------------------------------------------
def totalRainfall (rainfall):
return sum([int(x) for x in rainfall])
#Averages rainfall for the year. ------------------------------------------------------------------------------------------
def averageRainfall (totalRain):
average_Rainfall = totalRain / 12
return average_Rainfall
#Finds highest month of rainfall and displays to the user. ----------------------------------------------------------------
def highestMonthNumber (rainfall):
month = ['January','Febuary','March','April','May','June','July','August'\
,'September','October','November','December']
highestMonthly = 0
highestMonth = 0
for m, n in enumerate(rainfall):
if n > highestMonthly:
highestMonthly = n
highestMonth = m
return month[highestMonth], highestMonthly
#Finds lowest month of rainfall and displays to the user. -----------------------------------------------------------------
def lowestMonthNumber (rainfall):
month = ['January','Febuary','March','April','May','June','July','August'\
,'September','October','November','December']
lowestMonthly = 1000000000
lowestMonth = 0
for m, n in enumerate(rainfall):
if n < lowestMonthly:
lowestMonthly = n
lowestMonth = m
return month[lowestMonth], lowestMonthly
def sortedRainfall (rainfall):
month = ['January','Febuary','March','April','May','June','July','August'\
,'September','October','November','December']
for index in range(1,len(rainfall)):
value = rainfall[index]
i = index - 1
while (i >= 0):
if value < rainfall[i]:
rainfall[i+1] = rainfall[i] #shift number in slot i right to slot i + 1
rainfall[i] = value #shif value left into slot i
i = i - 1
else:
break
return
main()
Upvotes: 1
Views: 56
Reputation: 348
Try this:
def sortedRainfall (rainfall):
for i in range(1, len(rainfall)):
if rainfall[i] < rainfall[i-1]:
for j in range(i):
if rainfall[i] < rainfall[j]:
rainfall[i], rainfall[j] = rainfall[j], rainfall[i]
return rainfall
Upvotes: 1
Reputation: 57
def sortNames(listOfNames):
sortedNames = []
for index in range(1,len(listOfNames)):
value = listOfNames[index]
i = index - 1
while (i >= 0):
if value < listOfNames[i]:
listOfNames[i+1] = listOfNames[i] #shift number in slot i right to slot i + 1
listOfNames[i] = value #shif value left into slot i
i = i - 1
else:
break
return rainfall
Just had to return something.
Upvotes: 2