Matroids Matheplanet Forum Index
Moderiert von Bilbo matph
Matroids Matheplanet Forum Index » Informatik » Python Schleifenvermeidung
Autor
Schule Python Schleifenvermeidung
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2847
  Themenstart: 2022-06-23 10:44

Das funktioniert jetzt. Jetzt möchte ich noch die PZ 11 und 13 einbauen. Gibt es einen Weg, das zu erledigen, ohne dass ich für jede PZ eine weitere for-zx-Schleife einbauen muss? So, wie es jetzt ist, verstehe ich den Code 100% \sourceon Python \numberson from sympy.ntheory import primerange from math import sqrt länge=10 nr=0 pzliste=[]# auf das erste drittel gekürzt, 3raus, weil nicht variiert werden muss grundliste=[] printliste=[] code=[] diccounter={} k=0 def def_pzliste(länge): pzliste=[] for x in primerange(3,10): # man muss aufpassen, dass hier nicht die höheren PZ reinkommen, wenn man die Länge verändert. Deswegen hier die Länge rausgenommen pzliste.append(x) #print(pzliste) return pzliste def def_variator(a,b,c,länge): code=[] code.append(a) #muss von hinten gelesen werden, also vom Ende der Grundliste her code.append(b) code.append(c) return code for y in range(1,länge+1): grundliste.append(1) #print("Gruli",len(grundliste),grundliste,grundliste.count(1)) pzliste=def_pzliste(länge) z=1 for z0 in range(0,3): for z1 in range(0,5): for z2 in range(0,7): nr+=1 code=def_variator(z0,z1,z2,länge) printliste=grundliste.copy() for i,x in enumerate(pzliste): # in i ist der Index von x z=1 while z <= länge: if z%x==code[i]: printliste[(z-1)]=x z+=1 var=printliste.count(1) print("Nr:",nr,"Code",code,"Folge",printliste,"Löcher:",var) # print(nr,code,pzliste,printliste,var) if var in diccounter: k=diccounter.get(var)+1 diccounter.update({var:k}) else: diccounter[var]=1 for key in sorted(diccounter.keys()): print("%s: %s" % (key, diccounter[key])) print(diccounter) print("Finis algoritmi") \sourceoff


   Profil
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 3135
  Beitrag No.1, eingetragen 2022-06-23 12:01

Da du deinen Code ja angeblich verstehst, wäre es doch am Einfachsten, wenn du ihn mal detailliert erklärst. Dann verstehen ihn (vielleicht) auch Normalsterbliche und können dir bei der Beantwortung deiner Fragen helfen. Noch besser wäre es natürlich, gewünschte Eingabe und Ausgabe des Programms zu beschreiben.


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2847
  Beitrag No.2, vom Themenstarter, eingetragen 2022-06-23 15:33

\quoteon(2022-06-23 12:01 - DerEinfaeltige in Beitrag No. 1) Da du deinen Code ja angeblich verstehst, wäre es doch am Einfachsten, wenn du ihn mal detailliert erklärst. \quoteoff Eingabe ist: Länge = 10 Ausgabe: \sourceon Python \numberson ... ... Nr: 100 Code [2, 4, 1] Folge [7, 3, 1, 5, 3, 1, 1, 7, 5, 1] Löcher: 4 Nr: 101 Code [2, 4, 2] Folge [1, 7, 1, 5, 3, 1, 1, 3, 7, 1] Löcher: 5 Nr: 102 Code [2, 4, 3] Folge [1, 3, 7, 5, 3, 1, 1, 3, 5, 7] Löcher: 3 Nr: 103 Code [2, 4, 4] Folge [1, 3, 1, 7, 3, 1, 1, 3, 5, 1] Löcher: 5 Nr: 104 Code [2, 4, 5] Folge [1, 3, 1, 5, 7, 1, 1, 3, 5, 1] Löcher: 5 Nr: 105 Code [2, 4, 6] Folge [1, 3, 1, 5, 3, 7, 1, 3, 5, 1] Löcher: 4 2: 1 3: 8 4: 34 5: 54 6: 8 {4: 34, 3: 8, 5: 54, 6: 8, 2: 1} Finis algoritmi \sourceoff Er gibt also die 105 (hier gekürzt) Möglichkeiten aus, die PZ 3,5 und 7 auf die Länge von 10 Stellen zu verteilen. Und dabei zählt er, wieviele div. Variationen es mit 2,3,4,5 und 6 Leerstellen (Löcher) gibt. (die Eins in der Folge) Wozu brauch ich das? Ich möchte aus höheren Bereichen, bei denen sich eine Brut-Force-Methode aus Zeitgründen versagt, die Querin-Numbers* heraussuchen. Dazu muss ich die Variationen der PZ des untersten Drittels der jeweiligen PZ-Liste nach denjenigen Variationen durchscrollen, bei denen eine primteilerunterLängegesättigten Folge ung. nat. Zahlen überhaupt möglich ist. Querin hat mir eine Zahl mitgeteilt, die das Startglied einer Folge von 43 ung. nat. Zahlen ist, deren jede über einen kleinen Primteiler <= 43 verfügt. Ich tue jetzt mal so, als ob ich sie nicht kenne, und nur wüsste, dass sie existiert. Gesucht ist jetzt das Startglied und die Anzahl solcher Folgen innerhalb des Primorials 43, denn darunter muss sie liegen, und es müssen mindestens 2 sein, es können aber auch mehr sein, ich weiss es nicht. Darüber liegt keine Info vor. Wir müssen zuerst die Anzahl bestimmen, und dann können wir uns um die Startzahlen kümmern. Eine Brut Force Methode scheidet wegen meiner begrenzten Programmierkenntnisse und der Leistung bzw. der zur Verfügung stehenden Zeit aus. Ein anderer Weg ist, nur das untere Drittel durchzuscrollen nach den Varianten mit den wenigsten Leerstellen, weil das mittlere Drittel nur 2 und das letzte Drittel der PZ bis 43 max 2 stellen besetzen kann. 1. Drittel PZ 3 - inkl. 13 - 5 2. Drittel PZ 17- inkl. 23 - 3 3. Drittel PZ 29 - inkl. 43 - 5 Es sind also alle Varianten von Interesse, wo nach Positionierung des unteren Drittels noch je zwei Löcher für die 3 PZ des mittleren Drittels = 6 Löcher + 9 Löcher für die 5 PZ des obersten Drittels der PZ Liste, vorhanden sind. 9 Löcher und nicht 10, weil die letzte PZ, die 43 nur einmal vorkommen kann. Mir ging es hier programmiertechnisch darum die Schleifenerweiterung so zuhaben, dass ich bei einer Vergrösserung der Liste der PZ des unteren Drittels nicht für jede neue PZ eine neue Schleife installieren muss. *Querin-Numbers sind die Startzahlen von primteilerunterLängegesättigten Folgen ung. nat. Zahlen. ** Programm oben angepasst


   Profil
Bekell hat die Antworten auf ihre/seine Frage gesehen.
Bekell wird per Mail über neue Antworten informiert.

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