Причина, по которой он продолжает запрашивать ввод, заключается в том, что вы запрашиваете ввод для каждой строки в вашем 2D-списке.
Если вы хотите задать его только один раз, измените код следующим образом:
currencies = [['hryvna', '1 hryvna', '2005', '0.036'],
['dollar', '1 dollar', '2006', '1'],
['euro', '1 euro', '2007', '1.08'],
['Belarusian ruble', '1 Belarusian ruble', '2008', '0.39'],
['pound', '1 pound', '2009', '1.23']]
def atribute_choice():
atribute = int(input("""Choose the atribute:
1 - Currency name;
2 - Currency denomination;
3 - Currency year of release;
4 - Currency rate to the dollar\n"""))
atribute = atribute - 1
return atribute
def sorting(elem):
a = elem[attribute]
return a
def currencies_sorting():
currencies.sort(key=sorting)
attribute = atribute_choice()
currencies_sorting()
print(currencies)