Mein Problem is eig so simpel, ich weis nicht warum das nirgedwo steht (oder ich bin einfach zu blind).
Also:
Ich hab ne Liste mit x Elementen und möchte die aber innem string hintereinander ausgegeben lassen haben.
Also Beispiel:
list = ['w','u','r','s','t']
zu
wort = list.aufloesen
print(wort)
zu
'w''u''r''s''t'
oder auch mit Kommas ist egal.
Ja und dann bitte gerne auch noch ohne die Anführungszeichen aber das bekomm ich vlt selber iwie hin.
Danke schonmal
LG Luca
Listen auflösen
Das ist ein Fall für join(). Dafür gibst du zuerst den Trenner an und dann die Liste mit den Buchstaben. Zum Beispiel so:
Du kannst auch einen leeren String ("") als Trenner nehmen. Dann fügt er die Buchstaben direkt hintereinander.
Code: Alles auswählen
" ".join(buchstaben)
import random as r
lae = r.randint(1,7)
zal = 0
x = 0
bu = []
zz = r.randint(0,1)
n = r.randint(0,2)
m = r.randint(0,1)
wo = []
se = ['e','a','o','u','i','y','ä','ö','ü']
u = ['q','w','r','t','z','p','s','d','f','g','h','j','k','l','x','c','v','b','n','m']
nu = ['1','2','3','4','5','6','7','8','9','0']
ze = [' ','#','+',',','.','-']
while lae > x:
if n == 0:
sel = r.choice(se)
else:
sel = ''
uml = r.choice(u)
if zz == 0:
num = r.choice(nu)
else:
num = ''
zei = r.choice(ze)
bu = [sel,uml,num,zei]
wo += bu
x += 4
while len(wo) > 0:
rewo = ''.join(wo)
zal += 1
print(rewo)
es startet nicht......
lae = r.randint(1,7)
zal = 0
x = 0
bu = []
zz = r.randint(0,1)
n = r.randint(0,2)
m = r.randint(0,1)
wo = []
se = ['e','a','o','u','i','y','ä','ö','ü']
u = ['q','w','r','t','z','p','s','d','f','g','h','j','k','l','x','c','v','b','n','m']
nu = ['1','2','3','4','5','6','7','8','9','0']
ze = [' ','#','+',',','.','-']
while lae > x:
if n == 0:
sel = r.choice(se)
else:
sel = ''
uml = r.choice(u)
if zz == 0:
num = r.choice(nu)
else:
num = ''
zei = r.choice(ze)
bu = [sel,uml,num,zei]
wo += bu
x += 4
while len(wo) > 0:
rewo = ''.join(wo)
zal += 1
print(rewo)
es startet nicht......
@19mareut: willst Du den Preis für den schlechtesten Code gewinnen? Dir wurde schon im anderen Thread gesagt, dass Deine Variablennamen unverständlich sind, und damit der Code absolut unleserlich. Die vielen Leerzeilen machen das auch nicht besser.
Wenn Du Hilfe willst, dann überarbeite den Code.
Entweder wird nichts ausgegeben, weil wo leer ist, oder Du hast eine Endlosschleife.
Wenn Du Hilfe willst, dann überarbeite den Code.
Entweder wird nichts ausgegeben, weil wo leer ist, oder Du hast eine Endlosschleife.
- __blackjack__
- User
- Beiträge: 13117
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@19mareut: Wie immer: Deine Namen sind superschlecht gewählt. Da musst Du *dringend* dran arbeiten.
`random.choice()` funktioniert mit Sequenzen, also mit allen Werten die eine Länge haben die man mit `len()` abfragen kann und auf deren einzelne Elemente man per Index zugreifen kann. Das trifft auf Zeichenketten zu! Man muss die ganzen einzelnen Zeichen also nicht mühsam in Listenliterale tippen, sondern kann die als Zeichenkette schreiben.
Auch hier sind wieder viele Namen am Anfang defniert, obwohl die erst später tatsächlich verwendet werden. Falls sie überhaupt verwendet werden, denn die Werte von `bu` und `m` werden überhaupt gar nicht verwendet.
``+=`` bei Listen würde ich nicht verwenden, denn das ist letztlich die `extend()`-Methode und es ist wesentlich lesbarer wenn man *die* dann auch verwendet.
Die beiden ``if``/``else``-Konstrukte in der ersten ``while``-Schleife lassen sich jeweils als bedingter Ausdruck deutlich kompakter schreiben.
Erster Zwischenstand:
Statt die vier Werte an einen Namen zu binden, dann die vier Werte in eine Liste zu stecken, kann man auch gleich jedes Ergebnis sofort an die Liste anhängen.
Nach Deinen letzten Beiträgen zu urteilen, solltest Du Dich auch dringend mal mit ``for``-Schleifen beschäftigen. Denn die erste ``while``-Schleife ist eine klassische Zählschleife und damit ist ``while`` das falsche Werkzeug.
Die zweite ``while``-Schleife ist dann wieder mal eine Endlosschleife. Die Länge von `wo` ändert sich nicht im Schleifenkörper, damit läuft die Schleife entweder gar nicht, oder aber endlos.
Wenn sie gar nicht läuft — was allerdings nicht passieren kann, weil garantiert ist, dass `wo` mindestens ein Element enthält — dann würde das `print()` nach der Schleife in einen `NameError` laufen.
Programm nach dem vereinfachen:
Die Endlosschleife macht halt keinen Sinn.
`zz` und `n` sollten Wahrheitswerte sein, dass heisst der Vergleich der erst bei der Verwendung steht, sollte *einmal* *vor* der Schleife gemacht werden.
Etwas irritierend sind auch die 4er-Schritte in der Schleife. Dir ist klar das das Ergebnis kürzer sein kann als `lae` in dem ursprünglichen Code‽
`random.choice()` funktioniert mit Sequenzen, also mit allen Werten die eine Länge haben die man mit `len()` abfragen kann und auf deren einzelne Elemente man per Index zugreifen kann. Das trifft auf Zeichenketten zu! Man muss die ganzen einzelnen Zeichen also nicht mühsam in Listenliterale tippen, sondern kann die als Zeichenkette schreiben.
Auch hier sind wieder viele Namen am Anfang defniert, obwohl die erst später tatsächlich verwendet werden. Falls sie überhaupt verwendet werden, denn die Werte von `bu` und `m` werden überhaupt gar nicht verwendet.
``+=`` bei Listen würde ich nicht verwenden, denn das ist letztlich die `extend()`-Methode und es ist wesentlich lesbarer wenn man *die* dann auch verwendet.
Die beiden ``if``/``else``-Konstrukte in der ersten ``while``-Schleife lassen sich jeweils als bedingter Ausdruck deutlich kompakter schreiben.
Erster Zwischenstand:
Code: Alles auswählen
#!/usr/bin/env python3
import random
SE = "eaouiyäöü"
U = "qwrtzpsdfghjklxcvbnm"
NU = "1234567890"
ZE = " #+,.-"
def main():
zz = random.randint(0, 1)
n = random.randint(0, 2)
wo = []
lae = random.randint(1, 7)
x = 0
while lae > x:
sel = random.choice(SE) if n == 0 else ""
uml = random.choice(U)
num = random.choice(NU) if zz == 0 else ""
zei = random.choice(ZE)
wo.extend([sel, uml, num, zei])
x += 4
zal = 0
while len(wo) > 0:
rewo = "".join(wo)
zal += 1
print(rewo)
if __name__ == "__main__":
main()
Nach Deinen letzten Beiträgen zu urteilen, solltest Du Dich auch dringend mal mit ``for``-Schleifen beschäftigen. Denn die erste ``while``-Schleife ist eine klassische Zählschleife und damit ist ``while`` das falsche Werkzeug.
Die zweite ``while``-Schleife ist dann wieder mal eine Endlosschleife. Die Länge von `wo` ändert sich nicht im Schleifenkörper, damit läuft die Schleife entweder gar nicht, oder aber endlos.
Wenn sie gar nicht läuft — was allerdings nicht passieren kann, weil garantiert ist, dass `wo` mindestens ein Element enthält — dann würde das `print()` nach der Schleife in einen `NameError` laufen.
Programm nach dem vereinfachen:
Code: Alles auswählen
#!/usr/bin/env python3
import random
SE = "eaouiyäöü"
U = "qwrtzpsdfghjklxcvbnm"
NU = "1234567890"
ZE = " #+,.-"
def main():
zz = random.randint(0, 1)
n = random.randint(0, 2)
wo = []
for _ in range(0, random.randint(1, 7), 4):
wo.append(random.choice(SE) if n == 0 else "")
wo.append(random.choice(U))
wo.append(random.choice(NU) if zz == 0 else "")
wo.append(random.choice(ZE))
while True:
pass
if __name__ == "__main__":
main()
`zz` und `n` sollten Wahrheitswerte sein, dass heisst der Vergleich der erst bei der Verwendung steht, sollte *einmal* *vor* der Schleife gemacht werden.
Etwas irritierend sind auch die 4er-Schritte in der Schleife. Dir ist klar das das Ergebnis kürzer sein kann als `lae` in dem ursprünglichen Code‽
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman