Seite 1 von 1
list Element ausgeben
Verfasst: Mittwoch 13. August 2008, 17:17
von karsten k
Hallo!
Ich möchte ein List-Element ausgeben, jedoch "direkt", d.H. die einzelnen Inhalte sollen direkt aneinandergereiht sein. Leider habe ich auch keine Ahnung wie man sowas nennt, weshalb ich euch um hilfe bitte
gruß
Verfasst: Mittwoch 13. August 2008, 17:22
von snafu
Man nennt es join.
Verfasst: Mittwoch 13. August 2008, 17:33
von numerix
Verfasst: Mittwoch 13. August 2008, 20:31
von karsten k
Hallo!
Habe mir dass mal angesehen, funktioniert aber nicht
Code: Alles auswählen
File "/home/karsten/Desktop/test.py", line 53, in generate_pw
line = join(passwort)
NameError: global name 'join' is not defined
Muss man vielleicht noch etwas importieren?
Passwort wird so erstellt:
und dann durch passwort.append Aufrufe erweitert
Was mache ich nun jetzt schon wieder falsch?
gruß karsten
Verfasst: Mittwoch 13. August 2008, 20:42
von Hyperion
join() ist keine Funktion, sondern eine Methode von String-Objekten. Du kannst es nur in Zusammenhang mit einem String anwenden. numerix hat Dir doch ein Beispiel gegeben.
Bei Dir wäre es eben:
Wozu wird das PW eigentlich in einer Liste gespeichert?
Verfasst: Mittwoch 13. August 2008, 20:45
von numerix
1. Du hast join() falsch eingesetzt. Sieh dir nochmal genau mein Beispiel an.
2. Was soll das denn für ein "passwort" sein: [0] ? Eine Liste mit einem Element und das ist 0?
3. Auch wenn du join() richtig verwendet hättest, hätte es nicht funktioniert, weil dein einziges Listenelement vom Typ int ist. Müsste eine Zeichenkette sein. Musst du vorher also noch umwandeln ...
Verfasst: Mittwoch 13. August 2008, 20:47
von karsten k
Hallo!
Die beiden Beispiele habe ich mir angesehen, aber es funktioniert auch damit nicht
Dass Passwort wird zufällig generiert, manche Zahlen werden durch Buchstaben ersetzt, deswegen die Liste. Ist schwer zu verstehen, deswegen hier mal der gesamte Code:
Code: Alles auswählen
import Tkinter as tk
import random as rd
horizontal = "horizontal"
fontvar = "Waree"
passwort = [0]
def generate_pw():
counter = 0
string = ">"
# soll nachher das Passwort generieren
wert = bar.get()
for i in range(wert):
zahl = rd.randrange(9) # Zahl generieren, zufaellig
zufall = rd.randrange(2) #Zufaelige Zahl, fuer Buchstabenersetzung
if zufall == 1:
if zahl == 0:
passwort.append("O")
if zahl == 1:
passwort.append("i")
if zahl == 2:
passwort.append("z")
if zahl == 3:
passwort.append("e")
if zahl == 4:
passwort.append("a")
if zahl == 5:
passwort.append("s")
if zahl == 6:
passwort.append("G")
if zahl == 7:
passwort.append("L")
if zahl == 8:
passwort.append("B")
if zahl == 9:
passwort.append("G")
else:
passwort.append(zahl)
root = tk.Tk()
tk.Label(root, text="Dieses Programm generiert ihnen ein sicheres Passwort.", font=fontvar).pack()
tk.Label(root, text="Bitte geben Sie die Anzahl der zu verwendenen Stellen an!", font=fontvar).pack()
button = tk.Button(text="Generieren", command=generate_pw)
bar = tk.Scale(root, from_=0, to=200, orient=horizontal)
bar.pack()
button.pack()
root.mainloop()
//edit:
2. Was soll das denn für ein "passwort" sein: [0] ? Eine Liste mit einem Element und das ist 0?
Ja also dass mit der [0] ist um 'passwort' zu erstellen, sonst meckert er bei passwort.append nachher rum. Wusste nicht wie ich es sonst erstellen soll.
Musst du vorher also noch umwandeln ...
Wie heisst der Befehl? Kenne von C# nur foobar.ConvertToString, bloß wie er hier heisst weiss ich nicht
Verfasst: Mittwoch 13. August 2008, 20:51
von DasIch
Klar dass das nicht funktioniert, du rückst zumindest Zeile 14 nicht richtig ein.
Verfasst: Mittwoch 13. August 2008, 20:55
von Craven
karsten k hat geschrieben:Wie heisst der Befehl? Kenne von C# nur foobar.ConvertToString, bloß wie er hier heisst weiss ich nicht
Verfasst: Mittwoch 13. August 2008, 21:01
von Hyperion
Hui ... das sieht alles andere als sauber aus!
Code: Alles auswählen
from random import choice
pw = []
chars = "01234abcdefgh"
# die 8 kann man ja auch noch variieren ;-)
for i in xrange(8):
pw.append(choice(chars))
Geht sicherlich auch noch anders, aber so ist das besser als zig mal if zu nutzen! (Und das mit der Liste würde ich auch noch mal überdenken - es gibt durchaus Strings für so etwas)
Zum anderen
Geht. Aber Du hast ja auch Integers drin, dann klappt es natürlich nicht. Da wüßte ich auch keine Methode, außer eben eine eigene Funktion zu schreiben.
Verfasst: Mittwoch 13. August 2008, 21:06
von numerix
Meine dringende Empfehlung: Lies dir das Tutorial durch und fang vorne an:
http://docs.python.org/tut/tut.html
Dir fehlen grundlegende Sprachelemente von Python. Ohne deren Aneignung wirst du deutlich weniger Freude am Programmieren mit Python haben.
Nur ein Beispiel aus deinem Code: Die gesamten Zeilen 18-46 kannst du durch diese eine Zeile ersetzen:
Verfasst: Mittwoch 13. August 2008, 21:16
von karsten k
Damn, da hab ichs mir ja mal wieder (unnötig) viel Arbeit gemacht, aber Python wird mir immer sympatischer
Hab mir gestern noch ein Buch bestellt, zusammen mit dem Tutorial werde ich doch die grundlegenden Sprachelemente besser -kennenlernen
Verfasst: Mittwoch 13. August 2008, 22:01
von audax
Nicht das von Galileo, oder? :/
Verfasst: Mittwoch 13. August 2008, 23:46
von mitsuhiko
Eine elegante Möglichkeit wäre das hier:
Code: Alles auswählen
>>> from string import letters, digits
>>> from random import choice
>>> from itertools import imap, repeat
>>> ''.join(imap(choice, repeat(letters + digits, 10)))
'vkv26kVKOV'
Verfasst: Mittwoch 13. August 2008, 23:53
von str1442
Geht. Aber Du hast ja auch Integers drin, dann klappt es natürlich nicht. Da wüßte ich auch keine Methode, außer eben eine eigene Funktion zu schreiben.
Verfasst: Donnerstag 14. August 2008, 08:06
von Hyperion
Jo
Verfasst: Donnerstag 14. August 2008, 16:35
von karsten k
audax hat geschrieben:Nicht das von Galileo, oder? :/
so doof bin ich nun auch wieder nicht
Da hab ich ab und zu in der Online Variante reingesehen, aber nein ich habe mir
http://www.buecher.de/shop/Buecher/Pyth ... h-1-titel/ dass bestellt. Ist gut zum nachschlagen
Danke für eure Beispiele, meine If's waren echt nicht so der bringer
Verfasst: Donnerstag 14. August 2008, 19:49
von Leonidas
Vom Kurz & gut habe ich zwei im Regal und schaue da nie rein, weil da nicht mehr steht als auch Online in aktueller und umfassender verfügbar.
Verfasst: Donnerstag 14. August 2008, 21:23
von karsten k
Leonidas hat geschrieben:Vom Kurz & gut habe ich zwei im Regal und schaue da nie rein, weil da nicht mehr steht als auch Online in aktueller und umfassender verfügbar.
ach ich lese dass z.Z. wenn ich morgens in der Bahn zur Schule sitze oder in ńer Freistunde - dafür haben sich die 10€ schon gelohnt