input bei liste

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.
haeuslermartin
User
Beiträge: 66
Registriert: Sonntag 21. April 2013, 10:12

liebe Python-Gemeinde, lieber Blackjack, vielen Dank !!
ich habe mich für die Variante "Eingabe aller Zahlen entschieden, das ist sehr einfach und funktioniert wunderbar:
zum Beispiel:

lottozahlen = list([2,5,33,22,3]) #die bereits vorhandenen Zahlen
print('Lottozahlen durch Leerzeichen getrennt eingeben:')
for string in input().split():
lottozahlen.append(int(string))
print(lottozahlen)

#die Ausgabe in der shell:

Lottozahlen durch Leerzeichen getrennt eingeben:
2 33 32 43 45 1 7
[2, 5, 33, 22, 3, 2, 33, 32, 43, 45, 1, 7]

Die Behandlung von Fehleingaben fürchte ich, übersteigt meinen momentanen python-Horizont, ebenso die Arbeit mit importierten Modulen.. jetzt habe ich erstmal genug Material zum Lernen, und zu gegebener Zeit wäre ich froh, Euch wieder fragen zu dürfen.
Martin.
bords0
User
Beiträge: 234
Registriert: Mittwoch 4. Juli 2007, 20:40

@BlackJack: Nitpick: Es gibt in Python keine Literale für Listen. list displays sind keine Literale (auch wenn literal_eval sie auswertet).
xeike
User
Beiträge: 83
Registriert: Donnerstag 28. Februar 2013, 09:58

Hi!
haeuslermartin hat geschrieben:Die Behandlung von Fehleingaben fürchte ich, übersteigt meinen momentanen python-Horizont,
Wenn du mit einer Menge (set) arbeitest statt einer Liste, dann hättest du schon mal keine doppelten Einträge.

Bei den Lottozahlen kann u. a. folgendes passieren (in Klammern Möglichkeiten, das zu testen):

* zu viele oder zu wenige Zahlen ( len(Liste oder Menge) )
* Benutzer geben keine Zahlen sondern irgend etwas anderes ein (string.isdecimal())
* leere Eingabe, also einfach RETURN gedrückt ( len(eingabe) )

Damit hättest du dann schon eine Reihe von Fehlern abgefangen.

Wenn du die Lottozahlen sortiert ausgeben möchtest, dann kannst du lottozahlen.sort() probieren.

Xe
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

haeuslermartin hat geschrieben:Die Behandlung von Fehleingaben fürchte ich, übersteigt meinen momentanen python-Horizont
In diesem Fall nimm doch die anfängerfreundliche Variante (dafür ist sie da). In der Zeile

Code: Alles auswählen

lottozahl = int(eingabe)
kannst Du Dich dann der Fehlerbehandlung widmen, denn dies ist die Stelle, wo bei Falscheingaben die Konvertierung schief geht, oder auch auf Zahlen ausserhalb eines gültigen Intervalls getestet werden kann. Weiter könntest Du an dieser Stelle prüfen, ob die Zahl bereits eingegeben wurde (das lässt sich mit Sets zwar umgehen, aber dabei lernt man nichts).
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

kbr hat geschrieben: (das lässt sich mit Sets zwar umgehen, aber dabei lernt man nichts).
Hm... ich sehe hier der *einzelnen* Eingabe von Zahlen keinen besonderen Vorteil eines sets. Ich kann genauso gut auf der Liste prüfen, ob die Zahl schon darin enthalten ist (``value in values``), bevor ich sie hinzufüge. Abgesehen von der schnelleren Laufzeit für das Prüfen bei sets, müsste man da ja analog vorgehen. Denn einfach einfügen und *danach* die Länge prüfen halte ich für umständlich. Dass ist eher dann sinnvoll, wenn der Benutzer alle Zahlen auf einmal eingibt und diese dann ausgewertet werden. Insofern ist set sicherlich nicht verkehrt, aber auch kein Muss in diesem Kontext.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Hyperion hat geschrieben:Insofern ist set sicherlich nicht verkehrt, aber auch kein Muss in diesem Kontext
Danke für die Ergänzung, das sehe ich eigentlich auch so. Den Hinweis hatte ich mit aufgenommen, da Sets weiter oben erwähnt wurden; besser aber hätte ich den eingeklammerten Text weg gelassen — der verwirrt im Grunde nur.
Antworten