首页 > 后端开发 > Python教程 > 关于文字的一件事

关于文字的一件事

DDD
发布: 2024-12-30 19:07:10
原创
736 人浏览过

The one about words

每周挑战 299

穆罕默德·S·安瓦尔 (Mohammad S. Anwar) 每周都会发出“每周挑战”,让我们所有人都有机会为两周的任务提出解决方案。我的解决方案首先用Python编写,然后转换为Perl。这对我们所有人来说都是练习编码的好方法。

挑战,我的解决方案

任务 1:替换单词

任务

给你一组单词和一个句子。

编写一个脚本来替换给定句子中以给定数组中的任何单词开头的所有单词。

我的解决方案

对于此任务,我使用正则表达式进行转换。完整代码为

def replace_words(words: list[str], sentence: str) -> str:
    regexp = r"(?<![a-z])(" + "|".join(map(re.escape, words)) + r")([a-z]*(?:'[a-z]+)?)"
    return re.sub(regexp, r'', sentence)
登录后复制
登录后复制

第一个括号 (?

对于来自命令行的输入,我将最后一个值作为句子,其他所有内容作为单词。

示例

$ ./ch-1.py cat bat rat "the cattle was rattle by the battery"
the cat was rat by the bat

$ ./ch-1.py a b c "aab aac and cac bab"
a a a c b

$ ./ch-1.py man bike "the manager was hit by a biker"
the man was hit by a bike

$ ./ch-1.py can "they can't swim"
they can swim

$ ./ch-1.py row "the quick brown fox"
the quick brown fox
登录后复制
登录后复制

任务 2:单词搜索

任务

您将获得一个字符网格和一个字符串。

编写一个脚本来确定是否可以在给定的字符网格中找到给定的字符串。您可以从任何地方开始并采取任何正交路径,但不能重复使用网格单元。

我的解决方案

对于此任务,我首先检查所有行是否具有相同的列数。然后我检查每个单元格。如果该单元格中的字母是该单词的第一个字母,我将调用 find_match 函数。如果返回 true,则该函数将返回 true。如果没有,我将继续处理包含起始字母的下一个单元格。如果不存在,我返回 false。

def word_search(matrix: list[list[str]], word: str) -> bool:
    rows = len(matrix)
    cols = len(matrix[0])

    for row in range(rows):
        if len(matrix[row]) != cols:
            raise ValueError("Row %s has the wrong number of columns", row)

    for row in range(rows):
        for col in range(cols):
            if matrix[row][col] == word[0]:
                if find_match(matrix, word[1:], [[row, col]]):
                    return True

    return False
登录后复制

find_match 函数是一个递归函数。它需要三个参数

  1. 矩阵
  2. 单词的剩余字母(未匹配到的字母)
  3. 我们访问过的 [row,col] 对单元格的列表(Perl 中的 arrayref)。

从最后一个位置开始,我们可以移动四个方向之一(上、下、左或右)。我检查移动这个方向不会让我们出界或者是我们已经使用过的单元格。如果不是,并且该单元格中的字母与我们要查找的字母匹配,我会再次调用该函数,从单词变量中取出第一个字母,并添加新位置。如果我到达没有剩余字母的地步,则可以找到该单词并返回 True。

def replace_words(words: list[str], sentence: str) -> str:
    regexp = r"(?<![a-z])(" + "|".join(map(re.escape, words)) + r")([a-z]*(?:'[a-z]+)?)"
    return re.sub(regexp, r'', sentence)
登录后复制
登录后复制

示例

$ ./ch-1.py cat bat rat "the cattle was rattle by the battery"
the cat was rat by the bat

$ ./ch-1.py a b c "aab aac and cac bab"
a a a c b

$ ./ch-1.py man bike "the manager was hit by a biker"
the man was hit by a bike

$ ./ch-1.py can "they can't swim"
they can swim

$ ./ch-1.py row "the quick brown fox"
the quick brown fox
登录后复制
登录后复制

以上是关于文字的一件事的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板