1. 題目
第 0011 題: 敏感詞文本文件 filtered_words.txt,里面的內(nèi)容為以下內(nèi)容骡和,當(dāng)用戶(hù)輸入敏感詞語(yǔ)時(shí),則打印出 Freedom凡简,否則打印出 Human Rights愈案。
第 0012 題: 敏感詞文本文件 filtered_words.txt夺鲜,里面的內(nèi)容和0011題一樣惠勒,當(dāng)用戶(hù)輸入敏感詞語(yǔ)秕衙,則用 星號(hào) * 替換迁央,例如當(dāng)用戶(hù)輸入「北京是個(gè)好城市」掷匠,則變成「**是個(gè)好城市」。
北京
程序員
公務(wù)員
領(lǐng)導(dǎo)
牛比
牛逼
你娘
你媽
love
sex
jiangge
2. 思路
- 首先岖圈,從敏感詞文件中讀取到敏感詞匯讹语,放入容器中
- 然后,獲取用戶(hù)輸入幅狮,判斷輸入是否包含敏感詞匯募强, 并輸出相對(duì)應(yīng)的結(jié)果(0012題則需要對(duì)字符串進(jìn)行替換)。
3. 實(shí)現(xiàn)
# -*- coding: utf-8 -*-
def get_filters(path):
if path is None:
return
filters = []
with open(path, encoding="utf-8") as f:
for line in f.readlines():
if "\n" in line:
filters.append(line[:-1])
else:
filters.append(line)
return filters
def main_0011():
filters = get_filters("1.txt")
while 1:
tmp = input("plz input: ")
if tmp == "0":
print("Exit")
break
else:
if tmp in filters:
print("Freedom")
else:
print("Human Rights")
if __name__ == "__main__":
main_0011()
def main_0012():
filters = get_filters("1.txt")
while 1:
tmp = input("plz input:")
if tmp == "0":
print("Exit")
break
for filter_word in filters:
new_str = ""
if filter_word in tmp:
if len(re.findall(u"[\u4e00-\u9fa5]+", filter_word)) > 0:
len_new_str = len(filter_word)
else:
len_new_str = 1
for i in range(len_new_str):
new_str += "*"
tmp = str(tmp).replace(filter_word, new_str)
print(tmp)
0012題要求將北京替換為**
兩個(gè)星號(hào)崇摄, 所以需要先計(jì)算敏感詞匯的字符數(shù)擎值, len()函數(shù)即可達(dá)到目的。當(dāng)敏感詞匯為一個(gè)英文單詞時(shí)逐抑,只替換成一個(gè)星號(hào)即可鸠儿。
本例中采用正則來(lái)匹配敏感詞中是否含有中文。
4. 字符串前面加r
或者u
的意義
- 字符串前面加
r
是為了告訴編譯器這個(gè)string是個(gè)raw string,不要轉(zhuǎn)義 '' 进每,一般用于正則表達(dá)式汹粤, re模塊中。 - 字符串前面加
u
是為了表示該字符串為Unicode編碼的田晚。 - 字符串前面加
b
是為了令字符串以字節(jié)形式表示嘱兼。