Seite 1 von 1

While Code...funktioniert nicht.

Verfasst: Dienstag 29. März 2016, 11:32
von felix234
Hallo! bin ein neuer Python Programmierer. Ich habe gestern die While Schleife entdeckt und gleich versucht ein Programm zu schreiben das mit Hilfe von seeehr vielen While Schleifen einen 4 stelligen Zahlencode knacken soll. Aus irgendeinem Grund funktioniert das Programm nicht. Ich habe mir das so vorgestellt: der Code besteht aus 4 variablen a,b,c,d und jede davon kann 9 Werte annehmen. Diese Variablen beginnen bei null und werden immer wenn der Code am ende der While Abfragen (zuerst wird der wert von a, b, c, d abgefragt und dieser wird dann als ein string gespeichert und mit dem Input am Anfang( dem Zahlen Code) verglichen.), wenn der Code falsch ist um 1 erhöht. Also wenn das Passwort nicht 0000 ist dann wird d um 1 erhhöht, und es springt zu d = 1 ->0001.
Wieder nicht der Code..bei 0009 wird dann auch b erhöht. da kommt dann für b = 0 eine schleife für b = 1 in der jeweils immer die Schleife für d eingebettet ist. Und das selbe passiert dann mit c und d. Am Ende habe ich dann einen riesigen Haufen Code bekommen.
Und mir kommt vor das irgendetwas mit dem Vergleichen des Inputs mit dem string a+b+c+d nicht stimmt. Weil das Programm rechnet einfach weiter und weiter wenn man 0000 als Code eingibt, und diesen sollte es auch gleich haben. Außerdem wäre ich sehr dankbar wenn mir jemand sagen kann wie man so einen Code verkürzen kann.... :mrgreen: :K
LG PS: Ich habe hier im Code jetzt nur den Fall das 0000 der Code ist eingebettet weil ich nicht alle 70000 Zeilen hier hochladen will

Code: Alles auswählen

pw = input("Wie lautet das Passwort(4 Zahlen)")
passwort = str (pw)
a = 0
b = 0
c = 0
d = 0
i = 0
i1 = 0
i2 = 0
i22 = 0
i3 = 0
i33 = 0
i4 = 0
i44 = 0
x = 1
var = str (a)
var2 = str (b)
var3 = str (c)
var4 = str (d)
w = var + var2 + var3 + var4
Zahlen = [0,1,2,3,4,5,6,7,8,9]
while x > 0:
    
    a = Zahlen[i]
    b = Zahlen[i2]
    c = Zahlen[i3]
    d = Zahlen[i4]
    var = str (a)
    var2 = str (b)
    var3 = str (c)
    var4 = str (d)
    w = var + var2 + var3 + var4
    while a == 0:
        while b == 0:
            while c == 0:
                while d == 0:
                    while passwort == w:
                        x = 0
                    while passwort != w:
                        i44 == i4
                        i4 == i44 +1        
print ("pw =",w)
         
Hier habe ich noch einen Ausschnitt, damit man sich das ganze besser vorstellen kann!

Code: Alles auswählen

              while d == 8:
                    while passwort == w:
                        x = 0
                    while passwort != w:
                        i44 == i4
                        i4 == 144 +1                  
                
                while d == 9:
                    while passwort == w:
                        x = 0
                    while passwort != w:
                        i22 == i2
                        i2 == i22 +1
        while b == 9:
            while c == 1:
                while d == 0:
                    while passwort == w:
                        x = 0
                    while passwort != w:
                        i44 == i4
                        i4 == i44 +1        
            
                
                while d == 1:
                    while passwort == w:
                        x = 0
                    while passwort != w:
                        i44 == i4
                        i4 == i44 +1
                
                
                
                while d == 2:
                    while passwort == w:
                        x = 0
                    while passwort != w:
                        i44 == i4
                        i4 == i44 +1

                
                while d == 3:
                    while passwort == w:
                        x = 0
                    while passwort != w:
                        i44 == i4
                        i4 == 144 +1                      

Re: While Code...funktioniert nicht.

Verfasst: Dienstag 29. März 2016, 12:09
von BlackJack
@felix234: Ähm, da würde ich doch einfach erst einmal sagen, lass die Finger von Problemen die mit Deinem Kenntnisstand noch nicht lösbar sind.

Und vor allem schreib keine 70.000 Zeilen Code für so etwas wo dann auch noch unsinige Zeilen drin stehen die nichts bewirken wie ``i44 == i4`` als Anweisung, wo das Ergebnis des Vergleichs für nichts verwendet wird. Und es haben sich da anscheinend auch Fehler eingeschlichen wenn da mal ``i4 == 144 +1`` und bei ähnlichem Code ``i2 == i22 +1`` steht. Ich vermute beim ersten war ``i44`` statt ``144`` gemeint, wobei ich keine Ahnunge habe was das überhaupt alles bedeuten soll.

Selbst wenn man das mit einer ``while``-Schleife lösen möchte, bräuchte man dazu genau *eine* ``while``-Schleife und auch nur eine Variable für jede der vier Stellen, also man käme mit `a` bis `d` aus und müsste nicht noch unzählige nummerierte Namen einführen. Für das erhöhen dieser ”vierstelligen Zahl” braucht man dann nur ein paar verschachtelte ``if``\s für die Überträge. Also maximal vier.

Am einfachsten wäre eine ``for``-Schleife über die Zahlen 0 bis 9999 in der man die Zahl in eine Zeichenkette umwandelt und dabei führende 0en hinzufügt und das mit dem Passwort vergleicht. Also ungefähr so etwas:

Code: Alles auswählen

    for i in xrange(10000):
        if format(i, '04d') == password:
            print 'Yeah!'
            break
    else:
        print ':-('

Re: While Code...funktioniert nicht.

Verfasst: Dienstag 29. März 2016, 16:32
von felix234
Danke für die Antwort. Hab da einige kleine Fehler eingebaut, und außerdem ist das ganze eher aus Spaß entstanden, deshalb lösche ichs es jetzt. Und das mit der for schleife muss ich mir erst anschauen. lG

Re: While Code...funktioniert nicht.

Verfasst: Dienstag 29. März 2016, 20:52
von DasIch
BlackJack hat geschrieben:Am einfachsten wäre eine ``for``-Schleife über die Zahlen 0 bis 9999 in der man die Zahl in eine Zeichenkette umwandelt und dabei führende 0en hinzufügt und das mit dem Passwort vergleicht.
Wenn man es mit einem aufwendigeren aber effizienteren Ansatz probieren möchte, nutzt man aus dass nicht alle möglichen PINs gleich häufig benutzt werden.