首頁 > 後端開發 > 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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板