Страницы

Поиск по вопросам

суббота, 1 февраля 2020 г.

Получение числа из k-нотации: 1kkk -> 1000000000

#python #python_3x #python_36


Помогите пожалуйста создать простую функцию, в которую мы будем передавать 1 аргумент
а именно строку. Эта функция должна служить что бы пользователь мог сокращенно вводить
огромные числа к примеру (1k - 1000, 1.5kk - 1500000, 1kkk - 1000000000) мне маленький
набросок а дальше я сам попробую, спасибо
    


Ответы

Ответ 1



Пример: def k_to_number(num_str: str) -> int: i = num_str.index('k') num, size = num_str[:i], len(num_str[i:]) return int(float(num) * (1000 ** size)) print(k_to_number("1k")) # 1000 print(k_to_number("1.5kk")) # 1500000 print(k_to_number("1kkk")) # 1000000000 Ответ MaxU мне напомнил о похожем способе, с которым нужно быть очень осторожным: def k_to_number(num_str: str) -> int: return int(eval(num_str.replace('k', '*10**3'))) Дело в том, что eval (и его аналог exec) выполняют внутри себя питоничий код и в этом их опасность.

Ответ 2



Можно воспользоваться модулем numexpr: import numexpr as ne def to_num(s): s = (s.lower() .replace('k', '*10**3') .replace('m', '*10**6') .replace('g', '*10**9') .replace('t', '*10**12')) return ne.evaluate(s).item() Примеры: In [222]: print(to_num('1kKk')) 1000000000 In [223]: print(to_num('1m')) 1000000 In [224]: print(to_num('123.45m')) 123450000.0 In [225]: print(to_num('123.45m')) 123450000.0 In [226]: print(to_num('0.5k')) 500.0 In [227]: print(to_num('1K')) 1000

Комментариев нет:

Отправить комментарий