Python Aufgabe: Elemente selbst per input in Liste einfügen?

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)

Mvg1642003 
Beitragsersteller
 11.09.2020, 16:50

Danke schön, kann ich auch mehrere Zahlen gleichzeitig eingeben oder brauche ich dafür eine Schleife?

0
mihisu  11.09.2020, 17:15
@Mvg1642003

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.

1
Mvg1642003 
Beitragsersteller
 11.09.2020, 17:36
@mihisu

Wenn ich ein Semikolon schreibe kommt aber immer eine Fehlermeldung bei mir auf...

0
mihisu  11.09.2020, 17:48
@Mvg1642003

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.")
1
Mvg1642003 
Beitragsersteller
 11.09.2020, 18:11
@mihisu

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...

0
mihisu  11.09.2020, 18:29
@Mvg1642003

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.

1
mihisu  11.09.2020, 17:13

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)
0

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