Anzahl anzeigen lassen, und none problem

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
Eric23
User
Beiträge: 12
Registriert: Samstag 20. Februar 2016, 22:54

Was muss ich ändern damit kein None angezeigt wird?Denn wenn ich returns einbaue, wird nur die erste Zahl bearbeitet. Und wie kann ich mir dazu auch noch die Anzahl der teilbaren- und nicht teilbaren Zahlen anzeigen lassen.
Beispielsweise soll diese Ausgabe dazu erfolgen: Von ihren Zahlen sind 8 Zahlen nicht teilbar und 2 Zahlen schon.

Und könnt ihr mir eventuell nur einen "Tipp" geben, wie ich mein Programm mit der while-Schleife verkürzen kann?

Danke schonmal :D



Code: Alles auswählen

#Teilbarkeit ducrh 4 von 10 Zahlen

Eingabe:
Bitte geben sie eine Zahl ein -1
Bitte geben sie eine Zahl ein- 2
Bitte geben sie eine Zahl ein- 3
Bitte geben sie eine Zahl ein- 4
Bitte geben sie eine Zahl ein- 5
Bitte geben sie eine Zahl ein- 6
Bitte geben sie eine Zahl ein- 7
Bitte geben sie eine Zahl ein- 8
Bitte geben sie eine Zahl ein- 9
Bitte geben sie eine Zahl ein- 10





def Teilbarkeit(z1,z2,z3,z4,z5,z6,z7,z8,z9,z10):
    if z1%4==0:
        print()
        print(z1,"Ist durch 4 teilbar")
    else:
        print()
        print(z1,"ist nicht durch 4 teilbar")
    
    if z2%4==0:
        print(z2,"Ist durch 4 teilbar")
    else:
        print(z2,"ist nicht durch 4 teilbar")
    
    if z3%4==0:
        print(z3,"Ist durch 4 teilbar")
    else:
        print(z3,"ist nicht durch 4 teilbar")
        
    if z4%4==0:
        print(z4,"Ist durch 4 teilbar")
    else:
        print(z4,"ist nicht durch 4 teilbar")
        
    if z5%4==0:
        print(z5,"Ist durch 4 teilbar")
    else:
        print(z5,"ist nicht durch 4 teilbar")
        
    if z6%4==0:
        print(z6,"Ist durch 4 teilbar")
    else:
        print(z6,"ist nicht durch 4 teilbar")
        
    if z7%4==0:
        print(z7,"Ist durch 4 teilbar")
    else:
        print(z7,"ist nicht durch 4 teilbar")
        
    if z8%4==0:
        print(z8,"Ist durch 4 teilbar")
    else:
        print(z8,"ist nicht durch 4 teilbar")
        
    if z9%4==0:
        print(z9,"Ist durch 4 teilbar")
    else:
        print(z9,"ist nicht durch 4 teilbar")
        
    if z10%4==0:
        print(z10,"Ist durch 4 teilbar")
    else:
        print(z10,"ist nicht durch 4 teilbar")    



def main():
    z1=int(input("Bitte geben sie eine Zahl ein"))
    z2=int(input("Bitte geben sie eine Zahl ein"))
    z3=int(input("Bitte geben sie eine Zahl ein"))
    z4=int(input("Bitte geben sie eine Zahl ein"))
    z5=int(input("Bitte geben sie eine Zahl ein"))
    z6=int(input("Bitte geben sie eine Zahl ein"))
    z7=int(input("Bitte geben sie eine Zahl ein"))
    z8=int(input("Bitte geben sie eine Zahl ein"))
    z9=int(input("Bitte geben sie eine Zahl ein"))
    z10=int(input("Bitte geben sie eine Zahl ein"))
    ergebnis=Teilbarkeit(z1,z2,z3,z4,z5,z6,z7,z8,z9,z10)
    print(ergebnis)


    

main()



Ausgabe:
1 ist nicht durch 4 teilbar
2 ist nicht durch 4 teilbar
3 ist nicht durch 4 teilbar
4 Ist durch 4 teilbar
5 ist nicht durch 4 teilbar
6 ist nicht durch 4 teilbar
7 ist nicht durch 4 teilbar
8 Ist durch 4 teilbar
9 ist nicht durch 4 teilbar
10 ist nicht durch 4 teilbar
None
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Das Problem ist die Zeile ``print(ergebnis)`` in der `main()`-Funktion, denn die Funktion hat keine Rückgabe, sondern spuckt die Ergebnisse ja bereits mit eigenen `print()`-Anweisungen aus. Wenn eine Funktion nichts mittels `return` zurückgibt, dann verwendet Python automatisch `None` als Rückgabewert. Das Anzeigen von `None` kann vermieden werden, wenn du die besagte Zeile einfach weglässt.

In Code ausgedrückt:

Code: Alles auswählen

# Zeigt am Ende `None` an
ergebnis=Teilbarkeit(z1,z2,z3,z4,z5,z6,z7,z8,z9,z10)
print(ergebnis)

# Zeigt am Ende *kein* `None` an
Teilbarkeit(z1,z2,z3,z4,z5,z6,z7,z8,z9,z10)
Eric23
User
Beiträge: 12
Registriert: Samstag 20. Februar 2016, 22:54

danke, :wink:
kannst du mir auch sagen, wie man die Anzahl der teilbaren-und nicht teilbaren Zahlen anzeigen lassen kann?
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Indem du zwei zusätzliche Variablen einführst, die als Zähler für die Teilbarkeit bzw für die Nichtteilbarkeit dienen. Diese Variablen erhöhst du dann entsprechend, wenn das Eine oder das Andere auftritt.

Dein Code wird damit natürlich länger und länger. Sofern du schon mit dem Prinzip von Listen vertraut bist, solltest du auch besser Listen einsetzen.
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@Eric23: dass man am besten mit Listen arbeitet, hatten wir doch schon in Deinem anderen Beitrag. Programmierer wollen es sich immer so einfach machen, wie möglich, und Code zu kopieren und anzupassen ist mühselig. Eine Schleife ist da einfacher:

Code: Alles auswählen

def test_teilbarkeit(zahlen):
    for zahl in zahlen:
        print()
        print(zahl,"Ist" if zahl%4==0 else "ist nicht", "durch 4 teilbar")
        
def main():
    zahlen = []
    for _ in range(10):
        zahlen.append(int(input("Bitte geben sie eine Zahl ein")))
   test_teilbarkeit(zahlen)
Eric23
User
Beiträge: 12
Registriert: Samstag 20. Februar 2016, 22:54

Also ich stell mir das so vor, aber es stimmt nicht, weil die Ausgabe:

[...]
Es sind 0 durch 4 Teilbar
Es sind 0 nicht durch 4 Teilbar

ist.

Eventuell liegt mein Fehler darin, dass ich x und y im main auf 0 gesetzt habe. Wenn ich das aber im Baustein mache funktioniert das Programm nicht. Was kann ich ändern?



Code: Alles auswählen

#Teilbarkeit durch 4 von 10 Zahlen


def Teilbarkeit(z1,z2,z3,z4,z5,z6,z7,z8,z9,z10,x,y):
    
    if z1%4==0:
        print()
        print(z1,"Ist durch 4 teilbar")
        x=x+1     
    else:
        print()
        print(z1,"ist nicht durch 4 teilbar")
        y=y+1
        
    
    if z2%4==0:
        print(z2,"Ist durch 4 teilbar")
        x=x+1
    else:
        print(z2,"ist nicht durch 4 teilbar")
        y=y+1

        
    
    if z3%4==0:
        print(z3,"Ist durch 4 teilbar")
        x=x+1 
    else:
        print(z3,"ist nicht durch 4 teilbar")
        y=y+1

        
        
    if z4%4==0:
        print(z4,"Ist durch 4 teilbar")
        x=x+1 
    else:
        print(z4,"ist nicht durch 4 teilbar")
        y=y+1

        
        
    if z5%4==0:
        print(z5,"Ist durch 4 teilbar")
        x=x+1
    else:
        print(z5,"ist nicht durch 4 teilbar")
        y=y+1


        
    if z6%4==0:
        print(z6,"Ist durch 4 teilbar")
        x=x+1
    else:
        print(z6,"ist nicht durch 4 teilbar")
        y=y+1
        

        
    if z7%4==0:
        print(z7,"Ist durch 4 teilbar")
        x=x+1 
    else:
        print(z7,"ist nicht durch 4 teilbar")
        y=y+1
        

        
    if z8%4==0:
        print(z8,"Ist durch 4 teilbar")
        x=x+1
    else:
        print(z8,"ist nicht durch 4 teilbar")
        y=y+1
        

        
    if z9%4==0:
        print(z9,"Ist durch 4 teilbar")
        x=x+1
    else:
        print(z9,"ist nicht durch 4 teilbar")
        y=y+1

        
        
    if z10%4==0:
        print(z10,"Ist durch 4 teilbar")
        x=x+1
    else:
        print(z10,"ist nicht durch 4 teilbar")
        y=y+1



def main():
    z1=int(input("Bitte geben sie eine Zahl ein"))
    z2=int(input("Bitte geben sie eine Zahl ein"))
    z3=int(input("Bitte geben sie eine Zahl ein"))
    z4=int(input("Bitte geben sie eine Zahl ein"))
    z5=int(input("Bitte geben sie eine Zahl ein"))
    z6=int(input("Bitte geben sie eine Zahl ein"))
    z7=int(input("Bitte geben sie eine Zahl ein"))
    z8=int(input("Bitte geben sie eine Zahl ein"))
    z9=int(input("Bitte geben sie eine Zahl ein"))
    z10=int(input("Bitte geben sie eine Zahl ein"))
    x=0
    y=0
    ergebnis=Teilbarkeit(z1,z2,z3,z4,z5,z6,z7,z8,z9,z10,x,y)
    ergebnis
    print("Es sind ",x,"durch 4 Teilbar")
    print("Es sind ",y," nicht durch 4 Teilbar")



main()

    
Eric23
User
Beiträge: 12
Registriert: Samstag 20. Februar 2016, 22:54

Sirius3 hat geschrieben:@Eric23: dass man am besten mit Listen arbeitet, hatten wir doch schon in Deinem anderen Beitrag. Programmierer wollen es sich immer so einfach machen, wie möglich, und Code zu kopieren und anzupassen ist mühselig. Eine Schleife ist da einfacher:

Code: Alles auswählen

def test_teilbarkeit(zahlen):
    for zahl in zahlen:
        print()
        print(zahl,"Ist" if zahl%4==0 else "ist nicht", "durch 4 teilbar")
        
def main():
    zahlen = []
    for _ in range(10):
        zahlen.append(int(input("Bitte geben sie eine Zahl ein")))
   test_teilbarkeit(zahlen)
#
main()


irgendwie funktioniert dein Programm nicht
Eric23
User
Beiträge: 12
Registriert: Samstag 20. Februar 2016, 22:54

Das Programm funktioniert doch war nur falsch eingerückt.
Vielleicht kannst du mir auch was zu der Anzahl der teilbaren -und nicht teilbaren Zahlen sagen.
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@Eric23: vielleicht liest Du auch die Fehlermeldung, die Dein Programm auswirft. Die sagt nämlich, dass x bzw. y nicht definiert sind: local variable 'x' referenced before assignment
Der Sinn von lokalen Variablen ist nämlich, dass sie lokal sind. Du definierst eine lokale Variable x in main, die hat aber nichts mit der lokalen Variable x in Teilbarkeit zu tun. Du muß dort die Variable initalisieren, wo Du sie auch benutzt.
Eric23
User
Beiträge: 12
Registriert: Samstag 20. Februar 2016, 22:54

Wie schon gesagt, wenn ich x und y im Baustein auf 0 setzte, kommt diese Fehlermeldung:
NameError: name 'x' is not defined


Code: Alles auswählen

#Teilbarkeit durch 4 von 10 Zahlen


def Teilbarkeit(z1,z2,z3,z4,z5,z6,z7,z8,z9,z10,x,y):
    x=0
    y=0
    if z1%4==0:
        print()
        print(z1,"Ist durch 4 teilbar")
        x=x+1     
    else:
        print()
        print(z1,"ist nicht durch 4 teilbar")
        y=y+1
        
    
    if z2%4==0:
        print(z2,"Ist durch 4 teilbar")
        x=x+1
    else:
        print(z2,"ist nicht durch 4 teilbar")
        y=y+1

        
    
    if z3%4==0:
        print(z3,"Ist durch 4 teilbar")
        x=x+1 
    else:
        print(z3,"ist nicht durch 4 teilbar")
        y=y+1

        
        
    if z4%4==0:
        print(z4,"Ist durch 4 teilbar")
        x=x+1 
    else:
        print(z4,"ist nicht durch 4 teilbar")
        y=y+1

        
        
    if z5%4==0:
        print(z5,"Ist durch 4 teilbar")
        x=x+1
    else:
        print(z5,"ist nicht durch 4 teilbar")
        y=y+1


        
    if z6%4==0:
        print(z6,"Ist durch 4 teilbar")
        x=x+1
    else:
        print(z6,"ist nicht durch 4 teilbar")
        y=y+1
        

        
    if z7%4==0:
        print(z7,"Ist durch 4 teilbar")
        x=x+1 
    else:
        print(z7,"ist nicht durch 4 teilbar")
        y=y+1
        

        
    if z8%4==0:
        print(z8,"Ist durch 4 teilbar")
        x=x+1
    else:
        print(z8,"ist nicht durch 4 teilbar")
        y=y+1
        

        
    if z9%4==0:
        print(z9,"Ist durch 4 teilbar")
        x=x+1
    else:
        print(z9,"ist nicht durch 4 teilbar")
        y=y+1

        
        
    if z10%4==0:
        print(z10,"Ist durch 4 teilbar")
        x=x+1
    else:
        print(z10,"ist nicht durch 4 teilbar")
        y=y+1



def main():
    z1=int(input("Bitte geben sie eine Zahl ein"))
    z2=int(input("Bitte geben sie eine Zahl ein"))
    z3=int(input("Bitte geben sie eine Zahl ein"))
    z4=int(input("Bitte geben sie eine Zahl ein"))
    z5=int(input("Bitte geben sie eine Zahl ein"))
    z6=int(input("Bitte geben sie eine Zahl ein"))
    z7=int(input("Bitte geben sie eine Zahl ein"))
    z8=int(input("Bitte geben sie eine Zahl ein"))
    z9=int(input("Bitte geben sie eine Zahl ein"))
    z10=int(input("Bitte geben sie eine Zahl ein"))

    ergebnis=Teilbarkeit(z1,z2,z3,z4,z5,z6,z7,z8,z9,z10,x,y)
    ergebnis
    print("Es sind ",x,"durch 4 Teilbar")
    print("Es sind ",y," nicht durch 4 Teilbar")



main()

    
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Wenn es nur um die Gesamtzahl geht, dann ist das ein Einzeiler mit einer GC, die man an `collections.Counter()` übergibt und die jeweils einen Test auf ``zahl % 4 == 0`` durchführt. Ich gebe hier aber ungerne Komplettlösungen, wo ich das Gefühl habe, dass der Fragesteller nichts dabei gelernt hat. Und falls es sich um Hausaufgaben handelt, dann sowieso nicht.
Eric23
User
Beiträge: 12
Registriert: Samstag 20. Februar 2016, 22:54

Ich denke genauso wie du, nur ist das keine Hausaufgabe sondern eine Übung, die ich mir selber ausgedacht habe.Außerdem habe ich keine Komplettlösung sondern lediglich Tipps gewünscht.
Eric23
User
Beiträge: 12
Registriert: Samstag 20. Februar 2016, 22:54

snafu hat geschrieben:Wenn es nur um die Gesamtzahl geht, dann ist das ein Einzeiler mit einer GC, die man an `collections.Counter()` übergibt und die jeweils einen Test auf ``zahl % 4 == 0`` durchführt. Ich gebe hier aber ungerne Komplettlösungen, wo ich das Gefühl habe, dass der Fragesteller nichts dabei gelernt hat. Und falls es sich um Hausaufgaben handelt, dann sowieso nicht.

Was meinst du mit Gesamtzahl?
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@Eric23: wenn Du hier Fehlermeldungen angibst, dann immer mit komplettem Traceback. Weil dann sieht man auch, wo der Fehler auftritt. Bei Dir in der Funktion main (und nenne Funktionen auch Funktion und nicht Baustein, weil eine Funktion Parameter und Rückgabewerte hat, ein Baustein aber sich nicht danach anhört, als ob er irgendetwas macht). Schau Dir in einem Grundlagentutorial an, was Funktionen sind, und was lokale Variablen und Rückgabewerte sind.
Antworten