Seite 1 von 1

Benutzereingaben in Liste übernehmen

Verfasst: Mittwoch 22. September 2010, 18:30
von Mehlimatorus
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

Re: Benutzereingaben in Liste übernehmen

Verfasst: Mittwoch 22. September 2010, 18:51
von .robert
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ß

Re: Benutzereingaben in Liste übernehmen

Verfasst: Mittwoch 22. September 2010, 18:52
von noisefloor
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

Re: Benutzereingaben in Liste übernehmen

Verfasst: Mittwoch 22. September 2010, 19:17
von 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.

Re: Benutzereingaben in Liste übernehmen

Verfasst: Donnerstag 23. September 2010, 08:24
von Mehlimatorus
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

Re: Benutzereingaben in Liste übernehmen

Verfasst: Donnerstag 23. September 2010, 09:09
von .robert
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

Re: Benutzereingaben in Liste übernehmen

Verfasst: Donnerstag 23. September 2010, 09:33
von 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

Re: Benutzereingaben in Liste übernehmen

Verfasst: Donnerstag 23. September 2010, 10:27
von Mehlimatorus
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

Re: Benutzereingaben in Liste übernehmen

Verfasst: Donnerstag 23. September 2010, 11:14
von /me
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