Listen auflösen

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
19mareut
User
Beiträge: 35
Registriert: Freitag 21. Februar 2020, 19:40

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
Benutzeravatar
snafu
User
Beiträge: 6744
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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:

Code: Alles auswählen

" ".join(buchstaben)
Du kannst auch einen leeren String ("") als Trenner nehmen. Dann fügt er die Buchstaben direkt hintereinander.
19mareut
User
Beiträge: 35
Registriert: Freitag 21. Februar 2020, 19:40

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......
19mareut
User
Beiträge: 35
Registriert: Freitag 21. Februar 2020, 19:40

also es gibt keine fehlermeldung aber es passier absolut nix
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Benutzeravatar
__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:

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

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()
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‽
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten