Махинация со строками и списками
Всем привет.
Тут такая задачка возникла.
Пользователь вводит строку как в калькулятор: 123+500+456 не важно. И надо сделать вот что.
Раздробить строку с помощью input = list(input), и получаем ['1','2','3','+','5' ...]. И сделать так, чтобы пройтись по этому списку и соединить то, что относиться к числам, а операторы сложения(-,*,/ и т.д) оставить. Получается: ['123','+','500' ...].
Как это реализовать или есть примерно похожий альтернативный способ решения задачи.
Ответы (2 шт):
Автор решения: Сергей
→ Ссылка
Вот решение "в лоб". Для тестовой строки: s='123+56+244/34-57*26'
получаем ['123', '+', '56', '+', '244', '/', '34', '-', '57', '*', '26']
s = input ()
# Кортеж для проверки на соответствие
mas= ('+','-','/','*')
# Финальный список
list1=[]
# переменная для накопления числа в строковом виде
s_temp=''
# Идем посимвольно по всей строке
for symbol in s:
# Если символ оператора, то запишем в список накопленное число и оператор
if symbol in mas:
list1.append(s_temp)
list1.append(symbol)
# "Обнулим" накопленную строку
s_temp = ''
# Не оператор - накапливаем строку
else:
s_temp += symbol
# Записываем последнюю накопленную строку
list1.append(s_temp)
print (list1)
Автор решения: Stanislav Volodarskiy
→ Ссылка
Регулярное выражение:
import re
expr = '12+34 - 56 / 78 * 90'
print(re.findall('\d+|[-+*/]', expr))
$ python tokenizer.py ['12', '+', '34', '-', '56', '/', '78', '*', '90']