Eingabeproblem

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
henry681997
User
Beiträge: 16
Registriert: Montag 9. April 2012, 17:05

Hey Leute, ich möchte ein Programm basteln, das den notendurchschnitt berechnet.
hierzu ist es nötig, dass das programm mehrere zahlen auf einmal aufnehmen kann, aso die eingabe sollte so aussehen:
1, 2, 3, 1 (<------- Noten)
das programm soll damit rechnen können
was muss ich schreiben ungefähr um das so hinzubekommen?
ich freue mich auf antworten! danke!
(ps: bitte nicht zu schwer, bin ein anfänger)
BlackJack

@henry681997: Du kannst im Grunde keine Zahlen eingeben, sondern nur Zeichenketten. Wenn Du eine Zeichenkette eingibst, aber eine Zahl haben möchtest, dann musst Du die mit der entsprechenden Funktion umwandeln. Wenn Du mehrere Zahlen in einer Zeichenkette durch bestimmte Zeichen getrennt eingibst, dann musst Du die Zeichenkette an diesen Trennzeichen aufteilen, zum Beispiel in eine Liste mit den Teilzeichenketten und jede davon in eine Zahl umwandeln. Das ist alles mit Grundoperationen machbar, die auf Zeichenketten, Listen, und Zahlen zur Verfügung stehen. Mehr dazu steht im Tutorial in der Python-Dokumentation. Mögliche, nützliche Bausteine und Konzepte: `raw_input()`, `int()`, `map()`, ``for``-Schleifen, „list comprehension”, …
henry681997
User
Beiträge: 16
Registriert: Montag 9. April 2012, 17:05

okay danke, map () kenn ich zurzeit noch nicht, abe rich glaube, mit dem was ich hier programmieren wollte habe ich mir zuviel vorgenommen, ich werde es vorerst lassen und dazulernen :( :)
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

henry681997 hat geschrieben:hierzu ist es nötig, dass das programm mehrere zahlen auf einmal aufnehmen kann, aso die eingabe sollte so aussehen:
1, 2, 3, 1 (<------- Noten)
das programm soll damit rechnen können
was muss ich schreiben ungefähr um das so hinzubekommen?
Die Eingabe mit raw_input (Python 2.x) bzw. input (Python 3.x) wirst du sicher hinbekommen.

Dann hast du einen kommagetrennten String vorliegen. Aus diesem kannst du dann mit split() eine Liste erstellen. Die einzelnen Listenelemente musst du dann nur noch vom Typ String in Integer- oder Float-Werte umwandeln. Anschließend kannst du mit den Werten rechnen.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Du kannst entweder in einer Schleife so lange Noten einlesen, wie eine gültige Zahl eingeben wird:

Code: Alles auswählen

    def noten_einlesen():
        noten = []
        while True:
            note = input("Note (RETURN für Ende)? ")
            if note == "":
                return noten
            noten.append(int(note))
Oder wenn du wirklich eine Zeile mit durch Komma getrennten Zahlen eingeben willst, kannst du die Methode `split` benutzen und dann in einer Schleife aus den Strings dann Zahlen machen:

Code: Alles auswählen

    def noten_einlesen():
        noten = []
        alle_noten = input("Noten (durch komma getrennt)? ")
        for note in alle_noten.split(","):
            noten.append(int(note))
        return noten
Statt hier explizit eine for-Schleife zu benutzen, kann man in Python auch eine sogenannte "list comprehension" benutzen:

Code: Alles auswählen

    def noten_einlesen():
        alle_noten = input("Noten (durch komma getrennt)? ")
        return [int(note) for note in alle_noten.split(",")]
Und in diesem speziellen Fall geht es noch kürzer, weil `int` eine Funktion ist, die ich mit Hilfe der Python-Funktion `map` auf jedes Element anwenden kann. Das sieht dann so aus:

Code: Alles auswählen

    def noten_einlesen():
        alle_noten = input("Noten (durch komma getrennt)? ")
        return map(int, alle_noten.split(","))
Stefan

PS: `input` ist der Befehl für Python 3.2. Bei Python 2.7 wäre es `raw_input`.
henry681997
User
Beiträge: 16
Registriert: Montag 9. April 2012, 17:05

ach du sch** ich bin doch grade erst bei geschachtelten und variablen schleifen :D
werde es trotzdem versuchen, danke! :)
Antworten