Форум сайта python.su
1
Всем хорошего дня! Я совсем новичок в python, прошу помочь с заданием по регулярным выражениям.
ЗАДАНИЕ:
Нужно написать программу, которая найдет в тексте ряд простых арифметических выражений и подсчитает их.
text = """ a=1 a=+1 a=-1 a=b a=b+100 a=b-100 b+=10 b+=+10 b+=-10 b+=b b+=b+100 b+=b-100 c-=101 c-=+101 c-=-101 c-=b c-=b+101 c-=b-101
def calculate(data, findall): matches = findall(r"([abc])([+-]?=)([abc])?([+-]?\d+)?") for v1, s, v2, n in matches:
Офлайн
44
особо не вникая в вашу задачу сразу скажу что for у вас не правильный
и вставьте ссылку на его url Офлайн
1
AD0DE412For был написан составителем задания, так что полагаю что все же правильный. К тому же требуется написать функцию именно по такому шаблону. Регулярное выражение делит уравнения на 4 блока, если сделать
особо не вникая в вашу задачу сразу скажу что for у вас не правильный
print (v1,s,v2,n)
a = 1 a = +1 a = -1 a = b a = b +100 a = b -100 b += 10 b += +10 b += -10 b += b b += b +100 b += b -100 c -= 101 c -= +101 c -= -101 c -= b c -= b +101 c -= b -101
Отредактировано AndrewP (Май 11, 2020 15:09:17)
Офлайн
857
Почисти данные от лишних символов, добавь недостающие символы.
AndrewPa = +1
a = 1
AndrewPb += +10
b = b + 10
AndrewPСтранно, что его функция принимает findall() но не принимает паттерн для findall(). Так что не обращай внимание на его критерии эталонности.
Эталонное решение занимает 11 строк, не содержит импортов
Отредактировано py.user.next (Май 11, 2020 16:17:11)
Офлайн
44
AndrewPда пожалуй
полагаю что все же правильный
a = [[1, 2, 3],[4, 5, 6],[7, 8, 9]] for q, w, e in a: print(q, w, e)
1 2 3 4 5 6 7 8 9
Имя переменной слева. ([a-z].+) Знак перед = (если есть). ([a-z][+|-]=.+) Имя переменной справа (если есть). (([a-z][+|-]=[a-z].+)|([a-z]=[a-z].+)) Число (если есть) со знаком (если есть). (.*[+|-]\d.+)
и вставьте ссылку на его url Отредактировано AD0DE412 (Май 11, 2020 20:48:14)
Офлайн
1
py.user.nextСпасибо за ответ, но я забыл указать,что задание проверяется другим файлом, там и задан findall
Почисти данные от лишних символов, добавь недостающие символы.
import re from regexp import calculate def findall(regexp): text = """ a=1 a=+1 a=-1 a=b a=b+100 a=b-100 b+=10 b+=+10 b+=-10 b+=b b+=b+100 b+=b-100 c-=101 c-=+101 c-=-101 c-=b c-=b+101 c-=b-101 """ return re.findall(regexp, text) result = calculate({'a': 1, 'b': 2, 'c': 3}, findall) correct = {"a": -98, "b": 196, "c": -686} if result == correct: print ("Correct") else: print ("Incorrect: %s != %s" % (result, correct))
Офлайн
124
import re text = """ a=+1 a=-1 a=b a=b+100 a=b-100 b+=10 b+=+10 b+=-10 b+=b b+=b+100 b+=b-100 c-=101 c-=+101 c-=-101 c-=b c-=b+101 c-=b-101 """ data = {"a":1, "b":2, "c": 3} def calculate(data): matches = re.findall(r"([abc])([+-]?=)([abc])?([+-]?\d+)?",text) for v1, s, v2, n in matches: if n == "": n = 0 if s =="="and v2 =="": data[v1] = int(n) elif s=="="and v2 !="": data[v1]=data[v2]+int(n) print("eee") elif s == "+="and v2 =="": data[v1]+=int(n) elif s =="+=" and v2 !="": data[v1] += data[v2] + int(n) elif s == "-="and v2 =="": data[v1]-=int(n) elif s =="-=" and v2 !="": data[v1] -= data[v2] + int(n) calculate(data) print(data)
Отредактировано xam1816 (Май 13, 2020 22:41:46)
Офлайн
124
где вы берете эти задания?,тоже изучаю Python,код выше попробовал решить,не знаю только правильно или нет.По проверке, у меня в коде надо логику править
Отредактировано xam1816 (Май 13, 2020 13:21:32)
Офлайн
124
отредактировал код выше,результат подошел
Офлайн
1
xam1816Огромное спасибо! Задание с этого курса https://www.coursera.org/learn/python-for-web/
отредактировал код выше,результат подошел
Офлайн