如何在循环中迭代字母表并与列表进行比较

时间:2013-09-30 07:33:02

标签: python algorithm mpi

我正在使用MPI为我的作业构建一个密码破解程序,并选择使用我之前没有使用过的python。这不是一个复杂的我正在做的是假设密码长度为5个字符,只有字符,我将在程序中使用硬编码密码进行比较。

现在我正在保存我的password = list("aaamm")并且有一个名为cracker的方法

cracker(password, alphabet, thispass, position):
    password = original password, alphabet = map(chr, range(97, 123))

并且,此过程最初将等于= list("aaaaa")

由于我没有使用python之前我很难开发一个算法来检查thispass[0] == password[0]并且它们是否相等我移动到下一个位置pass[1] == password[1],但是如果没有然后将“a”增加到“b”并将其与password[0]进行比较。

我也在我的用于MPI进程的cracker函数中有位置,我将有2个进程在位置上工作(= 0即此传递的“a”),而第一个进程将从“a”检查到“m”和第二个从“n”到“z”。

我已经在程序的另一端分割了字母大小,我称之为cracker function。

我的主要问题是比较,mypass[0]password[0]理想情况下在循环内有这个很好但是无法确定如何有一个从“a”开始到任何字母范围的循环是

这是我的第一次,如果上面的一切都凌乱,请原谅我。

1 个答案:

答案 0 :(得分:0)

关于比较:在Python中,你可以使用==运算符(当然还有!=)比较很多东西,甚至整个列表,甚至是嵌套的东西:

a = [ 'a', 'b', 'c' ]
b = [ 'a', 'b', 'c' ]
c = [ 'x', 'b', 'y' ]
if a == b:  # will be true
  …
if a == c:  # will be false
  …
if a[1] == c[1]:  # will be true
  …

这也适用于文字:

if ([ [ 'a', 'b' ], [ 'c', 'd', 'e' ], 'f', 'g' ] ==
    [ [ 'a', 'b' ], [ 'c', 'd', 'e' ], 'f', 'g' ]):  # will be true
  …

关于检查循环,我建议:

if len(password) != len(thispass):
  … # ignore attempts with wrong length, e. g. return False or similar
for position in range(len(password)):
  while thispass[position] != password[position]:
    try:
      thispass[position] = alphabet[alphabet.index(thispass[position]) + 1]
    except IndexError:  # no further alphabet element for this position?
      thispass[position] = alphabet[0]  # set to first element of alphabet (wrap)

通过这种方式,您可以通过测试和修改每个位置来找到密码,直到匹配为止。如果要匹配的密码包含字母表外的元素,它将不会终止。