Seite 1 von 1

Mein erstes "Programm"

Verfasst: Freitag 4. Januar 2008, 04:48
von MoCore
hey, hab gestern angefangen mich mit Python zu beschäftiegen, das ist jetzt außer HTML meine erste programiersprache.
ich hab also heute mein erstes Programm geschrieben, es ist nichts besonderes aber ich bin stolz drauf :D

Ich würde mich freuen wen ihr mir schreibt wie ihr es für den anfang findet und was ich vlt. noch ändern kann (ist ja ein minicode als viel zu ändern wird wahrscheinlich nicht sein).

Code: Alles auswählen

# -*- coding: cp1252 -*-
print"Achten sie auf groß und kleinschreibung!"

while True:
    eingabe=raw_input("Geben sie ihr Passwort ein'mindestens 6 zeichen:'")
    if eingabe=="verlassen":
        break
    if len(eingabe)<6:
        continue
    eingabe2=raw_input("wiederholen sie ihr passwort:")
    if eingabe2==eingabe:
        print"sie haben ihr Passwort erfolgreich gespeichert"
        break
    else:
        print"fehlgeschlagen, versuchen sie es erneut oder tippen sie 'verlassen'"
und fals jemand eine lösung hätte wie die eingetippten zeichen vom
passwort zu sternchen(*) werden wäre ich sehr dankbar dafür :)

MFG, Mo

Re: Mein erstes "Programm"

Verfasst: Freitag 4. Januar 2008, 08:46
von veers
HTML würde ich nicht als Programmiersprache bezeichnen das ist mehr eine Auszeichnungssprache. ;) Aber nun zu deinem Problem. Dafür ist in Python das getpass Modul da.

Dokumentation:
http://docs.python.org/lib/module-getpass.html

Beispiel:

Code: Alles auswählen

# -*- coding: cp1252 -*-
import getpass
print"Achten sie auf groß und kleinschreibung!"

while True:
    eingabe = getpass.getpass("Geben sie ihr Passwort ein'mindestens 6 zeichen:'")
    if eingabe == "verlassen":
        break
    elif len(eingabe) < 6:
        continue
    eingabe2 = getpass.getpass("wiederholen sie ihr passwort:")
    if eingabe2 == eingabe:
        print "sie haben ihr Passwort erfolgreich gespeichert"
        break
    else:
        print "fehlgeschlagen, versuchen sie es erneut oder tippen sie 'verlassen'"
Gruss,
Jonas
PS: Schau dir mal pep8 an - das Python Style Guide
http://www.python.org/dev/peps/pep-0008/

Verfasst: Freitag 4. Januar 2008, 10:17
von Imperator
Hallo Mocore,

schreibt man Groß- und Kleinschreibung nicht groß?
Zum eigentlichen Code: Es wird ja gar nicht abgeprüft ob das Passwort stimmt, sondern nur ob es größer als 6 Zeichen ist.

Verfasst: Freitag 4. Januar 2008, 10:45
von sma
MoCore, es grenzt schon an Ironie, dass du den Anwender bittest, auf die Schreibweise zu achten, du deinen Strings jedoch nicht die selbe Aufmerksamkeit widmest ;)

Ich biete dir diese Lösung an.

Dem DRY-Prinzip folgend habe ich den Code, mit der du noch nicht zufrieden warst, in eine eigene Funktion ausgelagert, damit das dann nur 1x geändert werden muss. Ich habe außerdem Rekursion statt einer Schleife benutzt, einfach um zu zeigen, dass das auch geht. Ich finde es elegant, da kein "break" und "continue" auftaucht. Andere mögen es eher verwirrend finden.

Code: Alles auswählen

def getpw(prompt):
    return raw_input(prompt)

def enterpw():
    pw1 = getpw("Gib dein Kennwort ein (mindestens 6 Zeichen)")
    if len(pw1) < 6:
        print "Zu kurz. Versuch es nochmal oder gib 'verlassen' ein."
        return enterpw()
    if pw1 != 'verlassen':
        pw2 = getpw("Wiederhol es")
        if pw1 != pw2:
            print "Die Kennwörter sind nicht gleich."
            return enterpw()
    return pw1

print enterpw()
Viel Spass mit Python.

Stefan

Verfasst: Freitag 4. Januar 2008, 11:18
von BlackJack
Ich finde die Rekursion hier unelegant. So etwas sollte man sich in einer Sprache ohne Tail-Call-Optimization gar nicht erst angewöhnen.

Wir hatten hier schon Leute, die die Hauptschleife von einem Spiel so gelöst haben, also am Ende nachfragten ob der Spieler noch eine Runde möchte, und sich dann wunderten warum das Programm immer mehr Speicher frisst. Ganz einfach weil die Daten, GUI-Objekte, Spielfeld etc. von jeder Runde "aufgehoben" wurden, da sie vom Aufrufstack natürlich immer noch erreichbar waren. Wenn man Rekursion statt einfacher Schleifen verwendet muss man sich also plötzlich doch wieder Gedanken um Speicherverwaltung machen.

Verfasst: Freitag 4. Januar 2008, 11:39
von BlackVivi
@sma: Für so'ne einfache Aufgabe so'ne schwere Funktion zu schreiben grenz ja schon fast an Perl ;) Nich' bös gemeint,...

@Imperator: Ich denk', dass'r erreichen wollte, dass man sein Password so speichern kann, aber das mindestens 6 Zeichen haben muss :). Vielleicht hat er irgendwas im Sinn oder so und das ist ein Teil davon und wollte es präsentieren, damit man ihm sagt... was besser geht und/oder schlechter.

Verfasst: Freitag 4. Januar 2008, 12:24
von MoCore
Hey, danke für die ganzen Antworten, und entschuldigt meine rechtschreibung :lol: hab den Code mitten in der nacht geschrieben und immernoch nicht gepennt.. aber egal. Zum Thema.

Ich würde sagen BlackVivi hatt es erfasst ;-)
@veers wen ich das getpass Modul nutze dan kommt folgende Fehlermeldung:

"Warning: Problem with getpass. Passwords may be echoed."

wie krieg ich das richtig zum laufen?

Danke nochmal :-)

Verfasst: Freitag 4. Januar 2008, 12:43
von gerold
MoCore hat geschrieben:"Warning: Problem with getpass. Passwords may be echoed."
Hallo MoCore!

Wenn das Programm in der Konsole läuft, dann passt das schon. In IDEs wie z.B. Idle funktioniert es nicht. Deshalb die Warnung.

mfg
Gerold
:-)

Verfasst: Freitag 4. Januar 2008, 12:47
von MoCore
Achsoo, und ich hab mich schon gewundert warum der meinen Turtle nicht anzeigen wollte :-)
Und womit kann ich meine Programme anzeigen lassen?

Verfasst: Freitag 4. Januar 2008, 13:51
von Hobbes Hobson
Naja, halt einfach ausführen. Datei anklicken und dann mit python zum laufen bringen.

Verfasst: Freitag 4. Januar 2008, 14:00
von MoCore
aahh.. ja funktioniert sogar :-)

jetzt habe ich aber das problem das ich beim eintippen vom passwort nichts sehe, wäre gut wen man wenigstens sternchen sehen würde, kann ich das irgendwie definieren?

Verfasst: Freitag 4. Januar 2008, 14:19
von veers
MoCore hat geschrieben:aahh.. ja funktioniert sogar :-)

jetzt habe ich aber das problem das ich beim eintippen vom passwort nichts sehe, wäre gut wen man wenigstens sternchen sehen würde, kann ich das irgendwie definieren?
Wird vom getpass Modul nicht unterstützt, vermutlich weil es unter Unix üblich ist nichts anzuzeigen.

Wenn du das ändern willst müsstest du dir so etwas selber bauen, wie das geht siehst du wenn du dir den Quelltext von getpass (die Datei getpass.py) ansiehst. Ist ziemlich einfach gelöst ;)

Verfasst: Freitag 4. Januar 2008, 14:25
von MoCore
achso funktioniert das :lol: ich hab schon überlegt was man da importiert ..
naja bin noch ziemlich ahnungslos ;-)
Danke für eure hilfe! Ich werd mich dan heute abend an die arbeit machen und alles etwas verbessern.

Re: Mein erstes "Programm"

Verfasst: Donnerstag 10. Januar 2008, 08:52
von Vingdoloras
veers hat geschrieben:Dafür ist in Python das getpass Modul da.
Ich wollte mit dem Modul mal ein bissl rumspielen, aber es zeigt trotzdem das eingegebene Password an, unverschlüsselt! Und über dem Prompt steht dann noch ne Zeile
Python Interpreter hat geschrieben: Warning! Passwords may be echoed!
was soviel bedeuet wie "Passwörter könnten angezeigt werden" oder sowas in der Art...

Re: Mein erstes "Programm"

Verfasst: Donnerstag 10. Januar 2008, 09:12
von EyDu
Vingdoloras hat geschrieben:Ich wollte mit dem Modul mal ein bissl rumspielen, aber es zeigt trotzdem das eingegebene Password an, unverschlüsselt!
Du benutzt IDLE, oder? :)

Edit (Leonidas): IDLE-Diskussion in "Das IDLE-Problem" abgetrennt.