所以我制作了一个代码,它是一种强力密码猜测器,用于猜测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;
答案 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"
。
至于你的标题:“如何使这些代码与其他程序交互”对于这个问题来说太宽泛了。不幸的是,它并不适合。