Forum:  Programmieren
Thema: Python: Werterückgabe aus Funktion
Themen-Übersicht
Bekell
Aktiv
Dabei seit: 05.09.2008
Mitteilungen: 2109
Aus:
Themenstart: 2020-08-15 06:47

Hallo,

habe eine Funktion, die kuckt nach, ob 2 zahlen Prim sind oder nicht, funktioniert auch!
Dann stellt sie 3 Werte her:
Python
  1. def zzbrückenzähler(halbeLänge):
  2. gembrücke=0
  3. pzbrücke=0
  4. zzbrücke=0
  5. for b in range(halbeLänge,0,-10):
  6. zahl1=b
  7. zahl2=2*halbeLänge-b
  8. print(zahl1,zahl2,zahl1+zahl2)
  9. if isprime(zahl1) and isprime(zahl2):
  10. pzbrücke=pzbrücke+1
  11. else:
  12. pass
  13. if isprime(zahl1) and not isprime(zahl2):
  14. gembrücke=gembrücke+1
  15. else:
  16. pass
  17. if isprime(zahl2) and not isprime(zahl1):
  18. gembrücke=gembrücke+1
  19. else:
  20. pass
  21. if not isprime(zahl2) and not isprime(zahl1):
  22. zzbrücke=zzbrücke+1
  23. else:
  24. pass
  25. #return(pzbrücke,gembrücke,zzbrücke)
  26. return(zzbrücke)

Dann rufe ich im Hauptteil die Funktion so auf:
Python
  1. zzb=zzbrückenzähler(i)
  2. print("Nr.",nr,"i=",i,"Lä",Länge,"oben:",pzoben,"unten",pzunten, int(i/2), Hälfte,zzb)

Ich will aber eigentlich alle 3 Werte zurückhaben, gebe aber nur einen, nämlich i, hoch. Wie mache ich das? ich kann doch nicht schreiben:
Python
  1. pzb=zzbrückenzähler(i)





gonz
Senior
Dabei seit: 16.02.2013
Mitteilungen: 3685
Aus: Harz
Beitrag No.1, eingetragen 2020-08-15 10:17

Du kannst eine kommagetrennte Liste von Werten zurückgeben, und auf eine Liste aus kommagetrennten Variablen zuweisen,

oder die Rückgabewerte als Liste zurückgeben
und diese auf eine Variable zuweisen

(mal so ins unreine gesprochen)
python
def funktion_eins(irgendwas):
    eins = irgendwas*2
    zwei = irgendwas+3*eins
    drei = irgendwas+4*zwei+5*eins
    return eins,zwei,drei
 
meinEins,meinZwei,meinDrei = funktion_eins(7)
print(meinEins,meinZwei,meinDrei)
 
 
def funktion_zwei(irgendwas):
    eins = irgendwas*2
    zwei = irgendwas+3*eins
    drei = irgendwas+4*zwei+5*eins
    return [eins,zwei,drei]
 
meineZwei = funktion_zwei(7)
print(meineZwei[0],meineZwei[1],meineZwei[2])


Bekell
Aktiv
Dabei seit: 05.09.2008
Mitteilungen: 2109
Aus:
Beitrag No.2, vom Themenstarter, eingetragen 2020-08-15 11:10

Danke Gonz!


Bekell
Aktiv
Dabei seit: 05.09.2008
Mitteilungen: 2109
Aus:
Beitrag No.3, vom Themenstarter, eingetragen 2020-08-15 17:18

Wieder dasselbe Problem, das andere hatte ich gelöst, indem ich einfach 3 Funktionen geschrieben habe. Habe diese Funktion:
Python
  1. def zzbrückenermittler(oben,unten,länge):
  2. pzo=oben
  3. pzu=unten
  4. zzo=länge-pzo
  5. zzu=länge-pzu
  6. pzopro=pzo/länge*100
  7. pzupro=pzu/länge*100
  8. zzopro=zzo/länge*100
  9. zzupro=zzu/länge*100
  10. #print(pzopro,pzupro,zzopro,zzupro)
  11. #Prozentmischer
  12. neupzopro=pzupro/100*pzopro
  13. neuzzopro=pzupro/100*zzopro
  14. neupzupro=zzupro/100*pzupro
  15. neuzzupro=zzupro/100*zzupro
  16. #print(neupzopro,neupzupro,neuzzopro,neuzzupro)
  17. #wichter
  18. ergpzbr=länge/100*neupzopro
  19. ergzzopzubr=länge/100*neuzzopro
  20. ergzzupzobr=länge/100*neupzupro
  21. ergzzbr=länge/100*neuzzupro
  22. print(int(ergpzbr),int(ergzzopzubr),int(ergzzupzobr),int(ergzzbr))
  23. return(int(ergzzbr))

abgerufen wird die so:
Python
  1. y5.append(zzbrückenermittler(pzoben,pzunten,Länge))

Er sagt nun: "Division bey zero", was heißt, es kommt die Länge oben nicht an.

Was tun?


gonz
Senior
Dabei seit: 16.02.2013
Mitteilungen: 3685
Aus: Harz
Beitrag No.4, eingetragen 2020-08-15 17:35

wo kommt denn der Wert Länge (großgeschrieben) den du mitgibst her? vielleicht ist er ja beim Aufruf tatsächlich gleich Null?


Bekell
Aktiv
Dabei seit: 05.09.2008
Mitteilungen: 2109
Aus:
Beitrag No.5, vom Themenstarter, eingetragen 2020-08-15 17:45

2020-08-15 17:35 - gonz in Beitrag No. 4 schreibt:
wo kommt denn der Wert Länge (großgeschrieben) den du mitgibst her? vielleicht ist er ja beim Aufruf tatsächlich gleich Null?

da ist als erster Wert 6//20 drin ... das ist doch nicht Null

ich habs damit gelöst:
Python
  1. if i < 20:
  2. Länge=1
  3. else:
  4. Länge=i//20

Jetzt läuft das Programm, aber was y5 betrifft entspricht der Graph nicht meinen Erwartungen!


gonz
Senior
Dabei seit: 16.02.2013
Mitteilungen: 3685
Aus: Harz
Beitrag No.6, eingetragen 2020-08-15 18:04

2020-08-15 17:45 - Bekell in Beitrag No. 5 schreibt:
da ist als erster Wert 6//20 drin ... das ist doch nicht Null

Doch, da 6//20 eine integer zurückgibt und 6 durch 20 gleich 0 Rest 6 ist :)


Bekell
Aktiv
Dabei seit: 05.09.2008
Mitteilungen: 2109
Aus:
Beitrag No.7, vom Themenstarter, eingetragen 2020-08-15 18:20

Ich bekomme jetzt den Ausdruck:


seltsamerweise kommt ne Parabel raus, obwohl ich auch so einen struppigen Trend erwarte, nur etwas versetzt????

Fehler gefunden ...





Dieses Forumbeitrag kommt von Matroids Matheplanet
https://https://matheplanet.de

Die URL für dieses Forum-Thema ist:
https://https://matheplanet.de/default3.html?topic=249039=5101
Druckdatum: 2020-12-02 19:25