list Element ausgeben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
karsten k
User
Beiträge: 18
Registriert: Dienstag 12. August 2008, 19:25

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ß
Sage nie, was du weisst. Aber wisse stets, was du sagst!
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Man nennt es join.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Und "join" geht so:

Code: Alles auswählen

>>> print ''.join(['x','y','z'])
xyz
karsten k
User
Beiträge: 18
Registriert: Dienstag 12. August 2008, 19:25

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
Sage nie, was du weisst. Aber wisse stets, was du sagst!
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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?
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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 ...
karsten k
User
Beiträge: 18
Registriert: Dienstag 12. August 2008, 19:25

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:
Sage nie, was du weisst. Aber wisse stets, was du sagst!
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Klar dass das nicht funktioniert, du rückst zumindest Zeile 14 nicht richtig ein.
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

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'
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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])
karsten k
User
Beiträge: 18
Registriert: Dienstag 12. August 2008, 19:25

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 :)
Sage nie, was du weisst. Aber wisse stets, was du sagst!
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Nicht das von Galileo, oder? :/
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

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'
TUFKAB – the user formerly known as blackbird
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

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)))
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Jo :-)
karsten k
User
Beiträge: 18
Registriert: Dienstag 12. August 2008, 19:25

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 ;)
Sage nie, was du weisst. Aber wisse stets, was du sagst!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
karsten k
User
Beiträge: 18
Registriert: Dienstag 12. August 2008, 19:25

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 :)
Sage nie, was du weisst. Aber wisse stets, was du sagst!
Antworten