Problem mit Funktionsaufruf

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
ok20
User
Beiträge: 4
Registriert: Dienstag 22. Dezember 2015, 13:33

Hallo zusammen, wollte keinen neuen Thread aufmachen und poste mein Zeug hierein, hoffe liege da richtig.

Und zwar hab ich folgendes Problem mit der Funktion:

Code: Alles auswählen

def mittelwert(liste):
    mittelwert = sum(liste) / anzahl
    return mittelwert

liste = []

anzahl = int(input("Geben Sie die Anzahl der Zahlen ein:"))

for i in range(anzahl):
    zahl = int(input("Zahl eingeben:"))
    liste.append(zahl)

print(liste)
print(mittelwert)
Die Liste wird korrekt angezeigt aber bei der Mittelwertberechnung kommt der Fehler "<function mittelwert at 0x034564B0>". Weiß nicht woran das liegt, hoffe mir kann einer helfen.

Danke im Voraus
Zuletzt geändert von Anonymous am Dienstag 17. Mai 2016, 18:32, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@ok20: nein, da liegst Du falsch, auch für vermeintlich kleine Probleme solltest Du einen neuen Thread aufmachen.

Funktionen mußt Du aufrufen, und zwar mit den Argumenten, die die Funktion braucht: »mittelwert(liste)«. Apropos Argumente, eine Funktion darf nur das Verwenden, was sie als Argument bekommt, das ist ›liste‹, aber nicht ›anzahl‹. anzahl könntest Du einfach durch »len(liste)« ersetzen.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

ok20 hat geschrieben:[…]wollte keinen neuen Thread aufmachen und poste mein Zeug hierein, hoffe liege da richtig.
Deine Frage wäre in einem neuen, eigenen Thread besser aufgehoben, allein thematisch passt die schon gar nicht in diesen Thread…

Zu Deinem Problem: Um eine Funktion auszuführen, musst Du sie ausführen… :wink: Um das zu tun, musst Du hinter den Funktionsnamen noch Klammern setzen. Falls die Funktion Argumente erwartet, müssen sich diese innerhalb der Klammern befinden. Und eine Schleife, die eine bestimmte Anzahl an Durchläufen hat, würde ich anderst schreiben:

Code: Alles auswählen

while anzahl:
    zahl = int(input('Zahl eingeben: '))
    liste.append(zahl)
    anzahl -= 1
Allerdings finde ich das mit `anzahl` sowieso etwas unglücklich. Warum denn vorher festlegen, wieviel Zahlen Du nachher eingeben möchtest? Was, wenn mir während der Eingabe dann doch noch einfällt, dass ich mehr oder weniger Eingaben benötige? Wie wäre es so:

Code: Alles auswählen

def numbers():
    numbers_ = []
    while True:
        value = input('Zahl eingeben [e=Ende]: ')
        if value in 'eE':
            break
        try:
            value = int(value)
        except ValueError:
            print('Das war keine Zahl!')
        else:
            numbers_.append(value)
    return numbers_
Und die `mittelwert` Funktion lässt sich auch ohne `anzahl` schreiben…

Code: Alles auswählen

def mittelwert(liste):
    return sum(liste) / len(liste)
… hast Du das Problem schon gelöst.
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@mutetella: gerade für eine Schleife, deren Anzahl an Durchläufen schon vorher feststeht, ist die for-Schleife genau das richtige.

Code: Alles auswählen

for _ in range(anzahl):
    zahl = int(input('Zahl eingeben: '))
    liste.append(zahl)
ist nicht nur eine Zeile kürzer und zerstört den Inhalt von ›anzahl‹ nicht, sondern es ist schon in der ersten Zeile klar, wie oft die Schleife durchlaufen wird.
Würdest Du Deine Funktion nach einer Tätigkeit nennen (›input_numbers‹) bräuchtest Du bei Deinem Variablennamen keine _-Postfix.
ok20
User
Beiträge: 4
Registriert: Dienstag 22. Dezember 2015, 13:33

Hat bestens geklappt, danke für die schnelle Antwort :D :D
ok20
User
Beiträge: 4
Registriert: Dienstag 22. Dezember 2015, 13:33

Und da komm ich schon zur meiner nächsten Frage.. :oops:

Code: Alles auswählen

liste = []

for i in range(1,8):
    for j in range(7):
        print(i, end= " ")
    print("")
Dieser Code gibt ja sozusagen ein Lottofeld aus, jedoch möchte ich die Zahlen steigen lassen sprich, 1 2 3 4 5 6 7 nächste Zeile 8 9 10 11 12 13 14 etc.. Wie würde das machen können? Jemand eine Idee?
BlackJack

@ok20: Da gibt es zwei Möglichkeiten: a) Du schreibst *eine* Schleife über die (Lotto)Zahlen und gibst nach jeder 7. einen Zeilenumbruch aus, oder b) Du berechnest die jeweilige Zahl die ausgegeben werden muss aus `i` und `j`. Bei a) ist die Modulo-Rechenoperation (``a % b``) nützlich.
Antworten