一項大學作業要求我們用 Python 撰寫一個分析推文的程式。部分任務是撰寫一個函式,該函式可以識別字串句子中的單詞是否有效,并且可以被計數。這是問題:
任務 8 有效詞
我們也可能只想查看資料集中的有效單詞。如果以下三個條件都為真,則一個詞將是一個有效詞:
? 單詞僅包含字母、連字符和/或標點符號*(無數字)。
? 最多有一個連字符“-”。如果存在,則必須用字符包圍(“ab”有效,但“-ab”和“ab-”無效)。
? 最多有一個標點符號。如果存在,它必須位于單詞的末尾(“ab”、“cd!”和“.”有效,但“a!b”和“c.”無效)。
注意:對于這個問題,第三個條件也適用于撇號,盡管真正的“有效”單詞包含它們。
撰寫一個函式 valid_words_mask(sentence),它接受一個輸入引數 sentence(型別字串)并回傳元組:(int, list[]),其中:
? int 是找到的有效字數。
? list[] 按順序包含每個單詞的布林值 True 或 False,具體取決于該單詞是否有效。
*假設標點符號是任何不是字母數字的字符(撇號和連字符除外,它們根據說明單獨處理)。
這是我經過多天的掙扎后撰寫的代碼。它似乎只回傳回圈的一次迭代。請記住,我是一個初學者程式員,并且只應用了我們學到的幾個概念。:) 感謝您的反饋。
def valid_words_mask(sentence):
"""Takes a string sentence input and determines whether words are valid"""
import string
punctuation = list(string.punctuation)
punctuation.remove("-")
word_list = " ".split(sentence)
valid_count = 0
valid_list = []
for word in word_list:
hyphen_count = 0
digit_count = 0
punctuation_count = 0
for i in range (0, len(word)):
#Checks whether given character is a punctuation mark
if word[i] == "-":
hyphen_count = 1
for i in range (0, len(word)):
#Checks whether given character is a digit
if word[i].isdigit() == True:
digit_count = 1
for i in range (0, (len(word) - 1)):
if word[i] in punctuation:
punctuation_count = 1
if digit_count < 1 and hyphen_count < 2 and punctuation_count < 1:
if word[0] != "-" and word[-1] != "-":
validity = True
else: validity = False
if validity == True:
valid_count = 1
valid_list.append(validity)
final_tuple = (valid_count, valid_list)
return final_tuple
sentence = "these are valid words"
print(valid_words_mask(sentence))
uj5u.com熱心網友回復:
問題在于這條線:
word_list = " ".split(sentence).
word_list是一個空串列。
代替
word_list = sentence.split()。
uj5u.com熱心網友回復:
您的某些縮進似乎關閉了。嘗試:
if digit_count < 1 and hyphen_count < 2 and punctuation_count < 1:
if word[0] != "-" and word[-1] != "-":
validity = True
valid_count = 1
else: validity = False
uj5u.com熱心網友回復:
在定義什么構成標點符號時,此任務的說明令人困惑,這意味著以下代碼可能不適合您。
但是,您應該考慮將功能分解為其組成部分。特別是,您有 3 條“規則”,因此請撰寫 3 個互補功能:每個都簡潔。然后將這些規則組合到另一個“驅動程式”函式中變得更容易。這是一個例子:
from string import ascii_lowercase, punctuation
HYPHEN = '-'
PUNCTUATION = punctuation.replace(HYPHEN, '')
VCHARS = ascii_lowercase punctuation
def valid_chars(word):
return all(c in VCHARS for c in word)
def valid_hyphens(word):
return word.count(HYPHEN) == 0 or (word[0] != HYPHEN and word[-1] != HYPHEN)
def valid_punctuation(word):
pcount = sum(1 for c in word if c in PUNCTUATION)
return pcount == 0 or (pcount == 1 and word[-1] in PUNCTUATION)
def valid_words_mask(sentence):
valid_count = 0
valid_list = list()
for word in sentence.lower().split():
if v := valid_chars(word) and valid_punctuation(word) and valid_hyphens(word):
valid_count = 1
valid_list.append(v)
return valid_count, valid_list
print(valid_words_mask('Hello world??'))
輸出:
(1, [True, False])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/467864.html
