python перевод массы в кратные и дольные единицы

нужно написать программу перевода введенной массы в граммы, килограммы, тонны. Приставки, которые будет использовать программа: g – граммы, kg – килограммы, t – тонны.

Пример ввода:

12kg

Вывод:

12000g
0.012t

вот как получилось у меня, но это не правильно. как сделать так чтобы в вводимых данных с клавиатуры отделить число от граммов и т.д.?

a = input()

if "kg" in a:
print(a/1000 + "t")
print(a*1000 + "g")

elif "g" in a:
print(a/1000 + "kg")
print(a/00000 + "t")

elif "t" in a:
print(a*1000 + "kg")
print(a/1000000 + "g")

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

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

По умолчанию input() возвращает строковый тип str.

Поэтому, даже если вы введете число, вы все равно не сможете проводить с ним математические операции, так как переменная будет являться текстом.


Допустим, мы вводим 12

Переменная a будет иметь тип str и содержать значение '12'

Чтобы привести его к числовому типу int достаточно применить к input() встроенную функцию int()

a = int(input())

Теперь a имеет тип int и значение 12


Однако вы вводите также единицы измерения, так что строку '12kg', содержащую буквы привести к числу не получится.

Для отделения 'kg' можно воспользоваться стандартным методом replace(), который первым аргументом принимает строку, которую нужно заменить, а вторым - строку, на которую нужно заменить.

'12kg'.replace('kg', '')

Даная строка примет значение '12', которое уже можно привести к числу и выполнять операции.


Решение:

a = input()

value = int(a.replace('kg', '').replace('g', '').replace('t', ''))

if "kg" in a:
    print(str(value / 1000) + "t")
    print(str(value * 1000) + "g")

elif "g" in a:
    print(str(value / 1000) + "kg")
    print(str(value / 100000) + "t")

elif "t" in a:
    print(str(value * 1000) + "kg")
    print(str(value / 1000000) + "g")
→ Ссылка
Автор решения: Namerek
import re
weights = {
    't': 1e-6,
    'kg': 1e-3,
    'g': 1
}
if match := re.search(r'([\d.]+)\s*?(t|k?g)', input()):
    value, unit = match.groups()
    
    grams = float(value) / weights.pop(unit)
    for u, v in weights.items():
        print(f'{grams * v}{u}')
→ Ссылка