Matroids Matheplanet Forum Index
Moderiert von Bilbo matph
Matroids Matheplanet Forum Index » Informatik » Python wo liegt der Fehler ...
Autor
Schule Python wo liegt der Fehler ...
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2605
  Themenstart: 2021-10-28

\sourceon Python \numberson import math import numpy from sympy.ntheory import isprime from colorama import Fore, Back, Style x=int(210/2) nr=0 zählerpp=0 zählernp=0 zählerpn=0 zählernn=0 for y in range(x,0,-2): c=x a=c-(y+1) b=c+y+1 nr+=1 if isprime(a) and isprime(b): zählerpp+=1 print(nr,"=",f'{Fore.RED}{a}{Style.RESET_ALL}',"+",f'{Fore.RED}{b}{Style.RESET_ALL}',"=",a+b) else: if isprime(a): zählerpn+=1 print(nr,"=",f'{Fore.RED}{a}{Style.RESET_ALL}',"+",b,"=",a+b) else: if isprime(b): zählernp+=1 print(nr,"=",a,"+",f'{Fore.RED}{b}{Style.RESET_ALL}',"=",a+b) else: zählernn+=1 print(nr,"=",a,"+",b,"=",a+b,) print("Insgesamt", zählerpp, "biprime Additionen") print("Insgesamt", zählernp, "backmonoprime Additionen") print("Insgesamt", zählerpn, "frontmonoprime Additionen") print("Insgesamt", zählernn, "nonprime Additionen") \sourceoff Selbst hat es geschrieben, kriegt aber die erste Zeile vom Print nicht weg.... was ist zu tun? Man kann das sicher viel kürzer und intelliganter schreiben, aber so versteh ich es, ohne zu kommentieren und zu überlegen... Ist ja auch einfach..... ich hab nirgends gesagt, dass er bei minus 1 beginnen soll. 1 = -1 + 211 = 210 2 = 1 + 209 = 210 3 = 3 + 207 = 210 4 = 5 + 205 = 210 5 = 7 + 203 = 210 6 = 9 + 201 = 210 . . .


   Profil
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 3037
  Beitrag No.1, eingetragen 2021-10-28

Da du es verstehst, kannst du es ja auch sicherlich erklären und dann sollte jedermann (inklusive "selbst") klar sein, wo der Fehler liegt. Fehler beim Programmieren bedeuten zumeist, dass man es eben doch nicht ganz versteht und wieder zur Bleistifttestphase zurückkehren sollte.


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2925
  Beitrag No.2, eingetragen 2021-10-28

\quoteon(2021-10-28 15:41 - Bekell im Themenstart) ich hab nirgends gesagt, dass er bei minus 1 beginnen soll. \quoteoff Doch, hier: \sourceon python for y in range(x,0,-2): c=x a=c-(y+1) \sourceoff Im ersten Durchlauf ist $y=x$ und daher $a=c-(y+1)=x-(x+1)=-1$. --zippy


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2605
  Beitrag No.3, vom Themenstarter, eingetragen 2021-10-28

Danke Zippy, es war etwas compliziert geraten, ich hab verbessert. So funktioniert es. Vllt can ya yemand noch optimieren... \sourceon Python \numberson import math import numpy from sympy.ntheory import isprime from colorama import Fore, Back, Style c=105 nr=0 zählerpp=0 zählernp=0 zählerpn=0 zählernn=0 for y in range(2,105,2): a=c-y b=c+y nr+=1 if isprime(a) and isprime(b): zählerpp+=1 print(nr,"=",f'{Fore.RED}{a}{Style.RESET_ALL}',"+",f'{Fore.RED}{b}{Style.RESET_ALL}',"=",a+b) else: if isprime(a): zählerpn+=1 print(nr,"=",f'{Fore.RED}{a}{Style.RESET_ALL}',"+",b,"=",a+b) else: if isprime(b): zählernp+=1 print(nr,"=",a,"+",f'{Fore.RED}{b}{Style.RESET_ALL}',"=",a+b) else: zählernn+=1 print(nr,"=",a,"+",b,"=",a+b,) print("Insgesamt", zählerpp+zählernp+zählerpn+zählernn, "Additionen") print("dafon", zählerpp, "biprime Additionen") print("defon", zählernp, "backmonoprime Additionen") print("difon", zählerpn, "frontmonoprime Additionen") print("dofon", zählernn, "nonprime Additionen") print("dufon", zählerpn+zählernp, "monoprime Additionen") \sourceoff


   Profil
haegar90
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 18.03.2019
Mitteilungen: 786
Wohnort: Gog
  Beitrag No.4, eingetragen 2021-10-28

\quoteon(2021-10-28 17:15 - Bekell in Beitrag No. 3) ...Vllt can ya yemand noch optimieren... \quoteoff Vielleicht kannst du auch selbst noch etwas optimieren: \sourceon Python # z.B. zuerst # anstelle von: if...: ... else: ... if...: ... else: ... # einfacher / überschaubarer: if...: ... elif...: ... else: ... ''' EDIT: Hier noch mal besser: The elif statement allows you to check multiple expressions for TRUE and execute a block of code as soon as one of the conditions evaluates to TRUE. Similar to the else, the elif statement is optional. However, unlike else, for which there can be at most one statement, there can be an arbitrary number of elif statements following an if. ''' if expression1: statement(s) elif expression2: statement(s) elif expression3: statement(s) else: statement(s) \sourceoff


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2925
  Beitrag No.5, eingetragen 2021-10-28

Die gesamte if-Kette kann man eigentlich vermeiden: \sourceon python from sympy.ntheory import isprime from colorama import Fore def colorize(val, flag): return f"{Fore.RED}{val}{Fore.RESET}" if flag else f"{val}" c = 105 results = [[0]*2, [0]*2] counter = 0 for d in range(2, c, 2): counter += 1 a, b = c - d, c + d a_isprime, b_isprime = isprime(a), isprime(b) results[a_isprime][b_isprime] += 1 print(f"{counter} = {colorize(a, a_isprime)}" f" + {colorize(b, b_isprime)} = {a + b}") print(f"Insgesamt {counter} Additionen") print(f"davon {results[1][1]} biprim") print(f"davon {results[0][1]} mono2prim") print(f"davon {results[1][0]} mono1prime") print(f"davon {results[0][0]} nonprim") print(f"davon {results[0][1] + results[1][0]} monoprim") \sourceoff


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2605
  Beitrag No.6, vom Themenstarter, eingetragen 2021-10-28

-> Selbst dankt Haegar für den Hinweis auf elif, ich muss diesen Befehl wirklich mal in mein repertoire aufnehmen, und ihn daher = einbauen... -> Selbst dankt Zippy für die kürzere Form der Deklaration, wie z.. hier: \sourceon Python \numberson a, b = c - d, c + d \sourceoff den Befehl: \sourceon Python \numberson results = [[0]*2, [0]*2] \sourceoff versteh ich allerdings nicht!


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2925
  Beitrag No.7, eingetragen 2021-10-28

\quoteon(2021-10-28 18:49 - Bekell in Beitrag No. 6) den Befehl: \sourceon Python \numberson results = [[0]*2, [0]*2] \sourceoff versteh ich allerdings nicht! \quoteoff [0]*2 ist eine Liste aus zwei Nullen und daher [[0]*2, [0]*2] = [[0, 0], [0, 0]].


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