Matroids Matheplanet Forum Index
Moderiert von Bilbo matph
Matroids Matheplanet Forum Index » Informatik » Python Fehler im Zehler....
Autor
Schule Python Fehler im Zehler....
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2517
  Themenstart: 2021-08-27

\sourceon Python \numberson liste=[] moddic={} z=0 for y in range(0,20): liste.append(y) for x in liste: if x%3==0 and x%2==0: z=moddic.get(1) z=z+1 moddic.update({1:z}) if x%3==0 and x%2!=0: z=moddic.get(2) z=z+1 moddic.update({2:z}) if x%3==1 and x%2==0: z=moddic.get(3) z=z+1 moddic.update({3:z}) if x%3==1 and x%2!=0: z=moddic.get(4) z=z+1 moddic.update({4:z}) if x%3==2 and x%2==0: z=moddic.get(5) z=z+1 moddic.update({5:z}) if x%3==2 and x%2!=0: z=moddic.get(6) z=z+1 moddic.update({6:z}) print(liste,"y",y,"x",x,moddic) \sourceoff was könnte hierdran falsch sein? Er bemängelt meine altertümliche Zeile: z=z+1, das andre z+=1 wollte er auch nicht!


   Profil
gonz
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 16.02.2013
Mitteilungen: 3970
Wohnort: Harz
  Beitrag No.1, eingetragen 2021-08-27

Hallo Bekell, kann es sein dass moddic beim Durchlaufen fraglichen Anweisung leer ist und deshalb moddic.get(1) den Werte None zurückliefert? Grüße, Gonz


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2517
  Beitrag No.2, vom Themenstarter, eingetragen 2021-08-27

\quoteon(2021-08-27 12:42 - gonz in Beitrag No. 1) Hallo Bekell, kann es sein dass moddic beim Durchlaufen fraglichen Anweisung leer ist und deshalb moddic.get(1) den Werte None zurückliefert? Grüße, Gonz \quoteoff Danke, gonz!


   Profil
tactac
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 15.10.2014
Mitteilungen: 2194
  Beitrag No.3, eingetragen 2021-08-27

Tipp: In collections gibt es eine Klasse namens defaultdict. Da kann man angeben, welchen Wert Schlüssel bekommen sollen, denen bisher noch keiner zugeordnet ist. In dem Beispiel hier würde sich anbieten: \sourceon Python moddic = defaultdict(lambda: 0) \sourceoff Der Code weiter unten könnte dann schön übersichtlich so ausfallen: \sourceon Python # ... if x%3==0 and x%2==0: moddic[1] += 1 if x%3==0 and x%2!=0: moddic[2] += 1 if x%3==1 and x%2==0: moddic[3] += 1 if x%3==1 and x%2!=0: moddic[4] += 1 if x%3==2 and x%2==0: moddic[5] += 1 if x%3==2 and x%2!=0: moddic[6] += 1 \sourceoff


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2517
  Beitrag No.4, vom Themenstarter, eingetragen 2021-08-27

Man kann's auch so machen: \sourceon Python \numberson def makliste(x): mod6=x%6 inti=int(x/6) listo=[] for y in range(1,7): if y > mod6: listo.append(inti) else: listo.append(inti+1) return listo for x in range(1,30): print(x,makliste(x)) \sourceoff statt der vielen mod 3 und 3 einfach mod 6 nehmen....


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

Nein, damit gibt es nicht die gleiche Ergebnisausgabe, wie in #0 gewünscht, in #1 korrigiert und in #3 optimiert.


   Profil
__blackjack__
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 23.09.2021
Mitteilungen: 39
  Beitrag No.6, eingetragen 2021-09-24

Hi Bekell, Es wird ja nicht nur die Zeile bemängelt, sondern in der Fehlermeldung steht ja auch *was* da nicht geklappt hat: \sourceon text Traceback (most recent call last): File "./forum24.py", line 10, in z=z+1 TypeError: unsupported operand type(s) for +: 'NoneType' and 'int' \sourceoff ``+`` funktioniert nicht mit den Datentypen `NoneType` und `int`, womit klar ist, das `z` an der Stelle den Wert `None` hat. Falls Du mit einer Fehlermeldung/einem Traceback nichts anfangen kannst, solltest Du den trotzdem bei der Fehlerbeschreibung mit in den Beitrag stellen, denn das erleichtert anderen Lesern zu sehen *was* schief gelaufen ist, und *wo* im Code das passiert ist. `liste` braucht man nicht wirklich, denn die enthält am Ende ja nur eine sehr langweilige aufsteigende Zahlenfolge. \sourceon python from collections import defaultdict moddic = defaultdict(int) for y in range(1, 20): for x in range(y): if x % 3 == 0 and x % 2 == 0: moddic[1] += 1 if x % 3 == 0 and x % 2 != 0: moddic[2] += 1 if x % 3 == 1 and x % 2 == 0: moddic[3] += 1 if x % 3 == 1 and x % 2 != 0: moddic[4] += 1 if x % 3 == 2 and x % 2 == 0: moddic[5] += 1 if x % 3 == 2 and x % 2 != 0: moddic[6] += 1 print("y", y, "x", x, moddic) \sourceoff Die Regelmässigkeit in den ``if``s kann man durch eine Schleife ersetzen: \sourceon python from collections import defaultdict moddic = defaultdict(int) for y in range(1, 20): for x in range(y): for z in range(1, 7): if x % 3 == (z - 1) // 2 and x % 2 != z % 2: moddic[z] += 1 print("y", y, "x", x, moddic) \sourceoff


   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]