Python 3.x基于字典的keygen帮助?

时间:2011-08-14 14:58:07

标签: python algorithm dictionary key-generator

我正在研究Python一个月,我正在尝试使用字典创建一个keygen应用程序。我们的想法是将name = input('Name:')中的每个字母与dict.keys()进行比较,并将每个字母的字母dict.values()打印为dict.keys()。这就是我写的:

name = input('Name: ')

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

我试着写这个......

for x in kalg.keys():
    print(x)[/code]

...但我需要保持print(x)结果,但我不知道该怎么做!如果我这样做:

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

'a'只保留字典的最后一个键:(。我认为这是因为print(x)在新行上打印dict.keys()的每个键但我不知道如何解决它(我尝试转换类型等...但它没有用。)

请你能帮我解决这个问题吗?我也不知道如何将字符串的每个字母与另一个字符串进行比较,并将dict.values()打印为正确的位置。

对不起这个愚蠢的问题,但我对编写python应用程序感到非常兴奋:)


@ Karl

我正在研究Python两本不同的书:Mark Luts的“学习Python”,它涵盖了Python 2和一个覆盖Python 3的口袋。我检查了口袋中的列表理解,并且Imanaged写了这个keygen的其他三个变体。现在我想问你如何在一个真实的应用程序中使用GUI来验证这个keygen的源代码,该GUI验证name_textbox和key_textbox标题是否匹配(我来自basic,这是我以前写的,只是为了给你一个想法)as keygen输出结果。我知道我可以尝试通过我自己做到这一点(我做了但是没有成功)但我想首先完成这本书(口袋里的一本)并理解Python的所有主要方面。谢谢你的耐心等待。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

调用print不能“保留”任何内容(因为没有变量可以存储它),并且重复分配给变量会替换先前的赋值。 (我不明白你对这个问题的推理; print(x)行为与a = x的行为方式无关,因为它们完全不同。)

你的问题归结为“我如何从几个类似的操作中保留一堆结果?”在概念层面上,答案是“将它们放入容器中”。但明确地将东西放入容器中比实际需要的更繁琐。你有一个你想要的数据的英文描述:“dict.values()为每个名字的字母等于dict.keys()”。实际上,等效的Python非常相似。

当然,我们实际上并不想为每个匹配的字母单独复制dict.values();我们实际上并不想将这封信与整套dict.keys()进行比较。作为程序员,我们必须更加精确:我们正在检查字母是否是字典的关键字,即它是否在dict.keys()的集合中。幸运的是,这个测试很容易写:对于给定的字母,我们检查letter in dict。找到这封信后,我们想要相应的值;我们通过正常查找来获得它,因此dict[letter]

然后我们用我们特殊的语法将所有内容包装起来,为我们提供我们想要的东西: list comprehension 。我们将括号放在列表中,然后在内部编写(一些计算输入元素结果的表达式)for(输入元素的变量名,因此我们可以在第一个表达式中使用它){ {1}}(输入元素的来源);我们还可以通过添加in(输入元素上的某些条件)来同时过滤输入元素。

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

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

它比你首先初始化dict更容易;惯用的Python代码实际上很少需要单词dict.keys()

全部放在一起:

dict