Buchstaben umtauschen

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
Obliviin
User
Beiträge: 3
Registriert: Montag 19. April 2021, 19:18

Hallo,

ich lerne gerade Python und bin noch ziemlich unerfahren,darum bitte ich um Hilfe.
Der Code sollte ein Wort als Input nehmen (später vielleicht mehr) und die Positionen der Buchstaben umändern. Leider funktioniert es nicht, und eine Fehlermeldung kriege ich auch nicht.

import random

user = input("Gib ein Wort ein")

word = list(user)

password = [ ]

if len(word) == 1:

position = [i for i ,letters in enumerate(word)]

for index in position:

password[random.choice(index)]= letters

password = " ".join(password)

print(password)
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Dass jede zweite Zeile eine Leerzeile ist, macht den Code schwer lesbar. Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht 2.

Code: Alles auswählen

import random

user = input("Gib ein Wort ein")
word = list(user)
password = [ ]

if len(word) == 1:
    position = [i for i ,letters in enumerate(word)]
    for index in position:
        password[random.choice(index)] = letters
        password = " ".join(password)
        print(password)
Das Programm macht nur dann etwas, wenn Du ein Wort mit genau einem Buchstaben eingibst. So hast Du es programmiert.
Läßt man die if-Abfrage weg, dann kommen viele Fehler. `letters` ist nur innerhalb der Listcomprehension definiert. `letters` ist ein falscher Name für EINEN Buchstaben.
`position` sollte `positions` heißen, weil ja mehrere Positionen in der Liste enthalten sind, oder sind das doch Indizes?
In Python kann man bei Listen nicht auf beliebige Indizes zugreifen, dazu muß man erst die Liste mit Werten füllen. `index` ist eine Zahl, und mit einer Zahl funktioniert random.choice nicht.
Dann wandelst Du die Liste `password` in einen String `password` um, so dass das Schreiben im nächsten for-Durchlauf erst recht nicht mehr funktioniert.

Warum nennst Du ein eingegebenes Wort `user`?

Du hast hier sehr viele Zeilen Code heruntergeschrieben, ohne dass Du die einzelnen Teile ausgiebig getestet hättest. Gerade am Anfang ist es sinnvoll, jede einzelne Zeile im Interaktiven Modus auszuführen und sich genau anzuschauen, was die Zeile tut und ob sie wirklich so funktioniert, wie man das denkt.
Benutzeravatar
__blackjack__
User
Beiträge: 14056
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Da gibt's schon was von Ratio…, ähm, im `random`-Modul:

Code: Alles auswählen

#!/usr/bin/env python3
import random


def main():
    zeichen = list(input("Gib ein Wort ein: "))
    random.shuffle(zeichen)
    print("".join(zeichen))


if __name__ == "__main__":
    main()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Obliviin
User
Beiträge: 3
Registriert: Montag 19. April 2021, 19:18

Danke für die Antworten.
Antworten