Seite 1 von 1
Indexangabe in Dictionairies durch Variable?
Verfasst: Dienstag 1. Juli 2003, 17:52
von sliwalker
hi,
ich bin python anfänger, und hänge seit ein paar tagen in meinem project fest. ich würde gerne eine passwortabfrage schreiben,die benutzernamen mit passwörten vergleicht.dabei sollen diese elemente aus zwei listen stammen.

problem ist nur,das benutzername(Stelle x) mit passwort(Stelle x) übereinstimmen müssen.
gedacht hat ich, dass man mit hilfe von count(benutzername) in einer function, einen wert zurück bekommt, den man dan einer variablen zuweist, die man dann anstelle von "index" (z.b. list.insert(0, name)"index=0") einsetzt; also quasi--> var=count(name) list.insert(var, passwort).
ich hoffe jemand versteht was ich meine, bin eben noch anfänger.

Verfasst: Dienstag 1. Juli 2003, 18:25
von Gast
Es gibt den Listen-Typ des Dictionarie(sp?), da kann man statt einer Position einen Namen als Index-Wert nehmen.
Wenn ich dich richtig verstanden hab willst du etwas in der art:
Code: Alles auswählen
passwoerter = {} #Dic.wird initialisiert
#Erst mal Name und Passwort eintragen
name = input("Bitte gib deinen User-Namen ein: ")
code = input("Und nun bitte ein passwort: ")
#Hier wird im Wert 'name' der Inhalt 'code' zugefuegt
passwoerter[name] = code
#Nun die Abfrage
login_name = input("Bitte gib deinen User-Namen ein: ")
login_code = input("Und ihr Passwort? ")
if login_code == passwoerter[login_name]:
print "Gratuliere, das Passwort ist richtig!"
else:
print "Fehler, falsches Passwort!"
Verfasst: Dienstag 1. Juli 2003, 18:26
von Beyond
Ich würde zur Passwort-Abfrage ein Dictionary verwenden.
d= {'user1':'passwort1'}
Dann
if d.get(username, None) == passwd: print "Benutzer und Passwrt O.K."
Verfasst: Dienstag 1. Juli 2003, 18:27
von Dookie
Hi sliwalker,
hmm etwas confus Deine Beschreibung.
Du hast also 2 Listen
Code: Alles auswählen
benutzer = ["Hans", "Gretel", "Peter", "Susi"]
passwords = ["asdf", "qwer", "hjkl", "yxcv"]
um jetzt Das Passwort für z.B. Gretel zu bekommen schreibst Du
um ein Passwort zu Setzen schreibst Du
Achtung, das geht nur wenn für den index von Gretel schon ein Eintrag in der Passwortliste existiert, sonst arbeite lieber gleich mit einem Dictionary
Code: Alles auswählen
benutzer = {"Hans" : "asdf", "Gretel" : "qwer", "Peter" : "hjkl", "Susi" : "yxcv"}
dann bekommst Du mit
eine Liste mit den Benutzern und über
das Passwort von Gretel oder mit
das Passwort des 2. Benutzers (Zählung beginnt mit 0!)
und zum Setzen/Ändern des Passworts
noch eleganter gehts wenn Du nicht nur Passwörter sondern auch andere Attribute für die Benutzer in das Dictionary packen willst so
Code: Alles auswählen
benutzer = {"Hans" : {"Passwort": "asdf"}, "Gretel" : {"Passwort": "qwer"}, "Peter" : {"Passwort":"hjkl"}, "Susi" : {"Passwort":"yxcv"}}
das Passwort bekommst Du dann über
Gruß
Dookie
Vielen Dank
Verfasst: Dienstag 1. Juli 2003, 21:50
von sliwalker
hi,
vielen dank für die schnelle hilfe.ich hätte nicht so schnell mit so vielen
nützlichen antworten gerechnet.
besonders die ausführungen von Dookie

über die Dictionary Funktionen und Iterationen haben mir sehr geholfen.
nur:
wie erstellt man einträge im dictionary?
weitgehender bitte ich um einen link,der mir vielleicht bei der Schreibweise(Iteration) in Python und seine grundlegenden befehle weiterhelfen könnte. ich bin zwar im besitz einiger e-books und links, die beschäftigen sich aber meist mit grundlegender python programmierung(hello.world,calculator,phonebook,zahlenspiele,usw)
oder mit tiefgehenden sachen wie (verschiedene module,gui,usw)die tutorials die ich verstanden habe ,habe ich schon gemacht,
trotzdem fehlen mir noch zu viele befehle und schlüsselwörter und vor allem übungsaufgaben.
thx
Verfasst: Dienstag 1. Juli 2003, 22:44
von Dookie
Hallo nochmal,
angenommen Du hast die einträge für jeden User in folgenden variablen:
Dann kanst du die mit folgendem Code in das dictionary einlesen:
Code: Alles auswählen
benutzer[name]["Passwort"] = passwort
benutzer[name]["sonstiges1"] = weitere_Infos1
benutzer[name]["sonstiges2"] = weitere_Infos2
die variable name enthält dabei den namen als String.
hast Du die einträge in Listen
Code: Alles auswählen
daten = ["Hans", "hansispasswort", "ich@hans.tv", "www.hans.tv"]
dann geht das einlesen so:
Code: Alles auswählen
benutzer[daten[0]]["Passwort"] = daten[1]
benutzer[daten[0]]["sonstiges1"] = daten[2]
benutzer[daten[0]]["sonstiges2"] = daten[3]
um über ein Dictionary zu iterieren kommt wieder die for-schleife zum Einsatz.
Code: Alles auswählen
for key in benutzer.keys():
print "Name =", key
print "Passwort =",benutzer[key]["Passwort"]
print "sonstiges2 =",benutzer[key]["sonstiges1"]
Gruß
Dookie
alles klar. funktioniert.
Verfasst: Mittwoch 2. Juli 2003, 16:01
von sliwalker
super danke,
das programm läuft ohne fehler, mit dictionary.
auch wenns vielleicht nervt:
eine letzte frage dazu
kann ich das dictionary dauerhaft speicher?oder
wie schaffe ich es die benutzer + passwörter dauerhaft anzulegen?
ich hoffe nocheinmal auf Deine(Eure) Hilfe
cya sli
wer es mal durchgucken möchte:
print "SLI pre-Wall -- Secure Checking 2003a"
print "_____________________________________"
def menu():
print "(1) Login"
print "(2) New User"
print "(3) About"
print "(4) Quit"
def check():
if name in user:
if pasw==user[name]:
return 1
else:
return 2
else:
return 2
user = {}
menu()
auswahl=0
while auswahl<=3:
auswahl=input("Auswahl: ")
if auswahl==1:
name=raw_input("Benutzername: ")
pasw=raw_input("Passwort: ")
if check()==1:
print "Login erfolgreich... "
else:
print "Bitte Passwort und Benutzernamem ueberpruefen!"
elif auswahl==2:
name=raw_input("Benutzername: ")
pasw=raw_input("Passwort: ")
user[name]=pasw
elif auswahl==3:
print "Developed by SLi-T"
print "Version v03.7.1a"
print "Copyrights Reserved"
else:
print "Programm beendet."
ich weis das noch kleine fehler drin sind, und das man es auch bestimmt besser,kürzer,schneller usw schreiben kann. aber so hab ich es nunmal gemacht. für ideen die etwas bewirken bin ich dankbar.
Verfasst: Mittwoch 2. Juli 2003, 18:03
von Dookie
Hi,
wenn Du Pythoncode postest, schliesse diesen in [code]...[/code] ein, dann bleiben die Einrückungen erhalten.
Dookie
ok.danke für den tipp.
Verfasst: Mittwoch 2. Juli 2003, 18:48
von sliwalker
Code: Alles auswählen
print "SLI pre-Wall -- Secure Checking 2003a"
print "_____________________________________"
def menu():
print "(1) Login"
print "(2) New User"
print "(3) About"
print "(4) Quit"
def check():
if name in user:
if pasw==user[name]:
return 1
else:
return 2
else:
return 2
user = {}
menu()
auswahl=0
while auswahl<=3:
auswahl=input("Auswahl: ")
if auswahl==1:
name=raw_input("Benutzername: ")
pasw=raw_input("Passwort: ")
if check()==1:
print "Login erfolgreich... "
else:
print "Bitte Passwort und Benutzernamem ueberpruefen!"
elif auswahl==2:
name=raw_input("Benutzername: ")
pasw=raw_input("Passwort: ")
user[name]=pasw
elif auswahl==3:
print "Developed by SLi-T"
print "Version v03.7.1a"
print "Copyrights Reserved"
else:
print "Programm beendet."
ok.thx
Verfasst: Donnerstag 3. Juli 2003, 11:44
von NEBULA
Hi,
zum Thema deine "Benutzerdatenbank" sprich dein Dictionary dauerhaft zu speichern, empfehle ich dir einen Blick in die Python-Doku und dort schau mal bei Pickle und cPickle rein.
Anzumerken ist dabei, dass die Daten beim serialisieren per Pickle nicht verschluesselt werden oder aehnliches.
Jeder der auf die Datei mit dem serialisierten Dictionary zugreifen kann, wird wohl alleine schon mit einem Texteditor die Passwoerter sehen koennen.
Ein bissel Schutz koenntest du dir schaffen, indem du die Datei mit Base64 encodierst und dann durchn Rotor jagst.
Passende Module dazu bringt Python mit

stimmt
Verfasst: Donnerstag 3. Juli 2003, 14:27
von sliwalker
hi,
ja klar.das man die passwörter mitn notepad sehen kann weis ich.
war auch im ersten moment nicht mein problem.
aber jetzt ist es das.
wegen der übersichtlichkeit des boards würde ich aber lieber dafür ein neues thema aufmachen, um anderen die danach möglicherweise suchen,das finden zu erleichtern
cya sli