как в питоне из строки взять цифры и поместить их в разные переменные, соблюдая условия?
Имеется разный текст к примеру 'Заработная плата от 60 000 до 90 000 руб' или 'до 80 000' или '50 000-70 000'. Необходимо из этих строк взять числа, и поместить в разные переменные, т.е. миним. и максим. ЗП. Например в 1 случае мин. = 60000, макс = 90000 и отдельно вывести валюту, если имеется. Использовала множество вариантов, но ни один не работает, так как надо. вот один из
dd = 'от 80 000 до 90 000 руб.'\
s1=[]\
s2=[]\
b = dd.split(' ')
for i in b:
#print(i) выводит следующее ['от', '80', '000', 'до', '90', '000', 'руб.']
while (i == 'до') == True:
s1.append(i.isnumeric())
else:
s2.append(i.isnumeric())
Ответы (1 шт):
Внутренний цикл while не нужен. Нужна переменная, в зависимости от значения которой мы будем знать с какой стороны от "до" мы находимся. В списки нужно добавлять не результат проверки i.isnumeric() (это всегда True или False), а проверять это условие, и в зависимости от результата добавлять или не добавлять само значение i в один из списков.
Вариант исправления вашего кода:
dd = 'от 80 000 до 90 000 руб.'
s1=[]
s2=[]
b = dd.split(' ')
before_do = True # Изначально мы до "до"
for i in b:
if i == 'до':
before_do = False # Теперь мы после "до"
elif i.isnumeric():
if before_do:
s1.append(i)
else:
s2.append(i)
print(''.join(s1), ''.join(s2)) # 80000 90000
Вообще, можно сразу делить строку по разделителю ("до" или "-" - например, проверить какой из них есть в строке, потом по нему поделить), потом из обеих частей строки вытаскивать числа.
Также для извлечения значений удобно использовать регулярные выражения (будет работать с любым разделителем, кроме пробелов):
import re
dd = 'от 80 000 до 90 000 руб.'
s1, s2 = re.findall(r"[\d ]+", dd)
s1 = s1.replace(" ", "")
s2 = s2.replace(" ", "")
print(s1, s2)
Регулярное выражение немного кривое - будет вытаскивать куски и строки состоящие целиком из пробелов. Моих знаний регулярных выражений недостаточно чтобы это поправить только средствами регулярных выражений, можно просто отфильтровывать такие строки после поиска.