checkio通关游戏2

问题:

给你一个其中包含不同的英文字母和标点符号的文本,你要找到其中出现最多的字母,返回的字母必须是小写形式,

当检查最想要的字母时,不区分大小写,所以在你的搜索中 "A" == "a"。 请确保你不计算标点符号,数字和空格,只计算字母。

如果你找到 两个或两个以上的具有相同的频率的字母, 返回那个先出现在字母表中的字母。 例如 -- “one”包含“o”,“n”,“e”每个字母一次,因此我们选择“e”。

输入: 用于分析的文本.

输出: 最常见的字母的小写形式。

前提::
密码只包含ASCII码符号

0 < len(text) ≤ 105


解答如下:

import re #正则匹配模块
from collections import Counter #对列表元素出现频率进行排序,降阶
def checkio(text: str) -> str:
    length = len(text)
    text = text.lower()
    result = re.findall('[a-zA-Z]', text)#去掉列表中的符号
    count = Counter(result)#按出现次数降阶排序
    count_list = list(count.values())#返回字典中所有的值
    max_values = max(count_list)#ASCII码值中最大的
    print(count_list)
    max_list = []
    
    for k,v in count.items():#遍历key和value
        if v == max_values:
            max_list.append(k)#添加在末位
        max_list = sorted(max_list)#从小到大排序
    print(max_list)
        
    return max_list[0]
            
    #replace this for solution
    

if __name__ == '__main__':
    #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.")



你可能感兴趣的:(python练习)