【Python CheckiO 题解】The Most Wanted Letter

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

题目描述

【The Most Wanted Letter】:给你一段文本,其中包含不同的英文字母和标点符号。你要找到其中那个出现最多的字母,返回的字母必须是小写形式。找这个“头号通缉字母”时,大小写不重要,所以对于你的搜索而言 “A” == “a”。 注意不要管标点符号、数字和空格,我们只要字母!如果你找到两个或两个以上出现频率相同的字母, 那么返回字母表中靠前的那个。 例如“one”包含“o”、“n”、“e”每个字母一次,因此我们选择“e”。

【输入】:包含待分析文本的字符串

【输出】:出现最多的字母(小写)

【前提】:输入的文本 text 只包含 ASCII 码字符;0 < len(text) ≤ 10 5

【范例】

checkio("Hello World!") == "l"
checkio("How do you do?") == "o"
checkio("One") == "e"
checkio("Oops!") == "o"
checkio("AAaooo!!!!") == "a"
checkio("abe") == "a"

解题思路

利用 Python 的 re 库,用 sub() 方法去除原字符串中标点符号、数字和空格,再用 lower() 方法将所有字母换为小写,再将每个字母和其对应的出现次数作为一个键值对传入到字典,dicts.items():将字典转换成可遍历的(键, 值) 元组数组,sorted(dicts.items(),key=lambda x:x[0]):按照 dicts.items() 数组的第一个元素(键,即字母)进行排序,最后返回这个字典值中最大的 key

代码实现

import re

def checkio(text: str) -> str:
    text = re.sub('[\W\d_]', '', text)
    text = text.lower()
    dicts = {}
    for i in set(text):
        dicts[i] = text.count(i)
    dicts = dict(sorted(dicts.items(),key=lambda x:x[0]))
    return max(dicts, key=dicts.get)


if __name__ == '__main__':
    print("Example:")
    print(checkio("Hello World!"))

    #These "asserts" using only for self-checking and not necessary for auto-testing
    assert checkio("Hello World!") == "l", "Hello test"
    assert checkio("How do you do?") == "o", "O is most wanted"
    assert checkio("One") == "e", "All letter only once."
    assert checkio("Oops!") == "o", "Don't forget about lower case."
    assert checkio("AAaooo!!!!") == "a", "Only letters."
    assert checkio("abe") == "a", "The First."
    print("Start the long test")
    assert checkio("a" * 9000 + "b" * 1000) == "a", "Long."
    print("The local tests are done.")

大神解答

大神解答 NO.1

import string

def checkio(text):
    text = text.lower()
    return max(string.ascii_lowercase, key=text.count)

大神就是大神,查了一下资料,ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',整个代码的意思就是先转换为小写字母,然后返回 ‘a-z’ 中在 text 里出现次数最多的字母

大神解答 NO.2

from string import ascii_lowercase as letters

checkio = lambda text: max(letters, key=text.lower().count)

同样的,在这个解答中,letters = 'abcdefghijklmnopqrstuvwxyz',后面也是返回 ‘a-z’ 中在 text 里出现次数最多的字母

发布了115 篇原创文章 · 获赞 348 · 访问量 37万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览