2016-12-11 6 views
0

Ich versuche, ein Passwort-Cracker für ein Projekt in der Schule zu machen, aber ich habe ein Problem festgestellt. Hier ist der Code:Was ist falsch mit meinem Code?

dictfile = open('c:/ScienceFairDictionaryFolder/wordsEn.txt', 'r') 
DictionaryWords = dictfile.readlines() 

Password = "abductors" 

for x in DictionaryWords: 
    if x is Password: 
     print("Found it!") 
    else: 
     print("This password can't be guessed!") 

Also jedes Mal laufe ich diesen Code, ich nur bekommen:

"This password can't be guessed!" 

jedoch stellte ich sicher, das Wort im Wörterbuch war ich verwende, so dass ich nicht Verstehe, warum das Passwort nicht erraten wird. Gibt es etwas, was ich falsch mache mit dem Code, den ich benutze?

+4

1: Verwenden Sie keine 'is' für String-Vergleiche. Verwende '=='. 2: Sie müssen die Zeilenenden entfernen: 'if x.strip ('\ r \ n') == Passwort:'. – Matthias

Antwort

1

Sie müssen zwei Dinge mit Ihrem Code ändern: Verwenden Sie == für Zeichenfolgenvergleiche und entfernen Sie das Newline (\n) Zeichen, indem Sie es ersetzen.

dictfile = open('wordsEn.txt', 'r') 
DictionaryWords = dictfile.readlines() 

Password = "abductors" 

for x in DictionaryWords: 
    if x.replace("\n", "") == Password: 
     print("Found it!") 

    else: 
     print("This password can't be guessed!") 
1

Stepwise Beschreibung des Ansatzes vorgeschlagen:

  1. den Dateiinhalt lesen read() Methode statt readlines() verwenden.
  2. Erstellen Sie eine Liste von Wörtern mit der split() Methode. Dadurch werden auch die Zeilenumbruchzeichen entfernt.
  3. Überprüfen Sie, ob sich das Kennwort über den Operator in im Wörterbuch befindet. Dies ermöglicht es Ihnen, die for Schleife loszuwerden.

Dieser Code-Schnipsel sollte den Job erledigen:

with open('c:/ScienceFairDictionaryFolder/wordsEn.txt', 'r') as dictfile: 
    DictionaryWords = dictfile.read().split('\n') 

Password = "abductors" 

if Password in DictionaryWords: 
    print("Found it!") 
else: 
    print("This password can't be guessed!")