出现最多次的字符 The Most Wanted Letter
上篇介绍的网站https://checkio.org/第一题就让我感受到了Python的魅力,也让我借着该题重温加深了很多知识点!现在贴出题目,我以及大神的解题。
题目
给你一个其中包含不同的英文字母和标点符号的文本,你要找到其中出现最多的字母,返回的字母必须是小写形式,
当检查最想要的字母时,不区分大小写,所以在你的搜索中 “A” == “a”。 请确保你不计算标点符号,数字和空格,只计算字母。
如果你找到 两个或两个以上的具有相同的频率的字母, 返回那个先出现在字母表中的字母。 例如 – “one”包含“o”,“n”,“e”每个字母一次,因此我们选择“e”。
输入: 用于分析的文本.
输出: 最常见的字母的小写形式。
我的解题
- 我的解题思路:通过两次循环分别得到“字母对应其个数的字典”“字典中个数最多的字母”
- 用到的知识点:字典的定义、赋值、循环,ord(),循环语句,条件语句
def checkio(text):
letter = 'z'
result = {}
for char in text.lower():
if 97<=ord(char)<=122:
if char in result.keys():
result[char] = result[char] + 1
else:
result[char] = 1
for key,value in result.items():
if value == max(result.values()):
if ord(key) < ord(letter):
letter = key
return letter
text = input("Input your text:")
print(checkio(text))
做这样一题写出上面代码也花去很多时间,比如怎么将字符转成数字等等,过程不去管,但却得到更多,枯燥学习的很多基础知识点可以用上,“草草”学习的知识点重新查看加深印象。
大神的解题
当看到大神的解题,一万只草泥马啊。。。
import string
def checkio(text):
text = text.lower()
return max(string.ascii_lowercase, key=text.count)
只有一行!!!嗯?max()!我也用到了啊!震惊后还是好好解读大神代码吧!且要好好解读下!
各种搜索,string.ascii_lowercase等价于’abcdefghijklmnopqrstuvwxyz’。key参数的含义是懂的,记得教程中有sorted()函数,sorted([-2,1,-3],key=abs)的意思是按绝对值将[-2,1,-3]进行排序,所以大神代码的意思:返回‘a-z’中在key中出现次数最多的字母。
总结
反思为什么我写不出来,第一:我不知道max()有key属性,第二:不知道string的count函数,第三:即使知道应该也想不出来。对于第三点只能继续深入学习积累,对于前两点有必要好好搜索学习,拓展并总结。
- 有key参数的函数:sorted(),max(),min().暂时查到这些,还有的话以后修改添加。
- string的属性与函数自己做一个测试总结:python中string总结