passwortabfrage

Code-Stücke können hier veröffentlicht werden.
danistro
User
Beiträge: 5
Registriert: Mittwoch 31. Oktober 2007, 16:00
Wohnort: Sinsheim
Kontaktdaten:

moin leuts,

ich bastel mir grade ne passwortabfrage in python zusammen und bin im netz auf folgende funktion zur überprüfung von zahlen gekommen:

def istZahl (z):
return z in "". join (str(range (-1, 11)).split (", " )[1: -1])

kann mir jmnd helfen, das aufzudröseln? die funktion läuft zwar und gibt mir ein true oder false aus, aber so ganz blick ich da nicht durch. könnte man das nicht ein bissel vereinfachen?

mfg
danistro
dummdidumm....da isser...
lunar

@danistro: Vater im Himmel, wo hast Du denn diesen Unsinn her?! Wenn Du prüfen möchtest, ob eine Zeichenkette lediglich Ziffern enthält, so tut es auch einfach ".isdigit()". Was Du mit einem kurzen Blick in die Python-Dokumentation auch selbst hättest herausfinden können... :roll:
danistro
User
Beiträge: 5
Registriert: Mittwoch 31. Oktober 2007, 16:00
Wohnort: Sinsheim
Kontaktdaten:

eieiei... ich bin totaler neuling, was das angeht...und deshalb geil drauf, das da auch zu verstehen... isdigit is ja net schlecht (ich kannte das noch nicht) aber trotzdem würd ich gern wissen, was da hinter der codezeile steckt... so von grund auf lernen halt :)

ich blick da nur nicht ganz, was gejoined und was gesplittet wird... bzw kann ich mit der 1:-1 am ende gar nix anfangen...
dummdidumm....da isser...
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dann solltest du erstmal das Tutorial durchlesen, damit beantworten sich die meisten Fragen. Außerdem spricht ja nichts dagegen den Code schrittweise zu zerlegen und zu schauen, was die einzelnen Schritte machen. Das von dir gezeigte Stück Code willst du übrigens nicht als Beispiel für guten Code verwenden ;-) Ach ja: Es gibt im Forum Code-Tags für Python, dann geht die Einrückung nicht verloren.
Das Leben ist wie ein Tennisball.
danistro
User
Beiträge: 5
Registriert: Mittwoch 31. Oktober 2007, 16:00
Wohnort: Sinsheim
Kontaktdaten:

hmmmm...das das kein guter code ist hab ich schon mitbekommen ;)

ok, dann hilf mir hier mal einer beim auseinandernehmen...

also der grundgedanke ist, dass das zeichen, dass ich eingebe, irgendwie zuerst aus einer range von -1 bis 11 selektiert und dann durch kommas getrennt wird... klingt nach fantastisch falsch, so wie ich das les...

Code: Alles auswählen

return z in "".join(str(range (-1, 11)).split (", ")[1: -1])
dummdidumm....da isser...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

lunar hatte Dir schon die bessere Lösung gezeigt. Diesen Code weiterzuverfolgen bringt nichts.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
danistro
User
Beiträge: 5
Registriert: Mittwoch 31. Oktober 2007, 16:00
Wohnort: Sinsheim
Kontaktdaten:

naja, ich will da halt nur dahinter steigen...
dummdidumm....da isser...
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dann gib es halt in die interaktive Shell ein, da kannst du doch so viel mit dem Code spielen wie du möchtest. Bringt ja nichts, wenn wir dir erzählen was passert ;-)
Das Leben ist wie ein Tennisball.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ergänzend zu EyDu: Nimm halt die einzelnen Funktionen auseinander und mache Dir klar, was die im einzelnen tun. Dann baust Du es eben Stück für Stück zusammen. Aber selbst, wenn man `isdigit` nicht verwendet ist das Ding da extrem umständlich und würde ich eleganter lösen lassen. Insofern bringt das imho nicht viel.

Diese Funktionen zu verstehen ist an sich lobenswert, aber der Anwendungsfall hier ist eben Grütze!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Hyperion hat geschrieben:Diese Funktionen zu verstehen ist an sich lobenswert, aber der Anwendungsfall hier ist eben Grütze!
Die ganze Funktion ist es…
the more they change the more they stay the same
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

Grüezi Wohl :)
Ich bin auch ein neuling in python und schreib hier rein, weil es passt. :)

Das folgende gekritzel funktioniert soweit so gut, aber könnte ich es so machen, das wen der firefox z.b. gestartet wird, dieses script ausgeführt wird.
Es so verbinden das egal wie firefox ausgeführt wird einfach zuerst man da durch muss. Ist das evtl. gar nicht so machbar ? man müsste es ja vom firefox aus verbinden oder ?

tante edith: ich weis es hat noch macken, aber zum glück kleinere als ich sonst schreibe :)

Code: Alles auswählen

import hashlib
import getpass
import sys
import os
import time
import userlist

def main():
    ticker = 2
    while True:
        
        name = hashlib.md5(str(getpass.getpass(
        "Wer klopft zu dieser Stund ? "))).hexdigest()
        
        zauberwort = hashlib.md5(str(getpass.getpass(
        "Wie sagt man ? "))).hexdigest()
        
        if (name == userlist.user and zauberwort == userlist.passwd):
            print "Geheiligt sei die 42 ! "
            os.popen("firefox")
            break  
        else:
            print "War wohl nichts... ", ticker, "versuche !\n"
            time.sleep(2)
            os.system("clear")
            ticker = ticker - 1
        if (ticker == -1):
            print "Shit Happens"
            time.sleep(2)
            sys.exit()

if __name__ == "__main__":
    main()
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

smodo hat geschrieben: Das folgende gekritzel funktioniert soweit so gut, aber könnte ich es so machen, das wen der firefox z.b. gestartet wird, dieses script ausgeführt wird.
Es so verbinden das egal wie firefox ausgeführt wird einfach zuerst man da durch muss. Ist das evtl. gar nicht so machbar ? man müsste es ja vom firefox aus verbinden oder ?
Also generell gilt: Schwierig! Das ist zunächst mal weniger ein Python-Problem, sondern eher vom Betriebssystem abhängig. Du kannst Programme in unterschiedlichen OS unterschiedlich starten. Da eine universelle Lösung zu finden ist eher unwahrscheinlich.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

@Hyperion, hättest du den evtl. einen vorschlag ? :)

tante edith: vergessen, habe ubuntu 10.04 lts, fals du für dies gerade einen vorschlag hättest. :)
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Na, da könntest Du halt das Binary vom firefox in /usr/bin umbenennen und an dessen Stelle Dein Python-Script legen. Im Script startest Du dann nach erfolgreicher Passwortabfrage mittels `subprocess`-Modul (vergiss `os.system`!) den Firefox. Ist aber ja keine sichere Lösung, sondern eher nen übler "Hack". Aber so als Spielerei machbar und zumindest erzeugt es ein systemweit einheitliches Verhalten.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

hehe genial, danke dir ;)
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

ok, hab mein script in firefox unbenannt und in /usr/bin gesteckt, natürlich die originale kopiert und sicher im home angelegt. auch habe ich subprocess.Popen("firefox") (Edith"dummer dummer fehler, aber pasiert auch mit pfad zu firefox.sh") eingefügt aber immer pasier das was auf dem bild zusehen ist.

ich habe auch die orginale wieder eingefügt und unbenennt zu firefox2 und in meinem subprocess.Popen("firefox2") gemacht. Aber wieder das gleiche wie auf dem Bild. hab auch schon subprocess.open den ganzen pfad zum firefox.sh eingegeben, aber pasierte wieder das wie auf dem Bild. Bin ich zu blöd für den Fehler ?!? ;)

Edith2: Also es geht soweit, nur geht jetzt "anwendungen -> internet -> firefox" nicht mehr im menu, er geht da nicht mehr auf, nur noch im terminal mit firefox "funktioniert" :)

Code: Alles auswählen

#!/usr/bin/env python

import hashlib
import getpass
import sys
import os
import subprocess
import time
import userlist

def main():
    ticker = 2
    while True:
        
        name = hashlib.md5(str(getpass.getpass(
        "Wer klopft zu dieser Stund ? "))).hexdigest()
        
        zauberwort = hashlib.md5(str(getpass.getpass(
        "Wie sagt man ? "))).hexdigest()
        
        if (name == userlist.user and zauberwort == userlist.passwd):
            subprocess.Popen("/usr/lib/firefox-3.6.24/firefox")
            break  
        else:
            print "War wohl nichts... ", ticker, "versuche !\n"
            time.sleep(2)
            os.system("clear")
            ticker = ticker - 1
        if (ticker == -1):
            print "Shit Happens"
            time.sleep(2)
            sys.exit()

if __name__ == "__main__":
    main()
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dein Python-Script muss natürlich exakt so heißen, wie das Firefoy Binary zuvor! Nix *.py oder *.sh. Exakt - also vermutlich `firefox` ohne Endung (wie bei Binaries üblich).
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

das ist mir klar und es ist auch so. es geht ja eig. auch, nur geht es den "manuellen" weg nicht, wen ich im terminal bin und firefox eingebe, kommt mein script und wens stimmt geht der firefox auf, alles richtig und gut.

nur wen ich im menu auf Anwendungen -> Internet -> firefox klicke, geht er nicht auf.

das "meinige firefox" script ist als programm ausführbar markiert in den eigenschaften.

in der firefox desktop verknüpfung ist zwar "Befehl firefox %u" aber es geht auch nicht wen nur firefox als befehl ist.
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Was heißt denn "klappt nicht"? Passiert einfach gar nichts?

Generell solltest Du mal an der Präzision Deiner Postings arbeiten. Im obigen (auf das ich mich bezog) steht irgend etwas mit `firefox.sh` - und auch etwas von Bildern, auf denen man etwas sehen soll, die aber nicht da sind. Dein aktuelles, speziell der erste Absatz, ist dermaßen unleserlich, dass ich den Sinn dahinter kaum erkenne.

Sofern Dein Script global installiert ist, muss es auch über einen Desktop-Eintrag gestartet werden. Ich sehe da nur keinerlei GUI-Komponenten; insofern wäre dann klar, dass Du nichts siehst - denn es wird ja nicht automatisch eine Shell aufgemacht ;-) Schau mal per `ps` nach, ich wette da findest Du einen Prozess Deines Scriptes!

Wenn Du Eingaben auf der Konsole willst, musst Du Dein Script eben in einer starten.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
smodo
User
Beiträge: 49
Registriert: Dienstag 18. August 2009, 23:45

hehe jop, sorry, kamm ober ganz schon durcheinander im Text.

Also wen ich über: Anwendungen -> Internet -> Firefox, starte. sieht man schon im Panel "firefox wird gestartet", es pasiert aber sonst einfach nichts und es schliesst sich wieder.

Aber ich werde jetzt erst ma bissl lesen, wegen "ps" :)
Der Zynismus ist meine Rüstung, der Sarkasmus mein Schwert und die Ironie mein Schild.
Antworten