Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » Python: Übergabe in Funktion
Druckversion
Druckversion
Antworten
Antworten
Autor
Schule Python: Übergabe in Funktion
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2056
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2020-08-03

Python
  1. from sympy.ntheory import isprime
  2.  
  3. j=1
  4. i=1
  5. zahl=0
  6. nr=0
  7. sozlr=0
  8. Länge=0
  9. Divisor=0
  10. Teiler=[]
  11.  
  12. def AnzahlZZ (Teiler):
  13. if len(Teiler)>1:
  14. Länge=int(zahl/2)
  15. start=int(len(Teiler))
  16. for i in range (start,0,-1):
  17. Divisor=Teiler.pop(i)
  18. ZZAnzahl=ZZAnzahl+int(Länge/Divisor)
  19. return(ZZAnzahl)
  20.  
  21.  
  22. for zahl in range(3,5003,10):
  23. nr=nr+1
  24. j=1
  25. while j <= (zahl)/2:
  26. if zahl%j==0:
  27. Teilerb=zahl//j
  28. if Teilerb%2>0 and isprime(Teilerb):
  29. Teiler.append(Teilerb)
  30. # print(nr,"zahl",zahl,"if: i:",i,"j:",j,"Teilerb",Teilerb,"Teiler",Teiler)
  31. j=j+1
  32. else:
  33.  
  34. #Teiler.append(Teilerb)
  35. #print(nr,"zahl",zahl,"else: i:",i,"j:",j,"Teilerb",Teilerb,"Teiler",Teiler)
  36. j=j+1
  37.  
  38.  
  39. if isprime(zahl):
  40. #print("prime Nr:",nr,"zahl",zahl,len(Teiler),"PrimTeiler",Teiler,)
  41. print(zahl," prime")
  42. else:
  43. if zahl%3==0:
  44. print("3-Teilb.:",nr, sozlr,"zahl",zahl,len(Teiler),"PrimTeiler",Teiler,len(Teiler),AnzahlZZ(ZZAnzahl))
  45. else:
  46. sozlr=sozlr+1
  47. print("else Nr:",nr, sozlr,"zahl",zahl,len(Teiler),"PrimTeiler",Teiler,len(Teiler))
  48. Teiler.clear()
  49.  

Bis eben hat es funktioniert. Dann habe ich den von mir geschriebenen und andernorts ausprobierten Teil als Funktion AnzahlZZ reinkopiert.

Er sagte jetzt:


  File "/Users/ottoreincke/Desktop/Primteiler.py", line 13, in AnzahlZZ
    if len(Teiler)>1:

TypeError: object of type 'int' has no len()

Teiler ist doch eine Liste und hat bislang funktioniert?


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
tactac
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 15.10.2014
Mitteilungen: 1793
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2020-08-03


Der Aufruf von AnzahlZZ hier sieht nicht richtig aus.
Python
            print("3-Teilb.:",nr, sozlr,"zahl",zahl,len(Teiler),"PrimTeiler",Teiler,len(Teiler),AnzahlZZ(ZZAnzahl))



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2384
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, eingetragen 2020-08-03


"Teiler" im Kontext der Funktion AnzahlZZ ist genau das, was du als Argument an die Funktion übergibst.
Mit der außerhalb deklarierten Liste Teiler hat es erst einmal nichts zu tun (falls du das meinst).


Offensichtlich rufst du AnzahlZZ mit einer Zahl als Argument auf.
Daher würde ich empfehlen, den entsprechenden Aufruf zu überprüfen.


Weiterhin vermute ich mal, dass zumindest in Zeile 19 der Einschub nicht stimmt.

[Die Antwort wurde vor Beitrag No.1 begonnen.]


-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2056
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, vom Themenstarter, eingetragen 2020-08-03


2020-08-03 12:41 - DerEinfaeltige in Beitrag No. 2 schreibt:
"Teiler" im Kontext der Funktion AnzahlZZ ist genau das, was du als Argument an die Funktion übergibst.
Mit der außerhalb deklarierten Liste Teiler hat es erst einmal nichts zu tun (falls du das meinst).
ja, das meinte ich. Wie krieg ich denn die Liste, die unter Teiler in der späteren For-Schleife hergestellt wird, als Argument in die Funktion?

2020-08-03 12:41 - DerEinfaeltige in Beitrag No. 2 schreibt:
Offensichtlich rufst du AnzahlZZ mit einer Zahl als Argument auf.
Daher würde ich empfehlen, den entsprechenden Aufruf zu überprüfen.

Die Funktion soll nur im Print-Befehl aufgerufen werden, und dort die eine Ergebniszahl abgeben.


2020-08-03 12:41 - DerEinfaeltige in Beitrag No. 2 schreibt:
Weiterhin vermute ich mal, dass zumindest in Zeile 19 der Einschub nicht stimmt.
[Die Antwort wurde vor Beitrag No.1 begonnen.]


vor dem Funktionseinbau hat der Einschub gestimmt.

Die Zahlen werden in 3 Gruppen geteilt, erst mal in PZ und Vielfache, dann werden die Vielfachen in durch 3 Teilbare und die Restlichen geteilt...


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2384
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.4, eingetragen 2020-08-03


Abgesehen davon, dass man grundsätzlich keine globalen Variablen verwenden sollte, kann man das "global" Keyword verwenden, um sie in Funktionen ansprechen zu können.
Weitere Infos zum Thema Scope und globale Variablen liefert eine einfache Googlesuche.


-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2056
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.5, vom Themenstarter, eingetragen 2020-08-03

Python
  1. j=1
  2. i=1
  3. zahl=0
  4. nr=0
  5. sozlr=0
  6. Länge=0
  7. Divisor=0
  8. Teiler=[]
  9. pznr=0
  10. nr3t=0
  11. n3nr=0
  12.  
  13. def AnzahlZZ(lst1):
  14. ZZAnzahl=0
  15. Divisor=0
  16. if len(lst1)>1:
  17. Länge=int(zahl/2)
  18. start=int(len(lst1))
  19. for i in range (start,0,-1):
  20. Divisor=lst1.pop(i-1)
  21. ZZAnzahl=ZZAnzahl+int(Länge/Divisor)
  22. return(ZZAnzahl)
  23.  
  24.  
  25. for zahl in range(13,503,10):
  26. nr=nr+1
  27. j=1
  28. while j <= (zahl)/2:
  29. if zahl%j==0:
  30. Teilerb=zahl//j
  31. # print("Teilerb=",Teilerb)
  32. if Teilerb%2>0 and isprime(Teilerb):
  33. Teiler.append(Teilerb)
  34. #print(nr,"zahl",zahl,"if: i:",i,"j:",j,"Teilerb",Teilerb,"Teiler",Teiler)
  35. j=j+1
  36. else:
  37. # Teiler.append(Teilerb)
  38. # print(nr,"zahl",zahl,"else: i:",i,"j:",j,"Teilerb",Teilerb,"Teiler",Teiler)
  39. j=j+1
  40. if isprime(zahl):
  41. #print("prime Nr:",nr,"zahl",zahl,len(Teiler),"PrimTeiler",Teiler,)
  42. pznr=pznr+1
  43. print(nr,"zahl",zahl,"PZNR:",pznr,)
  44. else:
  45. if zahl%3==0:
  46. nr3t=nr3t+1
  47. #print(nr,"zahl",zahl,"NR3T:",nr3t,len(Teiler),"PrimTeiler",Teiler,AnzahlZZ(Teiler))
  48. print(nr,"zahl",zahl,"NR3T:",nr3t,len(Teiler),"PrimTeiler",Teiler)
  49. else:
  50. n3nr=n3nr+1
  51. # print(nr,"zahl",zahl,"N3NR:",n3nr,len(Teiler),"PrimTeiler",Teiler,AnzahlZZ(Teiler))
  52. print(nr,"zahl",zahl,"N3NR:",n3nr,len(Teiler),"PrimTeiler",Teiler)
  53. Teiler.clear()
  54.  
  55.  

ich habe jetzt in die Funktion einfach statt des Namens Teiler einen Namen lst1 vergeben. Und im print Aufruf rufe ich dann die Funktion mit der Liste auf, die in Funktion bearbeitet werden soll. Ich hoffe, das ist richtig.


Wenn ich so laufen lasse, werden die Teiler korrekt angezeigt.
Wenn ich von den beiden letzten Prints jeweils die Auskommentierten freigebe, und die direkt darunterstehenden Prints auskommentiere, fehlt in "Teiler" die letzt PZ. Warum das?






-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Scynja
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 23.02.2011
Mitteilungen: 304
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.6, eingetragen 2020-08-03


Ich verstehe nicht, wie dein Code funktionieren kann.

1) Wenn ich den Code kopiere bekomme ich Zeile 38 einen Einrückungsfehler. Der ist vielleicht durchs kopieren entstanden.

2) pznr=pznr+1
pznr wird an keiner Stelle vor Zeile 40 definiert. Wirft das keinen Fehler, wenn man ein Objekt zuerst mit sich selbst definiert?
In JS geht das. Da ist das gleichbedeutend mit "undefined + 1" Ich glaube es kommt sogar ein Ergebnis raus. Aber hier wirft mit der Compiler eine Exception.

3) Die Funktion AnzahlZZ
Hat eine Schleife und in der ersten Iteration ein return. Kann man sich dann nicht die Schleife sparen, weil sie eh sofort abbricht?

4) ZZAnzahl=ZZAnzahl+int(Länge/Divisor)
Siehe Punkt 2.

Gibt es Unterschiede bei den Compilern?



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2056
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.7, vom Themenstarter, eingetragen 2020-08-03


Ich hab das verbessert, das Problem ist dasselbe ... (habe den Code oben geändert!)


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell hat die Antworten auf ihre/seine Frage gesehen.
Bekell wird per Mail über neue Antworten informiert.
Neues Thema [Neues Thema] Antworten [Antworten]    Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2020 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]