【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"loà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"loà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"̨̧̛̣̱̮̉̇̊̄̃̑̂̏̋̈̌̆̀́")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437811.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Power Platform之Power Automate新增RPA功能

​ 什么是RPA RPA( Robotic Process Automation 机器人流程自动化软件),是一种新型的人工智能的虚拟流程自动化机器人。RPA的核心是通过自动化、智能化技术来“替代人”进行重复性、低价值、无需人工决策等固定性流程化操作,从而…

【Python CheckiO 题解】Count Consecutive Summers

CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。 Chec…

Hyper-V第1代虚拟机和第2代虚拟机特性对照表

本文《Hyper-V第1代虚拟机和第2代虚拟机特性对照表》系小编在小伟博客看到的文档,转载给大家一起学习。 在 Windows Server 2012 R2 和 Windows 8.1 中内置的 Hyper-V 功能,新增了一种“第二代”虚拟机,从虚拟硬件的层面进行了提升&#xff0…

【Python CheckiO 题解】Speech Module

CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。 Chec…

Dynamics 365 Online和On-premises在开发方式上的差别

1、新建账号的不同:on-premises(下文简称op)是和ad绑定的,所以必须先在ad中新建账号后才能在CRM中新建。而online是和Office365(下文简称O365)绑定的,所以需在O365中新建账号再分配D365许可(前提是已购买license),当分配完许可后,…

【Python CheckiO 题解】Time Converter (12h to 24h)

CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。 Chec…

【转】Dynamics 365 On-Premise Server v9.0部署体验

期盼已久的Dynamics 365 On-Premise的版本升级终于在11月初姗姗来迟。 11月2日起已经可以在官方渠道下载正式版的Dynamics 365 Server v9.0安装文件,版本号9.0.2,随手附上中文版安装文件下载地址。 想必已经有不少小伙伴开始尝试各种升级、安装了吧。 …

【Python CheckiO 题解】Multicolored Lamp

CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。 Chec…

【转】五大方法,彻底永久关闭win10自动更新的方法【已验证有效】

自从微软大面积使用某员工后,思路越来越奇葩了,前天工作没做完,放在那里,第二天毫无羞耻的就给你重启了,那一瞬间,真想拿dollar到对面slay。于是就有下文,大部分内容是从网上摘录、归纳起来的。…

【Python CheckiO 题解】Probably Dice

CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。 Chec…

【Python CheckiO 题解】Roman Numerals

CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。 Chec…

Dynamics CRM 2016 安装

Dynamics CRM 2016 安装 CRM 2016出来了一段时间了,一直也没机会尝试一下,现在再测试ADFS的时候顺手装一个测试环境,记录一下整个安装配置流程。 首先准备好windows 2012 std,sql server 2014, dynamics crm2016安装…

【Python CheckiO 题解】Largest Rectangle in a Histogram

CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。 Chec…

Dynamics 365 on-premises 安装

安装Dynamics 365环境配置要求: 系统版本:Windows Server 2016 SQL 版本: Microsoft SQL Server 2016 SP2 Dynamics 365 版本:CRM9.0-Server-CHS-amd64 安装步骤: 一.在虚拟机安装Windows Server 2016 二.安装好…

【Python CheckiO 题解】Date and Time Converter

CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。 Chec…

2.1Dynamics 365 安装问题——无法访MSCRM_CONFIG数据库

1. 问题 2. 原因 出现此问题的一个或多个下列条件都为真︰ 在多务器中安装 Microsoft Dynamics 365。然后,直接在运行 Microsoft SQL Server 的服务器上安装 Microsoft Dynamics 365。但是,没有设置某些 SQL Server 权限。Mic…

【Python CheckiO 题解】Army Battles

CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。 Chec…

Dynamics 365 On-premises和Online 的不同

1、新建账号的不同:on-premises(下文简称op)是和ad绑定的,所以必须先在ad中新建账号后才能在CRM中新建。而online是和Office365(下文简称O365)绑定的,所以需在O365中新建账号再分配D365许可(前提是已购买license),当分配完许可后,…

华中科技大学文华学院 CSDN 高校俱乐部成立啦!

CSDN高校俱乐部是由中国专业的IT社区 CSDN(Chinese Software Develop Net)发起的,由全国各高校在校生代表自发加入的 IT 技术学习型组织。CSDN 由此搭建起行业与校园之间的桥梁,公益为各俱乐部提供行业资讯、技术学习、专家交流、…

4.Dynamics CRM 数据数量限制更改

1.在CRM2016中如果想要导出超过10000记录数据,更新 MaxRecordsForExportToExcel 这个字段的值。 SELECT MaxRecordsForExportToExcel FROM [FCCRM_MSCRM].[dbo].[OrganizationBase] 2.列表页面,最大显示的数量 5000,修改 DeploymentProper…