Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » Python: Spyder-Verhalten
Druckversion
Druckversion
Antworten
Antworten
Autor
Universität/Hochschule Python: Spyder-Verhalten
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-04


Seltsames Verhalten im ganz einfachen Programm. Warum gibt Spider mit dem Print, obwohl range von 3 - 10000 geht, nur die Werte von 5000 - 10000 aus?
Python
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. from sympy.ntheory import isprime
  4.  
  5. nhalbe=0
  6. pznr=0
  7. y1=[]
  8. y2=[]
  9. x=np.arange(3,10000,10)
  10. for n in range (3,10000,10):
  11. en=n//20
  12. y1.append(en)
  13. if isprime(n):
  14. pznr=pznr+1
  15. y2.append(pznr)
  16. nhalbe=(n+3)//2
  17. print(n,nhalbe)
  18.  
  19. plt.figure(figsize=(16,8))
  20. plt.xlabel('n')
  21. plt.ylabel('Anzahl')
  22. plt.title('Kettenlänge (rot) bei n, PZ (grün) < n')
  23.  
  24. plt.axis([0, 10000, 0, 500])
  25. plt.grid(True)
  26. plt.plot(x,y1,color="red")
  27. plt.plot(x,y2,color="green")
  28. plt.plot(x,y3,color="blue")
  29. plt.show()



-----------------
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: 1798
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2020-08-04


Kann es sein, dass einfach nur die letzten 5000 Ausgaben übrigbleiben, weil die davor hinausgescrollt sind?
Man kann jedenfalls eine Zeilenpuffergröße für die Konsolen einstellen. (Vorgabe scheint aber 500 zu sein, nicht 5000; hmm...)



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.2, vom Themenstarter, eingetragen 2020-08-05


Ich hab da nicht nicht rumgefummelt, aber schon deutlich mehr als 500 Zeilen ausgeben lassen ... naja, ist nicht lebenswichtig ...


-----------------
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: 1798
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, eingetragen 2020-08-05


Achso, du lässt ja in 10er-Schritten durchgehen. Hatte ich übersehen. Das würde dann auch ca. 5000 vs. ca. 500 erklären.



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: 2391
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.4, eingetragen 2020-08-05


Also IDLE gibt alles von 3 bis 9993 aus. (warum auch immer man für all diese Werte wissen will, was die abgerundete Hälfte ist ...)
Natürlich gibt es einen Fehler beim Plotten, da y3 nicht definiert wurde.


-----------------
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-05


Kann mir jemand sagen, warum Teiler plötzlich leer ist?
Python
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. from sympy.ntheory import isprime
  4. from itertools import combinations
  5. import itertools
  6.  
  7. def ZZsichereZZ(zahl):
  8. Divisor=0
  9. ZZAnzahl=0
  10. Länge=0
  11. Start=1
  12. Teilerneu=[]
  13. Teiler=[]
  14. schnittsumme=0
  15. nr=0
  16. nr1=0
  17. j=1
  18. mittelzahl=(zahl+3)//2
  19.  
  20. while j <= mittelzahl/2: # Hier ermittelt er die Primteiler
  21. if mittelzahl%j==0:
  22. Teilerb=mittelzahl//j
  23. # print("Teilerb=",Teilerb)
  24. if Teilerb%2>0 and isprime(Teilerb):
  25. Teiler.append(Teilerb)
  26. #print(nr,"zahl",zahl,"if: i:",i,"j:",j,"Teilerb",Teilerb,"Teiler",Teiler)
  27. j=j+1
  28. else:
  29. # Teiler.append(Teilerb)
  30. # print(nr,"zahl",zahl,"else: i:",i,"j:",j,"Teilerb",Teilerb,"Teiler",Teiler)
  31. j=j+1
  32.  
  33. if len(Teiler)>1:#Hier ermittelt er die Anzahl der Vielfachen der einzelnen PT
  34. Länge=zahl//2
  35. Start=int(len(Teiler))
  36. for i in range (Start,0,-1):
  37. Divisor=Teiler.pop(i-1)# Hier werden die teiler der Liste entnommen.
  38. Teilerneu.append(Divisor)#neuer Contaner mit den teilern, weil der alte geleert wird.
  39. ZZAnzahl=ZZAnzahl+int(Länge/Divisor) # Hier wird summiert
  40. nr=nr+1
  41. # print("Nr:",nr,"Teiler",Divisor,"oft",int(Länge/Divisor),"Sum",ZZAnzahl)
  42.  
  43. for L in range(0, Start+1): # Hier ermittelt er den Schnitt
  44. for x in itertools.combinations(Teilerneu, L):
  45. if len(x)==2:
  46. erg=x[0]*x[1]
  47. Abzüge=int(Länge/erg)
  48. schnittsumme=schnittsumme+Abzüge
  49. nr1=nr1+1
  50. # print("Nr:",nr1,"Paar",x,"Prod",erg,"oft",Abzüge,"Sum",schnittsumme)
  51.  
  52. # print("Trefferanzahl", ZZAnzahl,"-",schnittsumme,"=",ZZAnzahl-schnittsumme)
  53. return(ZZAnzahl-schnittsumme)
  54.  
  55. PTGrundlage=0
  56. pznr=0
  57. y1=[]
  58. y2=[]
  59. y3=[]
  60. x=np.arange(3,1000,10)
  61. for n in range (3,1000,10):
  62. en=n//20
  63. y1.append(en)
  64. if isprime(n):
  65. pznr=pznr+1
  66.  
  67. y2.append(pznr)
  68. # PTGrundlage=(n+3)//2
  69. # print(n,PTGrundlage)
  70. y3.append(ZZsichereZZ(n))
  71. print(n,(n+3)/2,Teiler,Teilerneu,ZZsichereZZ(n),len(Teiler))
  72. """
  73. plt.figure(figsize=(16,8))
  74. plt.xlabel('n')
  75. plt.ylabel('Anzahl')
  76. plt.title('Kettenlänge (rot) bei n, PZ (grün) < n')
  77. plt.axis([0, 1000, 0, 50])
  78. plt.grid(True)
  79. plt.plot(x,y1,color="red")
  80. plt.plot(x,y2,color="green")
  81. plt.plot(x,y3,color="blue")plt.show()
  82. """



-----------------
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: 2391
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.6, eingetragen 2020-08-05


Teiler ist nicht definiert und nicht leer.


-----------------
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.7, vom Themenstarter, eingetragen 2020-08-05


2020-08-05 11:02 - DerEinfaeltige in Beitrag No. 6 schreibt:
Teiler ist nicht definiert und nicht leer.

Was meinst Du damit, Einfältiger?
in Zeile 13 wird Teiler deklariert und in Zeile 25 wird wat reingepackt.

Das sagt er:

runfile('/Users/....../Desktop/Kettläng+pz.py', wdir='/Users/..../Desktop')
3 3.0 [4993] [17, 7, 3] None 1
Traceback (most recent call last):

  File "<ipython-input-67-5f70cecf61cb>", line 1, in <module>
    runfile('/Users/....../Desktop/Kettläng+pz.py', wdir='/Users/...../Desktop')

  File "/Users/..../opt/anaconda3/lib/python3.7/site-packages/spyder_kernels/customize/spydercustomize.py", line 827, in runfile
    execfile(filename, namespace)

  File "/Users/....../opt/anaconda3/lib/python3.7/site-packages/spyder_kernels/customize/spydercustomize.py", line 110, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "/Users/...../Desktop/Kettläng+pz.py", line 80, in <module>
    y4.append(ZZsichereZZ(n))

  File "/Users/..../Desktop/Kettläng+pz.py", line 45, in ZZsichereZZ
    Divisor=Teiler.pop(i-1)# Hier werden die teiler der Liste entnommen.

IndexError: pop from empty list

4993 war zuletzt drin ...


-----------------
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: 2391
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.8, eingetragen 2020-08-05


Lesetipp: Python-Docs zum Thema "Scope" sowie lokale und globale Variablen.


-----------------
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.9, vom Themenstarter, eingetragen 2020-08-05


2020-08-05 12:12 - DerEinfaeltige in Beitrag No. 8 schreibt:
Lesetipp: Python-Docs zum Thema "Scope" sowie lokale und globale Variablen.

kannst Du bitte konkreter werden, Einfältiger. Ich denke, alles was ich in der Funktion ZZsichereZZ deklariert habe, ist nur lokal. Global muß doch extra deklariert werden in Python.

Von def bis return geht die Funktion, also müßte Teiler vom while bis zum Print definiert sein. Hat ja schon 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
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2391
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.10, eingetragen 2020-08-05


Das angegebene Programm wird in Zeile 71 aussteigen mit der Fehlermeldung, dass "Teiler" nicht definiert ist.

Das sieht man dem Code an und der Compiler bestätigt das.

Traceback (most recent call last):
  File "...", line 71, in <module>
    print(n,(n+3)/2,Teiler,Teilerneu,ZZsichereZZ(n),len(Teiler))
NameError: name 'Teiler' is not defined


Deine Fragen passen also nicht zum geposteten Code.



Edit: Da du innerhalb deiner Funktion auf Teiler zugreift unabhängig davon, ob die Liste leer ist oder nicht, ist es allerdings auch klar, dass pop() einen Laufzeitfehler werfen wird, falls die Liste mal leer ist.


-----------------
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.11, vom Themenstarter, eingetragen 2020-08-05


2020-08-05 12:50 - DerEinfaeltige in Beitrag No. 10 schreibt:
Das angegebene Programm wird in Zeile 71 aussteigen mit der Fehlermeldung, dass "Teiler" nicht definiert ist.

Das sieht man dem Code an und der Compiler bestätigt das.

Traceback (most recent call last):
  File "...", line 71, in <module>
    print(n,(n+3)/2,Teiler,Teilerneu,ZZsichereZZ(n),len(Teiler))
NameError: name 'Teiler' is not defined


Deine Fragen passen also nicht zum geposteten Code.



Edit: Da du innerhalb deiner Funktion auf Teiler zugreift unabhängig davon, ob die Liste leer ist oder nicht, ist es allerdings auch klar, dass pop() einen Laufzeitfehler werfen wird, falls die Liste mal leer ist.

Kann man denn die Liste auch global sein lassen? Wie geht das? Wenn ich vor "Teiler=[]" global setze, mahnt er den Code an... Wie kann sie denn leer sein, wenn sie innerhalb der Funktion kurz vorher gefüllt wurde...?

Wenn ich  "Teiler=[0]", kommt "Division durch 0, wenn ich  "Teiler=[1]" setze, kommt das:

9923 4963.0 [4993] [17, 7, 3] 566 1
9933 4968.0 [4993] [17, 7, 3] 675 1
9943 4973.0 [4993] [17, 7, 3] 497 1
9953 4978.0 [4993] [17, 7, 3] 526 1
9963 4983.0 [4993] [17, 7, 3] 697 1
9973 4988.0 [4993] [17, 7, 3] 526 1
9983 4993.0 [4993] [17, 7, 3] 499 1
9993 4998.0 [4993] [17, 7, 3] 742 1

Ws scheint, als ob sich irgendwo im Speicher der alte Teiler befindet, der seine letzte Zahl ausgibt, die 8993, und dann davon die PT.....


-----------------
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
thureduehrsen
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 13.11.2007
Mitteilungen: 804
Aus: Kiel, Deutschland
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.12, eingetragen 2020-08-05


Wirst du jemals anfangen, vernünftig zu arbeiten?

Leite ein Programm her, das per Konstruktion genau das leistet, was du geleistet haben willst und führe Buch darüber, welche Variablen wo wie wozu genutzt werden!
und belästige uns nicht mit Fragen der Form "die Variable sowieso ist nicht definiert"...

mfg
thureduehrsen



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.13, vom Themenstarter, eingetragen 2020-08-05


Ich hab die Lösung gefunden. Man muss öfter mal den Kernel neu starten. dann sind alle alten herumschwirrenden Variablen wohl gelöscht!


-----------------
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]