簡體   English   中英

CS50 第 6 周 Python 可讀性

[英]CS50 Week 6 Python Readability

cs50 中的問題集 6 需要從 Python 的第 2 周開始重建可讀性項目
但是有一個問題我在C中寫代碼的時候沒有先遇到
程序對輸入中的每個字母使用 for 循環來檢查它是否都是句號、感嘆號或問號,它們都表示句子的結尾
但是 check50 向程序拋出的輸入有多個背靠背的句點,每個句點都算作自己的句子
所以問題是:
我如何改進這句話計數 function 只考慮其中一個時期,以防它背靠背遇到它們? 例如,我是否應該添加一個在 for 循環中看到下一個符號的條件,如果它也是一個句點,它只是忽略它?

def countSentences(input):
    counterS = 0
    for symbol in input:
        if symbol in ['.', '!', '?']:
            counterS += 1
    return counterS

您可以將前一個符號保存在另一個變量中。 那么如果和當前符號相同,就不要算了。

def countSentences(input):
    counterS = 0
    previous_symbol = None
    for symbol in input:
        if symbol in ['.', '!', '?']:
            if previous_symbol != symbol:
                counterS += 1
        previous_symbol = symbol
    return counterS

如果您只關心計算句子而不是跟蹤使用了哪個標點符號,您可以使用re.sub將重復的標點符號壓縮為單個句點 ( . )。 function 如下所示

文檔在這里

import re

def countSentences(input):
  counterS = 0
  for symbol in re.sub('[.!?]+', '.', input):
    if symbol in ['.', '!', '?']:
      counterS += 1
  return counterS

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM