Как понять ошибку в коде Python (local variable 'cost' referenced before assignment)?
Понять так, что к переменной обращение происходит раньше, чем её присваивание. То, что столь простая ошибка ставит вас в тупик - является прекрасным показателем того, на сколько курс Codecademy хуже учебника.
Кстати, ошибка смешная =)
В целом у вас все ок.
Но сама ошибка, говорит о том, что переменная еще не определна, значит косяк в условии else
Нооо... И там вроде все ок, кроме одного, что в функции ground_shipping , в условии else возвращается не cost =)))
а сost =) 
Чувствуете разницу ?)