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
Und "join" geht so:

Code: Alles auswählen

>>> print ''.join(['x','y','z'])
xyz

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:

Code: Alles auswählen

passwort = [0]
und dann durch passwort.append Aufrufe erweitert

Was mache ich nun jetzt schon wieder falsch? :cry:

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:

Code: Alles auswählen

line = "".join(passwort)
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 :cry:

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 :cry:

Code: Alles auswählen

>>> str(7)
'7'

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

Code: Alles auswählen

dummy = ["a", "b"]
print "".join(dummy)
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:

Code: Alles auswählen

passwort.append("OizeasGLBG"[zahl])

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 :lol:

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.

Code: Alles auswählen

print "".join(map(str, range(20)))

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 :lol: :lol:
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 :)