当前位置:   article > 正文

phthon学习小练习——自动换行功能_ph应用如何自动转行

ph应用如何自动转行

编写一个小程序,能够实现将一个很长的英文行折成两行 或者更多的行。要求能够在指定的列前换行,也可以在界面的边界换行。注意程序应当比较智能,如考虑在一个单词很长,或者在指定的列前面没有空白等特殊情况。尽可能的考虑较多的异常情况。具体功能参照 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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58

三、各种策略功能测试

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/423297
推荐阅读
相关标签
  

闽ICP备14008679号