我和我的丈夫正在参与一个名为Python挑战的编码难题。 我还没有走那么远,但是当我在2级上工作时,我发现自己对数据结构有所了解。

当您查看页面源代码时,这就是您所看到的。
- Tempos deViolência(nos游戏)
- 让我们学习Open-GL
- 巴西国家足球队预告片,2018年世界杯巴西队预告片,美丽的巴西
- 编写角色游戏
- พูดถึง最终幻想XVหลังเล่นจบ100%

所以这就是我解决这个问题的方法:
加载数据中
首先,我手动将文本复制并粘贴到.txt文件中。 然后,我使用Python的内置open
函数返回文件对象,并使用read ()
方法读取文件的内容。 我将内容保存到一个名为text
的变量中。
text = open('resources/level2.txt').read()
解决问题
现在我们有了一些文本,挑战是要我们编写一个程序来查找稀有字符,换句话说,找到该文本中最少重复的字符。
首先,我们需要知道每个字符重复多少次。 一旦有了这些信息,我们就可以找到重复最少的字符。
哪种数据结构对于存储此信息有用? 一本字典! 因为字典是键-值对的集合,所以在这里我们可以将字符用作键,将重复作为值。
因此,我将从定义字典开始。 我们称它为字符或字符频率。 我们将其设置为空字典。
char_frequency = {}
现在我们需要遍历字符串,获取每个字符,并在此字典中更新其频率。 因此,我们需要一个for
循环。
for char in text:
现在首先我们需要查看字典中是否有此字符。 如果我们确实具有此字符,则只需获得其频率值并将其增加1
。 否则,我们需要将其添加到字典中。 因此,我们将char的char_frequency设置为1
。
如果char在char_frequency中:
char_frequency [char] + = 1
其他:
char_frequency [char] = 1
让我们打印该词典,看看会得到什么。
print(char_frequency)
通过保存更改并按Ctrl
+ alt
+ n
在VScode中使用代码运行程序扩展名运行程序。

因此, '%'
被重复6104, '$'
被重复6046, '@'
被重复6157次,依此类推。
现在,此输出有点不可读。 因此,我将向您展示提高其可读性的技巧。 我们有一个称为漂亮打印的模块。 在代码的顶部,我们从pprint
模块导入pprint
函数
from pprint import pprint
使用此功能,我们可以更好地控制终端上的打印内容。
因此,现在,我们使用pprint
作为第二个参数,而不是常规的print函数,传递一个名为width
的关键字参数,该参数确定每行上的字符数。 如果此输出不适合,则此函数将添加换行符。 让我们将其设置为1,看看运行程序时会发生什么。
pprint(char_frequency, width =1)

寻找答案
因此,现在我们拥有解决此问题的所有信息。 下一步是按字符频率对字典进行排序。 但是,字典(如集合)是无序集合,我们无法对它们进行排序。 我们只能对列表进行排序。 因此,我们需要提取字典中的项目并将其放在列表中以进行排序。
基本上,我们需要取出每个键值对,将其转换为元组,然后将其放入列表中。 我们将得到一个易于排序的元组列表。 我们应该怎么做?
我将调用一个已sorted
内置函数,该函数从一个可迭代对象构建一个新的已排序列表。 此函数需要迭代并对其进行排序。 作为迭代,我将传递char_frequency.items()
。 此.items()
方法返回一个视图对象,该对象显示字典(键,值)元组对的列表。 因此,在这一点上,让我们看看如果打印此结果会得到什么。
print(sorted(char_frequency.items()))

我们得到一个元组列表! 在每个元组中,我们有两个项目:第一个是字符,第二个是重复或频率。
但是,如您所见,该列表未排序,因为默认情况下,此sorted
函数不知道如何对这些元组进行排序。
我们可以将第二个参数传递给已sorted
函数,以自定义排序顺序key
。 我们将其设置为lambda
,这是一个匿名函数。 此lambda
函数采用键值对kv
并返回该值。 在这种情况下,我们通过使用方括号[]
与一个或多个索引进行切片来访问元组中的值,以获取该索引处可用的值。 因此,此lambda
函数将返回的值为kv[1]
。 这是每个字符的频率,我们将使用它进行排序。
因此,让我们再运行一次该程序。

得到答案
最后,此列表中频率等于1的字符是我们问题的解决方案。 仅出现一次的稀有字符是e,q,u,a,l,i,t,y。 答案是“平等”。 我在URL中替换了equality
,这使我面临下一个挑战!

这将我们带到#pythonchallenge 2级解决方案的结尾。 感谢您的阅读和快乐编码!
