phthon学习小练习——自动换行功能

本文介绍了一个Python编写的程序,用于将长英文行按指定列宽度折行,考虑单词长度、空白和特殊情况,模拟Word的自动换行功能。算法详细描述了处理过程和功能实现,包括文本分割、行初始化、单词遍历及特殊情况判断。
摘要由CSDN通过智能技术生成

编写一个小程序,能够实现将一个很长的英文行折成两行 或者更多的行。要求能够在指定的列前换行,也可以在界面的边界换行。注意程序应当比较智能,如考虑在一个单词很长,或者在指定的列前面没有空白等特殊情况。尽可能的考虑较多的异常情况。具体功能参照 Word 的自动换行功能。

一、算法分析与设计

1. 算法的基本思想

这个算法基于文本折行的规则,通过判断单词的长度行的宽度来决定如何折行。如果单词可以完整地放入一行,则直接添加到当前行;如果单词长度超过行的宽度,则在单词中间折行,同时在行的末尾添加连字符“-”。同时,该算法考虑了空白字符、单词之间的空格以及输入的有效性。算法的时间复杂度取决于文本的长度和单词的数量。

2.算法实施策略

这个算法通过Python实现,首先将文本拆分成单词列表,然后逐个处理每个单词。对于每个单词,算法检查其是否可以添加到当前行。如果可以,则添加到当前行;如果不可以,则检查单词的长度是否超过行的宽度。如果超过,则在单词中间折行,并添加连字符“-”。最后,如果当前行不为空,则将其添加到结果列表中。最后,使用“\n”将结果列表中的所有行连接起来。

3.算法采用数据结构逻辑描述

这个算法使用字符串来存储文本,并使用字符串的长度来衡量文本的宽度。它使用列表来存储单词,并使用列表的长度来衡量单词的数量。它使用另一个字符串来存储当前正在处理的行,并使用字符串的长度来衡量当前行的宽度。

4.算法设计步骤

(1)定义函数:首先定义一个名为 wrap_text 的函数,该函数接受两个参数:文本 text 和每行的最大宽度 width。
(2)文本分割:使用 Python 的 split() 方法将文本按照空格分割成单词列表。
(3)行初始化:初始化一个空的列表 lines,用于存储折行后的文本行。同时,初始化一个空字符串 current_line,用于存储当前正在处理的行。
(4)遍历单词列表:遍历单词列表中的每个单词。
(5)行长度判断:如果当前行加上当前单词的长度不超过最大宽度,则在当前行后添加空格和当前单词。
(6)单词长度判断:如果当前单词的长度超过最大宽度,则将当前单词在最大宽度的位置折行,并将折行的部分添加到 lines 中,同时在折行的部分末尾添加连字符“-”。
(7)行添加:如果当前行不为空,则将其添加到 lines 列表中。
(8)结果连接:使用换行符 ‘\n’ 将 lines 列表中的行连接起来,并返回结果作为折行后的文本。

二、功能实现

#编写一个小程序,能够实现将一个很长的---英文行---折成两行或者更多的行。
#要求能够在----指定的列---前换行,也可以在界面的边界换行。
#注意程序应当比较智能,如考虑在一个单词很长,或者在指定的列前面没有空白等特殊情况。
#尽可的考虑较多的异常情况。具体功能参照 Word 的自动换行功能。
# 如果一行的字符数加上当前字符的字符数小于或等于指定的列宽,程序会将当前字符添加到当前行的末尾。
# 如果单词长度超过指定的列宽,在指定的列前没有空白,程序将在单词中间换行,末尾添加连字符。


# 定义一个函数名为 wrap_text,接受两个参数:文本 text 和每行的最大宽度 width
def wrap_text(text, width):
    # 将文本按照空格分割成单词列表
    # 使用 split() 方法将文本按照空格分割成单词列表
    words = text.split()

    # 初始化一个空的列表 lines,用于存储折行后的文本行
    lines = []

    # 初始化一个空字符串 current_line,用于存储当前正在处理的行
    current_line = ''

    # 遍历单词列表中的每个单词
    for word in words:

        # 判断当前行加上当前单词的长度是否超过最大宽度
        # 如果未超过最大宽度,则在当前行后添加空格和当前单词
        if len(current_line) + len(word) <= width:
            current_line += ' ' + word
        else:
            if len(word) > width:
                while len(word) > 0:
                    # 将当前单词的前 width-1 个字符添加到 lines 中,并在末尾加连字符-
                    lines.append(word[0:width-1]+'-')
                    # 更新当前单词,去掉首部的 width 个字符
                    word = word[width-1:]
            else:
                # 如果超过最大宽度,则将当前行添加到 lines 列表中
                lines.append(current_line.strip())
                # 将当前单词设置为新的当前行
                current_line = word

            # 如果当前行不为空,则将其添加到 lines 列表中
    if current_line:
        lines.append(current_line.strip())

        # 使用换行符 '\n' 将 lines 列表中的行连接起来,并返回结果作为折行后的文本
    return '\n'.join(lines)

# 使用 input() 函数获取用户输入的要折行的文本,并返回字符串类型的文本
text = input('请输入要折行的文本:')

# 使用 input() 函数获取用户输入的每行的最大宽度,并转换为整数类型的 width
width = int(input('请输入每行的最大宽度:'))

# 调用 wrap_text() 函数,使用用户输入的文本和每行最大宽度进行折行,并返回结果作为 wrapped_text
wrapped_text = wrap_text(text, width)

# 使用 print() 函数输出折行后的文本 wrapped_text
print(wrapped_text)

三、各种策略功能测试

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值