"Python 3.x字典基础keygen帮助?"

2024-09-30 18:18:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我在研究Python一个月,并试图使用字典来制作keygen应用程序。这个想法是将name=input('name:')中的每个字母与数字键()并作为结果打印dict值()每个字母的名称等于数字键(). 我就是这么写的:

name = input('Name: ')

kalg = dict()
kalg['a'] = '50075'
kalg['b'] = '18099'
kalg['c'] = '89885'
etc...

我试着写这个。。。在

^{pr2}$

…但我需要保留打印结果,但我不知道怎么做!如果我这样做:

for x in kalg.keys():
    a = x

“a”只保留字典的最后一个键:(。我以为是因为print(x)会打印数字键()在一个新的行,但我不知道如何解决它(我试图通过转换类型等。。。但没用)。在

你能帮我解决这个问题吗?我也不知道如何将一个字符串中的每个字母与另一个字符串进行比较并打印dict.值()结果正确。在

很抱歉这个愚蠢的问题,但我对编写python应用程序太兴奋了:)


@卡尔

我正在研究Python的两本不同的书:markluts的《学习Python》,其中包括Python 2和一个口袋,里面装着Python3。我检查了口袋里的清单理解,并设法写出了这个keygen的另外三个变体。现在我想问你,我如何在一个真实的应用程序中实现这个keygen的源代码,这个GUI验证name_textbox和key_textbox的标题是否匹配(我来自basic,所以这是我以前写的,只是给你一个想法)作为keygen输出结果。我知道我可以自己做这件事(我做过,但没有成功),但我想先完成这本书(袖珍版),了解Python的所有主要方面。谢谢你的耐心。在


Tags: 字符串name名称应用程序input字典字母etc
2条回答

调用print不能“保留”任何内容(因为没有变量可存储在其中),重复地分配给一个变量将替换之前的赋值。(我不明白你对这个问题的推理;print(x)的行为与a = x的行为无关,因为它们是完全不同的事情。)

你的问题可以归结为“我如何从几个类似的操作中保留一堆结果?”在概念层面上,答案是“把它们放进一个容器里”。但是显式地将东西放入容器中比实际需要的更乏味。您有所需数据的英文描述:“dict.值()每个字母的名称等于数字键()". 事实上,等效的Python惊人地相似。在

当然,我们并不希望每个匹配的字母都有一个单独的dict.values();我们也不想将这个字母与整个{}集进行比较。作为程序员,我们必须更加精确:我们正在检查字母是否是dict的键,即它是否在dict.keys()的集合中。幸运的是,这个测试编写起来很简单:对于给定的字母,我们检查letter in dict。当找到字母时,我们需要相应的值;我们通过正常查找得到它,因此dict[letter]。在

然后我们用特殊的语法来结束这一切:list comprehension。我们把括号放在一个列表中,然后在里面写下(一些从输入元素计算结果的表达式)for(输入元素的变量名,所以我们可以在第一个表达式中使用它)in(输入元素的源代码);我们可以同时额外地过滤输入元素,通过添加if(输入元素上的一些条件)。在

所以这很简单:[kalg[letter] for letter in name if letter in kalg]。请注意,我将name作为“元素的源”,因为它应该是这样的。在对问题的描述中,您清楚地解释了这一点—为什么要在现有的for循环中迭代dict.keys()?:)

现在,这个表达式将给我们一个结果的列表,例如.['foo','bar','baz']。如果我们想要一个连续的字符串(我假设dict中的所有值都是字符串),那么我们需要将它们连接起来。幸运的是,这也很简单。事实上,由于我们要将结果传递给一个接受一个参数的函数,所以有一个特殊的语法规则可以让我们去掉方括号,使事情看起来更整洁一些。在

初始化dict比一开始就初始化dict要容易得多;惯用的Python代码实际上很少需要单词dict。在

综合起来:

kalg = {'a': '50075', 'b': '18099', 'c': '89885'} # etc.
name = input('Name: ')
print(''.join(kalg[letter] for letter in name if name in kalg))

我只能猜测,但这可能是你想要的:

name = input('Name: ')
kalg = {'a':'50075', 'b': '18099', 'c': '89885'}
keylist = [kalg[letter] for letter in name]
print(" ".join(keylist))

相关问题 更多 >