在python中如何在一组字符后创建新行

mi7gmzs6  于 2023-03-11  发布在  Python
关注(0)|答案(6)|浏览(87)

下面的代码:

text = input('Enter your text: ')
if len(text) >= 16:
    text = text.replace(' ', '\n')
    print(f'Your new text is:\n{text}')

如果用户输入blah blah blah blah,则用户将获得以下输出:

Your new text is:
blah
blah
blah
blah

我只是想知道如何让我的代码在16个字符标记之前的最后一个可用空间之后添加一个新行,所以输出应该是:

Your new text is:
blah blah blah
blah

我对python还是个新手,我觉得我缺少一些可以完成这个任务的方法。

doinxwow

doinxwow1#

出现最初问题的原因是text = text.replace(' ', '\n')将用换行符替换所有空格。
此外,如果用户输入的字符串非常长,则当前答案将不起作用-第二个print()可能导致一行超过16个字符。例如:

>>> text = "blah " * 20
>>> print(text[:15])
blah blah blah 
>>> print(text[15:])
blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah

为了让它可以处理任意长的用户输入,我建议使用一个循环:

>>> text = "blah " * 20
>>> while len(text) > 16:
...     index = text[:16].rindex(' ') # finds the last space in the first 16 chars
...     print(text[:index].strip()) # strip() removes trailing spaces
...     text = text[index:] # Updates text to remove what we just printed
... 
blah blah blah
blah blah blah
blah blah blah
blah blah blah
blah blah blah
blah blah blah

>>> print(text.strip()) # Prints any remaining text after the loop
blah blah
yc0p9oo0

yc0p9oo02#

text = input('Enter your text: ')
list_ = text.split(' ')

if len(text) >= 16:
   for i, j in zip(range(len(list_)),list_):
      if i == len(list_)-1:
         break
      print(j, end=' ')
   print('\n'+ j)
csbfibhn

csbfibhn3#

我会使用rindex来搜索空格的最后一次出现,然后记住索引位置,因为Python中的字符串是immutable,所以我只需要在中间加上一个\n来构造一个新的字符串,如下所示:

text = input('Enter your text: ')
if len(text) >= 16:
     last_space_before_16 = text[:16].rindex(' ')
     text = text[:last_space_before_16] + '\n' + text[last_space_before_16+1:]
     print(f'Your new text is:\n{text}')
zzoitvuj

zzoitvuj4#

我可以在这里建议一个基于正则表达式的方法:

inp = "blah blah blah blah"
output = re.sub(r'^(.{1,16})\s+', r'\1\n', inp)
print(output)

这将打印:

blah blah blah
blah

这里的策略是贪婪地匹配最多16个字符,然后断开空白字符,然后添加一个换行符进行替换。

qgelzfjb

qgelzfjb5#

import textwrap

text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vehicula lorem vitae quam commodo, at interdum lectus maximus."

wrapped_text = textwrap.fill(text, width=16)

print(wrapped_text)
x759pob2

x759pob26#

您可以使用以下代码将其限制为前16个字符:

text = text[:15]
print(text)

相关问题