Buchstaben eines Wortes in eine Liste einlesen

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.
BlackJack

@problembär: Bei der Aufgabenstellung "Sortieren Sie eine Liste nach dem Zufall neu" ist `random.shuffle()` genau die richtige Antwort und selber schreiben wäre Overkill, weil das in der Aufgabenstellung nicht gefordert ist.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Selbst wenn man random.shuffle() selber schreiben muss ist eine Implementation doch wesentlich eleganter zu bewerkstelligen.

Code: Alles auswählen

# coding: utf-8
import random


def shuffled(l):
    return sorted(l, key=lambda _: random.randrange(len(l)))


def main():
    word = list(raw_input(u"Bitte ein Wort eingeben: "))
    tries = 0
    while word != shuffled(word):
        tries += 1
    print u"Es wurden %d Versuche benötigt" % tries


if __name__ == "__main__":
    main()
BlackJack

@DasIch: Mir ist das heute zu spät um tatsächlich drüber nachzudenken, aber bist Du sicher dass Dein `shuffle()` unter der Voraussetzung das der Sortieralgorithmus stabil ist, nicht eventuell mehr dazu neigt Buchstaben nicht zu tauschen als `random.shuffle()`? Weil durch die Beschränkung auf ganze Zahlen im Bereich der Indexe deutlich wahrscheinlicher ist, dass man die gleiche Zahl mehr als einmal erwischt. Ich hätte da als `key` einfach nur ``lambda _: random.random()`` genommen.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Ja, stimmt. Die Wertemenge ist so recht klein, random.random wäre da besser.
Antworten