Python Aufgabe: Elemente selbst per input in Liste einfügen?
Ich bräuchte Hilfe bei folgender Aufgabe. Welchen Befehl brauche ich, um selbst Zahlen in eine Liste einzugeben?:
.
3 Antworten
Wenn man eine Liste hat, welche ich jetzt mal mit L bezeichne, so kann man mit L.append(a) ein Element a hinzufügen.
Mit der input()-Funktion kann man eine Eingabe anfordern.
Beispiel 1:
L = [] # L ist eine leere Liste
print("Liste vor der Eingabe:", L)
Eingabe = input("Gib etwas ein und bestätige mit Enter: ")
L.append(Eingabe)
print("Liste nach der Eingabe:", L)
Bzw. da die Noten ganze Zahlen sein werden, mit denen man auch weiterrechnen möchte, sollte man die Noten nach der Eingabe in eine Zahl umwandeln. Zunächst ist die Eingabe nämlich ein String. Die Umwandlung in eine Ganzzahl geht mit int().
Beispiel 2:
L = []
print("Liste vor der Eingabe:", L)
eingegebeneGanzzahl = int(input("Gib eine Zahl ein und bestätige mit Enter: "))
L.append(eingegebeneGanzzahl)
print("Liste nach der Eingabe:", L)
Bzw. etwas weiter zusammengefasst... Beispiel 3:
L = []
print("Liste vor der Eingabe:", L)
L.append(int(input("Gib eine Zahl ein und bestätige mit Enter: ")))
print("Liste nach der Eingabe:", L)
Beispiel für ein entsprechendes Programm:
Notenliste = []
Anzahl = 0 #Anzahl der eingegebenen Noten
print("""Geben Sie die Noten (ganze Zahlen) ein und bestätigen Sie jeweils mit Enter.
Beenden Sie die Noteneingabe durch Eingabe von 000, um die Notenliste und die
Durchschnittsnote (arithmetischer Mittelwert) angezeigt zu bekommen.\n""")
while True:
Eingabe = input(f"{Anzahl+1}-te Note: ")
if Eingabe == "000":
break
try:
neueNote = int(Eingabe)
except ValueError:
print("Die Eingabe ist keine ganze Zahl gewesen.")
continue
Notenliste.append(neueNote)
Anzahl += 1
print("\nNotenliste:", Notenliste)
if Anzahl == 0:
print("Es kann keine Durchschnittsnote gebildet werden. (Die Notenliste ist leer.)")
else:
Mittelwert = sum(Notenliste)/Anzahl
print("Durchschnittsnote:", Mittelwert)
Ich hätte das jetzt spontan mit einer Schleife gelöst.
Man könnte aber auch beispielsweise gleich alle Noten in einer Eingabe entgegennehmen, die dann beispielsweise durch ein Semikolon (;) getrennt werden sollen. Dann könnte man den String an den Semikolons aufteilen und so die Notenliste erhalten. Dann bräuchte man keine Schleife.
Wenn ich ein Semikolon schreibe kommt aber immer eine Fehlermeldung bei mir auf...
Wenn du deinen Code bzw. die Fehlermeldung hier zeigen würdest, könnte ich dir genauer sagen, woran das liegt.
Vermutlich wolltest du aber einfach den von der Eingabe erhaltenen String einfach als Liste verwenden und entsprechend verwenden, ohne diesen vorher entsprechend aufzubereiten, also tatsächlich eine Liste daraus zu machen.
Beispiel ohne Schleife bei der Eingabe...
import re
print("""Geben Sie die Noten ein.
[Ganze Zahlen, getrennt durch Semikolons (;) oder Kommata (,)]
Bestätigen Sie die Eingabe mit Enter.\n""")
NotenEingabe = input("Noten: ")
gesplitteteEingabe = re.split('[;,]', NotenEingabe)
try:
Notenliste = [int(n) for n in gesplitteteEingabe]
print("\nNotenliste:", Notenliste)
Anzahl = len(Notenliste)
if Anzahl == 0:
print("Es konnte keine Durchschnittsnote gebildet werden. (Notenliste leer)")
else:
Mittelwert = sum(Notenliste)/Anzahl
print("Durchschnittsnote:", Mittelwert)
except ValueError:
print("Mindestens eine Note ist keine ganze Zahl gewesen.")
Ich habe re.split() verwendet, um den String an den Kommata bzw. Semikolons aufzuteilen. [Dafür habe ich am Anfang mit „import re“ das Modul „re“ geladen.]
Man könnte sowas auch das aber auch mit der str.split()-Methode lösen, was es aber nicht ganz so einfach bzw. angenehm machen würde, mit mehr als einem Trennzeichen zu arbeiten. Beispielcode...
print("""Geben Sie die Noten ein.
[Ganze Zahlen, getrennt durch Semikolons (;)]
Bestätigen Sie die Eingabe mit Enter.\n""")
NotenEingabe = input("Noten: ")
gesplitteteEingabe = NotenEingabe.split(';')
try:
Notenliste = [int(n) for n in gesplitteteEingabe]
print("\nNotenliste:", Notenliste)
Anzahl = len(Notenliste)
if Anzahl == 0:
print("Es konnte keine Durchschnittsnote gebildet werden. (Notenliste leer)")
else:
Mittelwert = sum(Notenliste)/Anzahl
print("Durchschnittsnote:", Mittelwert)
except ValueError:
print("Mindestens eine Note ist keine ganze Zahl gewesen.")
noten = []
noten.append(int(input("Geben Sie bitte die Noten an:")))
print(noten)
gesamtzahl=0
Anzahl=len(noten)
for element in noten:
gesamtzahl=gesamtzahl+element
print("Gesamtzahl:" , gesamtzahl)
durchschnitt= sum(noten)/Anzahl
print("Durchschnitt:" , durchschnitt)
Mein Code sieht im Momnnt so aus...
Bei deinem derzeitigen Code hast du nach den ersten beiden Zeilen keine Liste, in der die Noten als einzelne Elemente aufgeführt sind.
Stattdessen ist „noten“ eine Liste, welches nur eine einziges Element besitzt, nämlich die gesamte Eingabe als ein großes Element.
Du müsstest die Eingabe vorher in die einzelnen Noten aufteilen, wie ich das beispielsweise mit...
NotenEingabe = input("Noten: ")
gesplitteteEingabe = NotenEingabe.split(';')
... an den Semikolons aufgeteilt habe.
Bzw. wirst du sonst auch im Moment eine Fehlermeldung erhalten, dass bei dir bei...
noten.append(int(input("Geben Sie bitte die Noten an:")))
... der Input nicht durch int() in eine Zahl umgewandelt werden kann. Denn wenn du beispielsweise „1; 2; 2; 5; 3“ eingibst, erwartet int() etwas, was eine einzige Zahl beschreibt, nicht mehrere Zahlen in einem String. Dementsprechend... vorher aufteilen und dann die einzelnen Teile jeweils mit int() in Ganzzahl-Typ umwandeln.
Probier es mal mit input() ... das gibt dir den Input jedoch als String zurück und du müsstest es zum Integer umwandeln - und eventuell Fehler abfangen,wenn KEIN Integer eingegeben wird
Noten = []
def NotenRechnen():
userInput = input(str(„Gib deine Note ein“))
Noten.appen(userInput)
for msg in Noten:
#Durchschnitt berechnen
NotenRechnen() #Zurück in die Funktion
Bin in der Arbeit und habe keine Zeit für eine ausführliche Antowrt, müsstest die Indents anpassen und den Code ausschmücken, sorry
Danke schön, kann ich auch mehrere Zahlen gleichzeitig eingeben oder brauche ich dafür eine Schleife?