如何使这段代码与其他程序交互?

时间:2014-05-02 18:14:03

标签: python passwords

所以我制作了一个代码,它是一种强力密码猜测器,用于猜测3个字母的密码。

我知道这段代码不正确,因为while语句显然是错误的,所以我该如何解决?

另外,我怎么能让这段代码与其他程序交互?

例如:

Winrar有一些文件需要3个字的密码,并且有一个输入屏幕,您可以在其中键入密码。我怎么能让我的代码互动或者键入'在该密码内输入框?

import random
import string

while password != correct: 
    letter 1 = random.choice(string.letters)
    letter 2 = random.choice(string.letters)
    letter 3 = random.choice(string.letters)
    word = '%s%s%s'%(letter1, letter2, letter3) 
    if word == password:
        print "The code is %s"%(word) 
    else:
        break; 

1 个答案:

答案 0 :(得分:2)

这是一种可怕的方式,但...... ....

import random
import string

while True:
    # Do it until the `if` block says it's right, then break.
    word = ''.join([random.choice(string.letters) for _ in range(3)])
    if word == password:
        print "The code is %s" % (word)
        break

编辑:''.join([random.choice(string.letters) for _ in range(3)])根据您在评论中的要求进行了解释。

[x for x in list_of_xs]是列表理解。你可以对结果项进行转换(例如,1-10根中的所有完美正方形都是[x**2 for x in range(1,11)]或更简单地[x**2 for x in [1,2,3,4,5,6,7,8,9,10] ]。有很多关于此的信息,以及大量规范的SO答案

你已经使用的

random.choice(string.letters),所以你得到的很多。 ''.join正在使用str.join命令,该命令将可迭代的字符串组合成一个字符串,使用str作为分隔符。 ", ".join(["Eggs","Cheese","Bread","Milk"])会产生"Eggs, Cheese, Bread, Milk"。在这种情况下,我使用空字符串进行组合。

基本上我正在构建一个包含三个random.choice(string.letters)的列表(_并不是特别的,它只是下一个程序员的符号,表示这个变量不是必需的。{{ 1}}是[do_something for _ in range(x)] s do_something long列表的常用惯用法,然后将它们组合在一起,在它们之间有一个空字符串(换句话说,它们之间没有任何东西)

也许

x

但老实说,你要做的是:

import random
import string

while word != password:
    # do the same stuff

为了预先解决您的问题,import itertools as it for attempt in (''.join(combo) for combo in it.combinations(string.letters,3)): if attempt == password: print "success:",attempt else: print "failure" (我导入为itertools)有一个方法it,它返回您传递序列的可迭代的所有唯一组合长度combinations。符号为r。它返回一个元组列表,然后需要以与上面相同的方式组合。

唯一失败的方法是它无法捕获itertools.combinations(iterable,r)之类的密码。任何重复的字符都不会显示在"aaa"

至于你的标题:“如何使这些代码与其他程序交互”对于这个问题来说太宽泛了。不幸的是,它并不适合。