Seite 1 von 1
Anzahl anzeigen lassen, und none problem
Verfasst: Montag 21. März 2016, 12:16
von Eric23
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
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
Re: Anzahl anzeigen lassen, und none problem
Verfasst: Montag 21. März 2016, 12:21
von snafu
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)
Re: Anzahl anzeigen lassen, und none problem
Verfasst: Montag 21. März 2016, 12:43
von Eric23
danke,
kannst du mir auch sagen, wie man die Anzahl der teilbaren-und nicht teilbaren Zahlen anzeigen lassen kann?
Re: Anzahl anzeigen lassen, und none problem
Verfasst: Montag 21. März 2016, 12:57
von snafu
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.
Re: Anzahl anzeigen lassen, und none problem
Verfasst: Montag 21. März 2016, 13:09
von Sirius3
@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)
Re: Anzahl anzeigen lassen, und none problem
Verfasst: Montag 21. März 2016, 13:14
von Eric23
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()
Re: Anzahl anzeigen lassen, und none problem
Verfasst: Montag 21. März 2016, 13:18
von Eric23
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
Re: Anzahl anzeigen lassen, und none problem
Verfasst: Montag 21. März 2016, 13:32
von Eric23
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.
Re: Anzahl anzeigen lassen, und none problem
Verfasst: Montag 21. März 2016, 13:58
von Sirius3
@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.
Re: Anzahl anzeigen lassen, und none problem
Verfasst: Montag 21. März 2016, 14:01
von Eric23
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()
Re: Anzahl anzeigen lassen, und none problem
Verfasst: Montag 21. März 2016, 14:07
von snafu
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.
Re: Anzahl anzeigen lassen, und none problem
Verfasst: Montag 21. März 2016, 14:08
von Eric23
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.
Re: Anzahl anzeigen lassen, und none problem
Verfasst: Montag 21. März 2016, 14:39
von Eric23
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?
Re: Anzahl anzeigen lassen, und none problem
Verfasst: Montag 21. März 2016, 15:13
von Sirius3
@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.