我有一个递归函数,打印一个字符串。 我想让函数返回它当前打印的字符串。处理建立一个递归函数的字符串
该代码基本上打印出不同层次的递归所需的字符串。
我正在考虑使用全局变量,但并不认为这听起来很pythonic。
我将多次调用此函数作为更大程序的一部分。
如果你想看看在当前的代码:
def check_if_multiple_sections(the_string):
level = 0
counter = 0
for char in the_string:
if char == '(':
level = level + 1
if level == 0:
counter = counter + 1
if char == ')':
level = level - 1
if level == 0:
counter = counter + 1
return counter
def break_it_up(the_string):
level = 0
counter = 0
break_points = []
for char in the_string:
if char == '(':
level = level + 1
if char == ')':
level = level - 1
if level == 0:
break_points.append(counter + 1)
counter = counter + 1
return break_points
def recur_markov_change(the_string, key):
#print("the_string: " + str(the_string) + " : key: " +str(key))
if key is not None:
#print(the_string)
#print("YEA")
print(str(the_string).split(' ')[0] +'^'+str(key) + ' ', end='')
else:
print('(TOP ', end ='')
key = ((the_string.split(' '))[0])[1:]
if len(the_string) < 2:
return
remaining_string = the_string.split(' ', 1)[1][:-1]
results = []
results.append(((remaining_string.split(' '))[0])[1:])
level = 0
counter = 0
if the_string.count('(') == 1:
items = the_string[1:-1]
both = items.split(' ')
print(str(the_string).split(' ',1)[1], end="") #This prints leaves
return
for char in remaining_string:
if char == '(':
level = level + 1
if char == ')':
level = level - 1
if level == 0 and char == ' ':
results.append(((remaining_string[counter+1:].split(' '))[0])[1:])
counter = counter + 1
answer = (key, results, remaining_string)
#print(answer)
if check_if_multiple_sections(remaining_string) > 1:
break_points = break_it_up(remaining_string)
sublines = []
prev_spot = 0
for breaks in break_points:
sublines.append(remaining_string[prev_spot:breaks].strip())
prev_spot = breaks
sublines.append(remaining_string[breaks:].strip())
for line in sublines:
if len(line) > 2:
print(' ', end='')
recur_markov_change(line, key)
print(')', end='')
given_string = '(TOP (SBARQ (WHNP_WDT Which) (SQ_VP (VBZ is) (ADJP_JJ last))) (PUNC ?))'
string_that_I_want_function_to_return = '(TOP (SBARQ^TOP (WHNP_WDT^SBARQ Which) (SQ_VP^SBARQ (VBZ^SQ_VP is) (ADJP_JJ^SQ_VP last))) (PUNC^TOP ?))'
recur_markov_change(given_string, None)
print("\ndesired string:")
print(string_that_I_want_function_to_return)
你可以把输入和输出的例子吗? – Pythogen
如果您复制并粘贴所有代码,在底部它将调用该函数,该函数将打印我想要的内容。 @Pythogen – Rorschach
我想,但我不知道如何得到它的功能@AER – Rorschach