我想开发一种递归自动换行算法,它采用指定的字符串和换行长度(一行上的最大字符数)来返回输入长度的换行输出。我不想让它分开单词。例如,长度为20的This is the first paragraph that you need to input
返回为:
This is the first
paragraph that you
need to input
但是,我的功能目前正在打印:
This is the first paragraph
that you need to input
我的代码:
def wrap(text, lineLength):
temp=text.find(" ",lineLength-1)
if temp == -1:
return text
else:
return text[:temp+1]+'\n'+wrap(text[temp+1:], lineLength)
print wrap("This is the first paragraph that you need to input", 20);
为什么没有按照我的预期做到这一点,我该如何解决?
答案 0 :(得分:3)
您的代码可以进行一些更改:
def wrap(text, lineLength):
if len(text) <= lineLength: return text
temp = text.rfind(" ", 0, lineLength - 1)
if temp == -1:
return text
else:
return text[:temp+1]+'\n'+wrap(text[temp+1:], lineLength)
使用此输出:
This is the first
paragraph that you
need to input
但是,如果没有空间可以破解,你可能还想要强制执行:
def wrap(text, lineLength):
if len(text) <= lineLength: return text
temp = text.rfind(" ", 0, lineLength - 1)
if temp == -1:
return text[:lineLength - 1] + '-\n' + wrap(
text[lineLength - 1:], lineLength)
else:
return text[:temp+1] + '\n' + wrap(text[temp+1:], lineLength)
print wrap("Thisisthefirstparagraphthatyouneed to input", 20)
这导致:
Thisisthefirstparag-
raphthatyouneed to
input
答案 1 :(得分:1)
您正在使用find
并将start参数设置为19,这意味着您可以在第20个字符后找到第一个空格。你想要的是在第20个字符之前找到 last 空间。请改为使用rfind
。
答案 2 :(得分:0)
如果没有完全理解你正在使用哪个wordwrap算法,我怀疑这个问题很简单:
temp=text.find(" ",lineLength-1)
if temp == -1:
return text
如果在第一个lineLength-1
字符中找不到空格,则只需逐字返回文本。你不需要在那里或其他东西进行递归吗?
答案 3 :(得分:0)
def wrap(str,l):
ll=list(str)
i=l
while i < len(str):
ll.insert(i,"\n")
i=i+l
nstr="".join(ll)
print nstr
输出: 这是第一个pa
你是否
输入