Benutzereingaben in Liste übernehmen

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
Benutzeravatar
Mehlimatorus
User
Beiträge: 3
Registriert: Donnerstag 5. November 2009, 17:16

Hallo Community,
da ich nach einigem rumprobieren es immer noch nicht hinbekommen habe, stelle ich hier meine Frage.
Ich möchte ein Programm schreiben, welches Benutzereingaben in einer Liste speichert und dann eine davon nach dem Zufallsprinzip ausgibt. Also quasi ein Programm welches für einen entscheidet. :D
Meinen Quellcode habe ich hier mal hochgeladen. http://cxg.de/_17100b.htm
Mein Problem ist jetzt folgendes: Selbst wenn der Benutzer seine Optionen in der normalen Listenform für Strings, also "Option1" , "Option2" , ... eingibt, hat meine Liste die Länge 1. Und damit funktioniert die Zufallszahlermittlung nicht mehr und ich bekomme keinen Wert ausgegeben sondern nur folgende Fehlermeldung:
print (liste[a])
IndexError: list index out of range
Ich bin jetzt ein wenig ratlos und hoffe dass ihr mir helfen könnt.
Mfg
Mehlimatorus
Ein Psalm Salomos, den Weltraumfahrern zu singen...
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Hi,

hast du dir dir "sachen" mal ausgeben lassen? Von welchem Typ ist den 'eingabe'? Und wie sieht dann wohl 'liste' aus?

Es wäre sauberer, mit einer 'while True' Schleife und raw_input zu arbeiten (solange das nicht 3.x ist)

Gruß
Benutzeravatar
noisefloor
User
Beiträge: 4209
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

na ja, du generierst ja auch nur eine Liste mit einem Element, nämlich dem String aus input(). Eine Liste mit mehreren Elementen erzeugt man nicht alleine dadurch, dass man um irgendwas nur eckige Klammern setzt...

Tipp: Was du brauchst ist split().

Gruß, noisefloor
BlackJack

@Mehlimatorus: Der Aufruf von `random.seed()` ist überflüssig. Das kann unter bestimmten Umständen sogar kontraproduktiv sein und für weniger "zufällige" Werte sorgen.

Wenn Du Python 3.x verwendest solltest Du kein Leerzeichen zwischen `print` und der öffnenden Klammer setzen -- `print` ist dort eine ganz normale Funktion und bei den anderen hast Du die Klammern ja auch direkt an den Namen gesetzt.

Es gibt im `random`-Modul eine Funktion die aus einer Sequenz ein zufälliges Element aussucht, ohne das man selbst einen Index "auswürfeln" muss. Da gibt's bei Dir nämlich zwei Probleme: 1. das erste Element wird *nie* ausgewählt und 2. kann es passieren das tatsächlich ``len(liste)`` als Index gewählt wird, das ist aber zu gross.

Ich würde auch eine Schleife für die Eingabe verwenden. Bei der Verwendung `split()` kann das Trennzeichen nicht in den einzelnen Optionen enthalten sein. kann.
Benutzeravatar
Mehlimatorus
User
Beiträge: 3
Registriert: Donnerstag 5. November 2009, 17:16

An der Stelle schon mal vielen Dank für eure Hinweise. Dann werde ich mir nochmal die Dokumentation zu Listen durchlesen und mich dann mal am split() versuchen. Ich hoffe dass der unter Python 3.x genau so funktioniert wie unter Python 2.x :D :D

Mfg
Mehlimatorus
Ein Psalm Salomos, den Weltraumfahrern zu singen...
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Mal so als kleiner "Gedankenanstoß", wie man es mit eine Schleife lösen könnte:

Code: Alles auswählen

choices = []
while True:
    item = raw_input("Noch was: ")
    if item == '':
        break
    else:
        choices.append(item)

print choices
BlackJack

Und das gleiche ohne explizite Schleife:

Code: Alles auswählen

from functools import partial

choices = list(iter(partial(raw_input, 'Noch was: '), ''))
print choices
Benutzeravatar
Mehlimatorus
User
Beiträge: 3
Registriert: Donnerstag 5. November 2009, 17:16

Danke für die Codebeispiele, aber so weit bin ich noch nicht als dass ich die verstehen würde. Bin noch ganz am Anfang meines Python Studiums. :roll: Das dauert noch ein bisschen, dann verstehe ich auch, was ihr von mir wollt. :D

Mfg
Mehlimatorus
Ein Psalm Salomos, den Weltraumfahrern zu singen...
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Mehlimatorus hat geschrieben:Danke für die Codebeispiele, aber so weit bin ich noch nicht als dass ich die verstehen würde. Bin noch ganz am Anfang meines Python Studiums.
Das sollte dir einen handlichen und konkreten Einstiegspunkt geben:

Code: Alles auswählen

print "ABC,DE,FGHIJ,KL".split(",")
http://docs.python.org/library/stdtypes.html#str.split
Antworten