Input die Anzahl einer Variable mal abfragen -Python?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Das geht mit einer for-Schleife, die du entsprechend oft durchläufst. Die Zählvariable kannst du dann auch für die Nummerierung („1. Person“, „2. Person“, ...) verwenden. Die Eingaben, die in den einzelnen Abfragen zu den Personen getätigt werden, würde ich in einer Liste speichern.

Beispielsweise so...

anzahl_mitglieder = int(input("Wie viele Freunde sollen zu dem Treffen kommen?\n"))

wissen_über_person = []
for i in range(1, anzahl_mitglieder + 1):
    wissen_über_person.append(input(f"\nWas weißt du zu der {i}. Person?\n"))

Des Weiteren solltest du bedenken, dass die Eingabe, die man mit input(...) erhält vom Datentyp her ein String ist. Willst du die entsprechende Zahl haben, kannst du mit int(...) die Eingabe in eine Ganzzahl umwandeln. [Siehe: Erste Zeile in meinem Beispiel-Code] Man könnte auch noch Eingaben abfangen, die keine ganzen Zahlen sind, wo sonst das Programm mit einem Fehler abbrechen würde. Beispielsweise so...

while True:
    try:
        anzahl_mitglieder = int(input("Wie viele Freunde sollen zu dem Treffen kommen?\n"))
    except ValueError:
        print("Fehler: Es wurde keine ganze Zahl eingegeben.\n")
        continue
    if anzahl_mitglieder < 0:
        print("Fehler: Die eingegebene Anzahl war negativ.\n")
    else:
        break

wissen_über_person = []
for i in range(1, anzahl_mitglieder + 1):
    wissen_über_person.append(input(f"\nWas weißt du zu der {i}. Person?\n"))

======Ergänzung======

Mir ist gerade aufgefallen, dass man nicht extra eine for-Schleife braucht, sondern direkt mit einer List Comprehension arbeiten könnte. Siehe: Letzte Zeile im folgenden Beispielcode...

while True:
    try:
        anzahl_mitglieder = int(input("Wie viele Freunde sollen zu dem Treffen kommen?\n"))
    except ValueError:
        print("Fehler: Es wurde keine ganze Zahl eingegeben.\n")
        continue
    if anzahl_mitglieder < 0:
        print("Fehler: Die eingegebene Anzahl war negativ.\n")
    else:
        break

wissen_über_person = [input(f"\nWas weißt du zu der {i}. Person?\n") for i in range(1, anzahl_mitglieder + 1)]

Edwardo23 
Fragesteller
 20.10.2021, 17:19

Ah klasse, genauso habe ich mir das vorgestellt... nur wo sind die Werte die ich nun eingebe denn gespeichert bzw. wie kann ich mit diesen dann weiter arbeiten, in diesem Fall jeden Input einzeln addieren?

0
Edwardo23 
Fragesteller
 20.10.2021, 17:20
@Edwardo23

Okay, also klar die sind in der Liste gespeichert, aber alle in einer? das verstehe ich noch nicht ganz

0
mihisu  20.10.2021, 17:33
@Edwardo23
Ah klasse, genauso habe ich mir das vorgestellt... nur wo sind die Werte die ich nun eingebe denn gespeichert bzw. wie kann ich mit diesen dann weiter arbeiten, in diesem Fall jeden Input einzeln addieren?

Die Eingaben, die abgefragt wurden sind dann in der Liste wissen_über_person gespeichert.

Mit wissen_über_person[0] erhältst du den ersten Eintrag, in dem die Eingabe zur Abfrage „Was weißt du zu der 1. Person?“ gespeichert ist. Mit wissen_über_person[1] erhältst du die Eingabe zur 2. Person, mit wissen_über_person[2] erhältst du die Eingabe zur 3. Person, etc.

Was du mit „jeden Input einzeln addieren“ meinst, verstehe ich nicht ganz.

0
mihisu  20.10.2021, 17:37
@Edwardo23
Okay, also klar die sind in der Liste gespeichert, aber alle in einer? das verstehe ich noch nicht ganz

Ja, alle Eingaben zu den einzelnen Personen sind in einer Liste gespeichert, nämlich in der Liste wissen_über_person. (Die vorige Eingabe für die Anzahl ist nicht in der Liste gespeichert, sondern in der Variable anzahl_mitglieder.) Wie im vorigen Kommentar beschrieben kann man mit einer ganzen Zahl i als Index mittels wissen_über_person[i] die Eingabe zur (i + 1)-ten Person erhalten.

Wie möchtest du die denn sonst gespeichert haben? Eine Liste halte ich hier im Moment für das einfachste. Je nachdem, wie du die Daten weiterverarbeiten möchtest und ob/wie viele/welche Daten sonst noch dazu kommen, könnte es unter Umständen aber auch sinnvoll sein, die Daten anders zu speichern.

0
Edwardo23 
Fragesteller
 20.10.2021, 17:39
@mihisu

Ah das war mir nicht klar, vielen Dank!

Was ich meine ist, dass ich nun die Zahlen von wissen_über_person[0] miteinander addieren will und anschließend wissen_über_person[1] usw., dass ich dann anzahl_mitglieder- mal Summen habe.

--> Das geht dachte ich zumindest am besten mit einer Methode, etwa so (das Beispiel klappt nicht):

def termin_addieren(wissen_über_person):

   summe = 0

   s = wissen_über_person

   for c in s:

       if c !=" ":

           zahl = int(c)

           summe += zahl

   return(summe)

--------------------------------------------------------

Von diesen Summen soll dann die kleinste ausgegeben werden.

Und ja in Listen zu speichern war mein Ziel, vielen Dank dafür!

0
mihisu  20.10.2021, 17:44
@Edwardo23

Also bei „Was weißt du zu der {i}. Person?“ würde ich nicht erwarten, dass Zahlen eingegeben werden sollen. Deshalb bin ich verwirrt gewesen, was/warum/wie du da addieren möchtest.

Du möchtest also eine gewisse Anzahl an Abfragen machen, bei denen du jeweils eine Zahl erwartest. Diese Zahlen möchtest du dann aufaddieren. Habe ich das richtig verstanden?

(Was soll passieren, wenn keine Zahlen eingegeben werden? Abbruch? Nur die Zahlen addieren und die anderen Eingaben, die keine Zahlen sind, einfach ignorieren?)

0
Edwardo23 
Fragesteller
 20.10.2021, 17:48
@mihisu

Ja achso Sorry, ich bin durcheinander gekommen, an der Stelle ist eigentlich die Frage wie gut der Termin passt und dann steht 0 für gut, 1 für geht so und 2 für schlecht, wenn es also um 6 Personen an 7 Terminen geht, kommt 7 mal wie gut passt der Termin und dann erwarte ich da als Eingabe eben 6 Zahlen, jeweils von den 6 Personen.

Also Beispiel Eingabe eben: 1 0 1 0 2 1

Und dann dachte ich mir, um jetzt zu ermitteln welcher Termin am besten passt addiere ich die immer einfach und das kleinste Ergebnis muss dann ja automatisch am besten passen... Verwirrung gab es nur weil ich diese beiden komponenten verwechselt habe, ich schicke hier runter jetzt einfach mal mein aktuelles Programm, dann ist es nachvollziehbarer.

def termin_addieren(passender_termin_suche):

   summe = 0

   s = passender_termin_suche

   for c in s:

       if c !=" ":

           zahl = int(c)

           summe += zahl

   return(summe)

anzahl_mitglieder = 0

#anzahl_termine = 0

#anzahl_termine = input("Wie viele Termine stehen zur Auswahl? ")

while True:

   try:

       anzahl_mitglieder = int(input("Wie viele Freunde sollen zu dem Treffen kommen?\n"))

   except ValueError:

       print("Fehler: Es wurde keine ganze Zahl eingegeben.\n")

       continue

   if anzahl_mitglieder < 0:

       print("Fehler: Die eingegebene Anzahl war negativ.\n")

   else:

       break

passender_termin_suche = []

for i in range(1, anzahl_mitglieder + 1):

   passender_termin_suche.append(input(f"\nWie gut passt der {i}. Termin für alle Mitglieder (bitte Zahlen immer mit einem Leerzeichen abtrennen!)?\n"))

summe = 0

summe = termin_addieren(passender_termin_suche)

print(summe)

0
Edwardo23 
Fragesteller
 20.10.2021, 18:17
@mihisu

Wenn keine Zahlen angegeben werden klappt es halt nicht... Fehlermeldung wäre möglich sonst kann man es auch einfach ignorieren, das wäre nicht das Problem.

0

Du machst eine For Schleife in der du deine Eingabe durchläufst. Und beim Print Befehl gibst du dann „was weißt du über die“+variablenname+„.Person?“ ein

Woher ich das weiß:Hobby

Edwardo23 
Fragesteller
 20.10.2021, 16:13

Ah stimmt... ich erinnere mich, gar nicht so schwer haha
Vielen Dank!

1
Edwardo23 
Fragesteller
 20.10.2021, 16:19

Okay wenn ich jz folgendes schreibe:

i = 0

for i in range(anzahl_mitglieder):

   i += 1

   print("Wie gut passen die Termine für die", i, "Person? ")

kommt ein Fehler raus hehe

1
Edwardo23 
Fragesteller
 20.10.2021, 16:23
@PIIPAAPO

for i in range(anzahl_mitglieder):

TypeError: 'str' object cannot be interpreted as an integer

1
PIIPAAPO  20.10.2021, 16:23
@Edwardo23

Ach sooooo… du musst den erst in ein String umwandeln!

0
Edwardo23 
Fragesteller
 20.10.2021, 16:25
@Edwardo23

hab überall str(zahl) gemacht wo geht und der kommt immernoch

1
PIIPAAPO  20.10.2021, 16:26
@Edwardo23

Also bem Print muss er ein String sein und bei der Schleife ein int

1
Edwardo23 
Fragesteller
 20.10.2021, 16:27
@PIIPAAPO

Ah es klappt... super vielen Dank nochmal!

1