У меня возникла проблема в течение нескольких дней, и я не могу найти решение. У меня есть код, в котором функция принимает строку операторов и операндов и возвращает их список. Функция предназначена для поиска скобок, и в случае ее обнаружения она напоминает себя со строкой внутри скобок и добавляет ее в список в ранее созданный пустой список. Например, если я отправляю строку «= int int», возвращаемый список будет ["=", "int", "int"]. Если я отправил строку «+ (+ int int) int», то возвращаемый список будет [«+», [«+», «int», «int»], «int»].Добавление списка как объекта в существующий список
Однако проблема возникает, когда строка в форме «= (+ int int) (+ int int)» отправляется, то есть строка с двумя скобками одна за другой. Возвращаемый список становится ["=", ["+", "int", "int", ["+", "int", "int"]]], но желаемый результат должен быть: ["= ", [" + "," int "," int "], [" + "," int "," int "]]. Код указан ниже, и мне действительно нужна помощь в определении того, что с ним не так.
def convert(string):
string=" "+string
lst = []
i = 0
while i < len(string):
if string[i] == "(":
p = 0 #keeps track of parantheses
i2 = 0
for i2 in range(len(string[i+1:])):
if i2 == ")" and p == 0:
break
elif i2 == "(":
p += 1
elif i2 == ")" and p > 0:
p -= 1
lst += [convert(string[i+1:i+1+i2+1])]
i += i2
if string[i] == " " and string[i+1] != "(":
try:
lst += [getWord(string[i::])]
except:
pass
i += 1
return lst
Я очень благодарен за вашу помощь, спасибо!
EDIT: функция также использует другую функцию, которая возвращает слово.
def getWord(string):
word = string.split()[0]
for i in range(len(word)):
if word[i] == ')':
word = word[0:i]
break
return word
Testrun:
>>> convert("> (+ int int)(quotient real real)")
['>', ['+', 'int', 'int', ['quotient', 'real', 'real']]]
Большое спасибо за помощь! – CobraAn
Добро пожаловать! – bitoffdev