В чем проблема? Задача на питоне

Нужно отсортировать по количеству нефти.Единица измерения задается одной из трех букв: g (граммы), p (пуды), t (тонны), причем перед этой буквой может стоять одна из приставок: m (милли-), k (кило-), M (мега-), G (гига-).1 пуд = 16380 граммов, 1 тонна = 106 граммов.

задача 252 ацмп

in 5 234 g 4576 mp 2 t 32 mg 2 Mg

out 32 mg 234 g 4576 mp 2 t 2 Mg

вот простой код, валит 20 тест

n=int(input())
a=[]
b=[]
m=[0]*n
for i in range(n):
    A, B = input().split()
    A = int(A)
    a.append(A)
    b.append(B)
for i in range(n):
    if len(b[i])==1:
         if b[i][0] == 'g':
             m[i] = 1
         elif b[i][0] == 'p':
             m[i] = 16380
         else:
             m[i] = 1000000
    else:
      if b[i][1] == 'g':
          m[i] = 1
      elif b[i][1] == 'p':
          m[i] = 16380
      else:
          m[i] = 1000000
      if b[i][0] == 'm':
          m[i] *= 0.001
      elif b[i][0] == 'k':
          m[i] *= 1000
      elif(b[i][0] == 'M'):
          m[i] *= 1000000
      else:
          m[i] *= 1000000000
    m[i] *= 1000*a[i]
for i in range(n-1):
    for j in range(n-i-1):
        if m[j] > m[j+1]:
            m[j], m[j+1] = m[j+1], m[j]
            a[j], a[j+1] = a[j+1], a[j]
            b[j], b[j+1] = b[j+1], b[j]
 
for i in range(n):
    print(a[i],b[i])

Ответы (1 шт):

Автор решения: Zhihar

например можно сделать так:

# функция сортировки    
def sort_func(obj):
    mass_prefix = {
        '*': 1,
        'm': 0.001,
        'k': 10**3,
        'M': 10**6,
        'G': 10**9
    }

    unit_prefix = {
        'g': 1,
        'p': 16380,
        't': 10**6
    }

    # определить единицы измерения и массы
    unit = obj[1][-1]
    mass = '*' if len(obj[1]) == 1 or obj[1][0] not in mass_prefix else obj[1][0]

    # привести вес к граммам
    value = obj[0] * unit_prefix[unit] * mass_prefix[mass]

    return value


# получить данные от пользователя
n = int(input())
arr = input().split()

# преобразовать данные в виде списка кортежей (значение, единица измерения)
data = list(zip(map(int, arr[::2]), arr[1::2]))   

# отсортировать данные
data.sort(key=sort_func)

# вывести данные в виде строки
print(*map(lambda obj: f"{obj[0]} {obj[1]}", data))

расписал чтобы было более понятно, что делает программа, на самом деле поджать код можно

P.S.

тут уже приводили неработающие тесты, потому что данные можно вводить в несколько строк и т.д. - я это не учитывал сейчас, но автору лучше учесть

→ Ссылка