日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【Python CheckiO 题解】Remove Accents

發布時間:2023/12/10 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python CheckiO 题解】Remove Accents 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CheckiO 是面向初學者和高級程序員的編碼游戲,使用 Python 和 JavaScript 解決棘手的挑戰和有趣的任務,從而提高你的編碼技能,本博客主要記錄自己用 Python 在闖關時的做題思路和實現代碼,同時也學習學習其他大神寫的代碼。

CheckiO 官網:https://checkio.org/

我的 CheckiO 主頁:https://py.checkio.org/user/TRHX/

CheckiO 題解系列專欄:https://itrhx.blog.csdn.net/category_9536424.html

CheckiO 所有題解源代碼:https://github.com/TRHX/Python-CheckiO-Exercise


題目描述

【Remove Accents】:給定一個 Unicode 字符串,去除其中的重音符號,é:帶重音的字母,e:不帶重音的字母,? :獨立的重音符號。

【鏈接】:https://py.checkio.org/mission/remove-accents/

【輸入】:字符串(Unicode)

【輸出】:無重音的 Unicode 字符串

【前提】:0≤|input|≤40

【范例】

checkio(u"préfèrent") == u"preferent" checkio(u"loa?i tr?n l??n") == u"loai tran lon"

解題思路

了解這些特殊字符,比如:Spicy Jalape?o 使用的是拉丁字母“n”緊跟著一個“~”組合而成的字符(U+0303),也就是 Spicy Jalapen\u0303o

利用 unicodedata 模塊,normalize() 方法將字符串進行分解,利用 combining() 方法對字符做檢查,判斷它是否為一個組合型字符(包含重音字符等特殊字符),如果不是組合型字符,則將其組成一個新的字符串。

知識擴展

unicodedata.normalize(form, unistr) 方法:

把一串 Unicode 字符串轉換為普通格式的字符串,具體格式(form)支持 NFC、NFKC、NFD 和 NFKD 格式。

一些文本元素既可以使用靜態的預先組合好的形式,也可使用動態組合的形式。Unicode 字符的不同表示序列被認為是等價的。如果兩個或多個序列被認為是等價的,Unicode 標準不規定哪一種特定的序列是正確的,而認為每一個序列只不過與其它序列等價。如果需要一種單一的表示方式,可以使用一種規范化的 Unicode 文本形式來減少不想要區別。Unicode 標準定義了四種規范化形式: Normalization Form D (NFD),Normalization Form KD (NFKD),Normalization Form C (NFC),和Normalization Form KC (NFKC)。

NFD 和 NFKD 將可能的字符進行分解,而 NFC 和 NFKC 將可能的字符進行組合。

unicodedata 模塊文檔:https://docs.python.org/zh-cn/3.7/library/unicodedata.html

以下舉例說明不同格式(form)的區別:

例(NFC):

import unicodedatain_string = u"préfèrent" for c in unicodedata.normalize('NFC', in_string):print(c)

輸出結果

p r é f è r e n t

例(NFD):

import unicodedatain_string = u"préfèrent" for c in unicodedata.normalize('NFD', in_string):print(c)

輸出結果:

p r e ? f e ? r e n t

代碼實現

import unicodedatadef checkio(in_string):# remove accentsreturn ''.join(i for i in unicodedata.normalize('NFD', in_string) if not unicodedata.combining(i))# These "asserts" using only for self-checking and not necessary for auto-testing if __name__ == '__main__':assert checkio(u"préfèrent") == u"preferent"assert checkio(u"loa?i tr?n l??n") == u"loai tran lon"print('Done')

大神解答

大神解答 NO.1

from unicodedata import category, normalizedef checkio(string):return ''.join(c for c in normalize('NFKD', string) if category(c) != 'Mn')

大神解答 NO.2

from unicodedata import normalize, combining as accent from functools import partial as curry from itertools import filterfalse as removeiftake_apart = curry(normalize, "NFD") remove_accents = curry(removeif, accent) make_str = ''.joindef compose(*funcs):def composition(x):for func in funcs:x = func(x)return xreturn compositioncheckio = compose(take_apart, remove_accents, make_str)

大神解答 NO.3

from unicodedata import category as cat, name import redef checkio(s):return ''.join(eval("'{}'.{}er()".format( # evaluator*re.findall('LETTER (.?)', name(c)) or c, # "letters"'upp' if cat(c) == 'Lu' else 'low')) # letter casefor c in filter(lambda c: cat(c)[0] in 'PuZzLeS', s)) # letter generator

大神解答 NO.4

from unicodedata import normalizedef checkio(s):return ''.join(c for c in normalize('NFD', s) if c not in u"????????????????????")

總結

以上是生活随笔為你收集整理的【Python CheckiO 题解】Remove Accents的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。