提升Python Checkio之The Most Wanted

2019-11-30  本文已影响0人  龚达耶

You are given a text, which contains different english letters and punctuation symbols. You should find the most frequent letter in the text. The letter returned must be in lower case.

While checking for the most wanted letter, casing does not matter, so for the purpose of your search, "A" == "a". Make sure you do not count punctuation symbols, digits and whitespaces, only letters.

If you have two or more letters with the same frequency, then return the letter which comes first in the latin alphabet. For example -- "one" contains "o", "n", "e" only once for each, thus we choose "e".

Input: A text for analysis as a string (unicode for py2.7).

Output: The most frequent letter in lower case as a string.

# -*- coding: gbk -*- 
from collections import Counter
d = Counter()
def checkio(text):
    lower_text = text.lower()
    b=[]
    for each in lower_text:
        if each.islower():
            b.append(each)
#     排序
    c=sorted(b)
#     判断是否有重复
    if sorted(list(set(c)))==c:
        return c[0]
    else:
        for each2 in c:
            d[each2]=d[each2]+1
        for key in dict(d.most_common(1)).keys():
#             如果不重置就会一直添加
            d.clear()
            return key

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.")
上一篇下一篇

猜你喜欢

热点阅读