【发布时间】:2016-12-08 23:41:16
【问题描述】:
我有一个打印字符串的递归函数。 我希望函数返回它当前打印的字符串。
代码基本上在不同的递归级别打印出我想要的不同字符串。
我在考虑使用全局变量,但不认为这听起来很 Python。
我会在一个更大的程序中多次调用这个函数。
如果您想查看当前的代码:
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
-
我想,但我不知道如何在 @AER 函数之外获取它
-
是的。问题是我如何让函数返回打印的字符串而不是打印它。
-
我现在喜欢全局变量的声音。哈哈。
标签: python python-3.x recursion