Mein erstes "Programm"

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
MoCore
User
Beiträge: 5
Registriert: Freitag 4. Januar 2008, 04:12
Wohnort: Krefeld
Kontaktdaten:

Freitag 4. Januar 2008, 04:48

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
__________________________________________
check my bandpage: www.skills2scan.com
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Freitag 4. Januar 2008, 08:46

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/
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Freitag 4. Januar 2008, 10:17

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.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Freitag 4. Januar 2008, 10:45

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
BlackJack

Freitag 4. Januar 2008, 11:18

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.
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Freitag 4. Januar 2008, 11:39

@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.
MoCore
User
Beiträge: 5
Registriert: Freitag 4. Januar 2008, 04:12
Wohnort: Krefeld
Kontaktdaten:

Freitag 4. Januar 2008, 12:24

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 :-)
__________________________________________
check my bandpage: www.skills2scan.com
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 4. Januar 2008, 12:43

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
MoCore
User
Beiträge: 5
Registriert: Freitag 4. Januar 2008, 04:12
Wohnort: Krefeld
Kontaktdaten:

Freitag 4. Januar 2008, 12:47

Achsoo, und ich hab mich schon gewundert warum der meinen Turtle nicht anzeigen wollte :-)
Und womit kann ich meine Programme anzeigen lassen?
__________________________________________
check my bandpage: www.skills2scan.com
Benutzeravatar
Hobbes Hobson
User
Beiträge: 42
Registriert: Sonntag 9. Dezember 2007, 15:24
Wohnort: Bremen

Freitag 4. Januar 2008, 13:51

Naja, halt einfach ausführen. Datei anklicken und dann mit python zum laufen bringen.
MoCore
User
Beiträge: 5
Registriert: Freitag 4. Januar 2008, 04:12
Wohnort: Krefeld
Kontaktdaten:

Freitag 4. Januar 2008, 14:00

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?
__________________________________________
check my bandpage: www.skills2scan.com
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Freitag 4. Januar 2008, 14:19

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 ;)
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
MoCore
User
Beiträge: 5
Registriert: Freitag 4. Januar 2008, 04:12
Wohnort: Krefeld
Kontaktdaten:

Freitag 4. Januar 2008, 14:25

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.
__________________________________________
check my bandpage: www.skills2scan.com
Vingdoloras
User
Beiträge: 53
Registriert: Sonntag 2. Dezember 2007, 18:25

Donnerstag 10. Januar 2008, 08:52

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...
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Donnerstag 10. Januar 2008, 09:12

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.
Antworten