Python两个文本并排排列,宽度精确

2024-06-28 15:42:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个练习,我有两个文本,“左”和“右”。
我需要创建一个函数,让它们以给定的宽度作为参数并排显示,所有这些都使用itertools和textwrap。
这是我的代码:

import textwrap
import itertools

def sidebyside(left,right,width=79):
    width = round((width+1)/2)
    leftwrapped = textwrap.wrap(left,width = width-1)
    
    for i in range(0,len(leftwrapped)):
        leftwrapped[i] = leftwrapped[i].ljust(width)
    
    rightwrapped = textwrap.wrap(right,width = width-1)
    
    for i in range(0,len(rightwrapped)):
        rightwrapped[i] = rightwrapped[i].ljust(width)
    
    pipes = ["|"]*max(len(leftwrapped),len(rightwrapped))
    
    paragraph = itertools.zip_longest(leftwrapped,pipes,rightwrapped, fillvalue="".ljust(width))
    result = ""
    for a in paragraph:
        result = result + a[0] + a[1] + a[2] + "\n"
    
    return(result)

这里有一个“左”的示例&;“对”:

left = (
    "Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
    "Sed non risus. "
    "Suspendisse lectus tortor, dignissim sit amet, "
    "adipiscing nec, utilisez sed sin dolor."
)

right = (
    "Morbi venenatis, felis nec pretium euismod, "
    "est mauris finibus risus, consectetur laoreet "
    "sem enim sed arcu. Maecenas sit amet eleifend sem. "
    "Nullam ac libero metus. Praesent ac finibus nulla, vitae molestie dolor."
    " Aliquam vestibulum viverra nisl, id porta mi viverra hendrerit."
    " Ut et porta augue, et convallis ante."
)

我的问题是,我得到了一些间距问题,即:对于第一行,对于给定的长度20,我有以下输出:

'Lorem     |Morbi ven '

但我需要这个输出:

'Lorem    |Morbi ven'

Tags: inrightforlenresultwidthleftitertools
1条回答
网友
1楼 · 发布于 2024-06-28 15:42:04

发现它,我的round函数不好,我必须做两个宽度,第一个是除法的圆,第二个是width - round(width/2)的结果。
谈话便宜,代码更好:
从itertools导入zip\u 导入文本包装

def sidebyside(left, right, width=79):
    mid_width = (width - (1 - width%2)) // 2
    return "\n".join(
        f"{l.ljust(mid_width)}|{r.ljust(mid_width)}" 
        for l, r in zip_longest(
            *map(lambda t: textwrap.wrap("".join(t), mid_width), (left, right)),
            fillvalue=""
        )
    )

相关问题 更多 >