Seite 13 von 39
Re: kleine Mathe-Spielereien
Verfasst: Dienstag 6. Juni 2023, 15:34
von OSWALD
]6.6.2023
Jetzt noch einmal aber mikt Zahlen, jedoch mit der Formatierujg
da klemmt es nolch heftig.
OSWALD
Code: Alles auswählen
mport re
text ='''Summe der Einkünfte = Gesamtbetrag der Einkünfte 56.374,00
Beschränkt abziehbare Sonderausgaben:
Vorsorgeaufwendungen
Gesamte Altersvorsorgeaufwendungen 11.160,00
davon werden 90% berücksichtigt 10.044,00
ab AG-Anteil gesetzliche Rentenversicherung/Zuschüsse - 5.580,00
Abzugsfähige Altersvorsorgeaufwendungen 4.464,00
Gesamte sonstige Vorsorgeaufwendungen 6.191,00
Begrenzung der Aufwendungen auf 1.900,00
Mindestens:
Basiskrankenversicherung und Pflegeversicherung 5.316,00
(Kürzung gesetzliche Krankenversicherung um 4% berücksichtigt)
Ansatz des höheren Betrags 5.316,00
Abzugsfähige Vorsorgeaufwendungen gesamt 9.780,00 »
Unbeschränkt abziehbare Sonderausgaben:
Gezahlte Kirchensteuer 947,00 »
Summe unbeschränkt abziehbare Sonderausgaben 947,00
Einkommen = zu versteuerndes Einkommen 45.647,00'''
pattern = '\w+'
attern = "[0-9]"
pattern_regex = re.compile(pattern)
result = pattern_regex.findall(text)
print(result)
Re: kleine Mathe-Spielereien
Verfasst: Samstag 17. Juni 2023, 16:19
von OSWALD
17.06.2023
Seit einigen Tagen versuche ich jetzt mich mit Regex
anzufreunden. Ich verfüge inzwischen über zahlreiche
Beispiele für reguläre Ausdrücke, kann aber nicht beurteilen
ob ich wesentliche Fortschritte gemacht habe.
Anbei ein Code der mit search- und findall-Funktion sowwie
mit diversen pattern experimentieren lässt un viele andere
perfekt laufende Beispiele.
Es ist recht lustig, aber eine Sysiphus -Arbeit.
Gute Zeit OSWALD
Code: Alles auswählen
#
import re
def Silben_finden (word , str):
#m = re.search(word,str)
m = re.findall(word,str)
return m
str = ''' Arm am Beutel, krank am Herzen 536678
Schleppt ich meine langen Tage.
Armut ist die größte Plage,
Reichthum ist das höchste Gut! 44
Und zu enden meine Schmerzen,
Ging ich einen Schatz zu graben.
Meine Seele sollst du haben!
Schrieb ich hin mit eignem Blut.
566
Und so zog ich Kreis um Kreise,
Stellte wunderbare Flammen,
Kraut und Knochenwerk zusammen:
die Beschwörung war vollbracht.
Und auf die gelernte Weise124aa
Grub ich nach dem alten Schatze
Auf dem angezeigten Platze;
Schwarz und stürmisch war die Nacht.'''
print("Beliebige pattern Silben oder Zahlen eingeben")
#word ='[a-zA-Z0-9] '
#word ='Armut ist die größte Plage'
#word = '\d+'
#word = '\w+\s'
#word = 'Und zu enden meine Schmerzen,'
#word = 'ab?'
word = '(a|A)'
res = Silben_finden(word,str)
if res is None:
print("Wort nicht gefunden!!")
else:
print("Suche ist erfolgreich!")
print()
print("Das gesuchte Wort/Text lautet ::",res)
Re: kleine Mathe-Spielereien
Verfasst: Samstag 17. Juni 2023, 17:27
von __blackjack__
Sowohl `Silben_finden()` als auch `word` sind falsch benannt, weil die Funktion keine Silben findet, und `word` kein Wort ist, sondern ein Suchmuster.
Re: kleine Mathe-Spielereien
Verfasst: Freitag 23. Juni 2023, 10:47
von OSWALD
23.6.20
Die Beschäftgung mit Regex hat sich quasi als
ein Fass ohne Boden erwiesen. Gleichzeiitig
aber ach ein gewisses Suchtpotential gezeigt.
Inzwischen bin ich auf NUMBA gestossen.
Ich habe die enorme Beschleunigung von
Berechnungen getestet .
Hier der Test mit einem hier bereits einmal
gezeigtem Programm.
(einmal mit und ohne ''import numba' =
Gute Zeit OSWALD
Code: Alles auswählen
from math import sqrt
import numba
def prim(n):
if n % 2 == 0:
return False
else:
for i in range(2,int(sqrt(n))+1):
if n % i == 0:
return False
return True
unten = int(input ("Anfangswert :", ))
oben = int(input("Maximalwert eingeben: ")) # hier der Zusatz #
for i in range(unten,oben):
if prim(i) == True and prim(i) == prim(i+2):
print(i)
Re: kleine Mathe-Spielereien
Verfasst: Freitag 23. Juni 2023, 11:38
von grubenfox
... und die schnellere Variante:
Code: Alles auswählen
def prim_schnell(n):
if n % 2 == 0:
return False
else:
for i in range(3,int(sqrt(n))+1,2):
if n % i == 0:
return False
return True
ohne Numba ungefähr doppelt so schnell im Vergleich zu 'prim'.
Re: kleine Mathe-Spielereien
Verfasst: Freitag 23. Juni 2023, 12:52
von OSWALD
23.6.2023
In meinem System Python 3.11 und Spyder 5.1. läuft auch meine wohlgefüllte
Datenbank SQLite 3 ohne Probleme und vor allem sehr schnell.
Ich werde nun NUBA auch auf Compatibiltät mit Visalisierungen prüfen,
was in manchen Fällen auch viel Zeit erdorfert.
Gruss OA SWALD
Re: kleine Mathe-Spielereien
Verfasst: Freitag 23. Juni 2023, 13:20
von __blackjack__
Noch mal verdoppeln kann man die Geschwindigkeit wenn man `prim()` nicht direkt hintereinander zwei mal mit dem gleichen Argument aufruft.
Re: kleine Mathe-Spielereien
Verfasst: Samstag 24. Juni 2023, 11:08
von OSWALD
24.6.2023
Zum eigentlichen Thema (Mathe-Spielereien)
Derzeit geistert ein 'math.Rätsel' durch das Internet.
Es lautet §**x -2**x = 65
Und im Internet wird es auf umständlichste Weise gelöst.
Es geht aber durch Logarithmieren ganz einfach und noch viel leichter
durch Python. Es zeigt auch die elementare Bedeutung der Logarithmen
für die Mathematik ; heut in der Schule gerne für überflüssig erklärt.
Gruss OSWALD
Code: Alles auswählen
[
#3**x -2**x #= 65
print(3**2-2**2)
print(3**3-2**3 )
print(3**4-2**4)
print(3**5-2**5)
/code]
Re: kleine Mathe-Spielereien
Verfasst: Dienstag 27. Juni 2023, 11:06
von grubenfox
OSWALD hat geschrieben: Samstag 17. Juni 2023, 16:19
17.06.2023
Seit einigen Tagen versuche ich jetzt mich mit Regex
anzufreunden. Ich verfüge inzwischen über zahlreiche
Beispiele für reguläre Ausdrücke, kann aber nicht beurteilen
ob ich wesentliche Fortschritte gemacht habe.
Habe ich gerade entdeckt:
https://danielfett.de/2006/03/20/regula ... -tutorial/
Re: kleine Mathe-Spielereien
Verfasst: Mittwoch 28. Juni 2023, 15:15
von OSWALD
28.6.23
Ich fange jetzt noch einmal von vorne an.
Ganz einfach. Ich suche , wieviele Klein oder Großbuchstaben
im Text vorkommen. . Hier ein erstes Beispiel.
Dann vielkleicht Silben unterschidlicher Länge usw.
OSWALD
Code: Alles auswählen
import re
text = '''Der Schatzgräber :Arm am Beutel, krank am Herzen Schleppt ich meine langen Tage
Armut ist die größte Plage Reichtum ist das höchste Gut! nd zu enden meine Schmerzen
Ging ich einen Schatz zu graben Meine Seele sollst du haben!Schrieb ich hin mit eignem Blut.
Und so zog ich Kreis um Kreise, Stellte wunderbare Flammen,Kraut und Knochenwerk zusammen:
Die Beschwörung war vollbracht.Und auf die gelernte Weise Grub ich nach dem alten Schatze
Auf dem angezeigten Platze; Schwarz und stürmisch war die Nacht usw
Der Schatzgräber findet 1243 5678 7437 9559 . X X X X X '''
#pattern = '\w+'
#pattern ='\d+'
#pattern = ' [a]'
#pattern = '[A]'
#pattern = '[S]'
#pattern ='X'
result = re.findall(pattern, text)
print(result)
Re: kleine Mathe-Spielereien
Verfasst: Mittwoch 28. Juni 2023, 16:07
von __blackjack__
Für 4 von den 6 auskommentierten Mustern braucht man keine regulären Ausdrücke, da könnte man einfach die `count()`-Methode auf Zeichenketten verwenden. Und Zeichenmengen mit nur einem Zeichen machen keinen Sinn.
Code: Alles auswählen
import re
TEXT = """Der Schatzgräber :Arm am Beutel, krank am Herzen Schleppt ich meine langen Tage
Armut ist die größte Plage Reichtum ist das höchste Gut! nd zu enden meine Schmerzen
Ging ich einen Schatz zu graben Meine Seele sollst du haben!Schrieb ich hin mit eignem Blut.
Und so zog ich Kreis um Kreise, Stellte wunderbare Flammen,Kraut und Knochenwerk zusammen:
Die Beschwörung war vollbracht.Und auf die gelernte Weise Grub ich nach dem alten Schatze
Auf dem angezeigten Platze; Schwarz und stürmisch war die Nacht usw
Der Schatzgräber findet 1243 5678 7437 9559 . X X X X X """
def main():
for pattern in [r"\w+", r"\d+"]:
print(re.findall(pattern, TEXT))
for text in [" a", "A", "S", "X"]:
print([text] * TEXT.count(text))
if __name__ == "__main__":
main()
Re: kleine Mathe-Spielereien
Verfasst: Mittwoch 28. Juni 2023, 16:15
von OSWALD
28.6.23
Und hier die erste Erweiterung. Ich fange vorsichtig
nur mit jenen Patern an, die ich selbst erstelle und die ich
auch wirklich verstehe, um darauf aifzubauen.
Das ist die 1.Erweiterung;
OSWALD.
Code: Alles auswählen
import re
text = '''Der Schatzgräber :Arm am Beutel, krank am Herzen Schleppt ich meine langen Tage
Armut ist die größte Plage Reichtum ist das höchste Gut! nd zu enden meine Schmerzen
Ging ich einen Schatz zu graben Meine Seele sollst du haben!Schrieb ich hin mit eignem Blut.
Und so zog ich Kreis um Kreise, Stellte wunderbare Flammen,Kraut und Knochenwerk zusammen:
Die Beschwörung war vollbracht.Und auf die gelernte Weise Grub ich nach dem alten Schatze
Auf dem angezeigten Platze; Schwarz und stürmisch war die Nacht usw
Der Schatzgräber findet 1243 5678 7437 9559 375 X X X X X '''
#pattern = '\w+'
#pattern ='\d+'
#pattern = ' [a]'
#pattern = '[A]'
#pattern = '[S]'
#pattern ='X'
#pattern = '[a-zA-Z0-9]'
pattern = '\d{3,4}'
#pattern = '[a|^b]\w*'
#pattern = '[a{2}]\w+'
#pattern = '[c{3}]\w+'
#pattern = '[dB{0}]'
#pattern = '[h][a-b]'
#attern = " [2-35]"
result = re.findall(pattern, text)
print(result)
Re: kleine Mathe-Spielereien
Verfasst: Mittwoch 28. Juni 2023, 16:38
von __blackjack__
Unter den neuen sind 5 dabei die falsch, beziehungsweise unsinnig aussehen. Einmal ist da wieder einmal eine Zeichenmenge mit nur einem Zeichen dabei — das ist einfach das Zeichen ohne das man das als Zeichenmenge schreiben muss. Und vier Muster sehen so aus als würde das was in der Zeichenmenge steht eine Bedeutung haben die es aber nur ausserhalb der Zeichenmenge *wirklich* hat. Selbst wenn man tatsächlich auf die jeweilige Zeichenmenge die das wirklich bedeutet, testen möchte, sollte man die besser so schreiben, dass man da keine Verwirrung stiften. Also beispielsweise r"[ab|^]\w*", r"[2a{}]\w+", r"[3c{}]\w+", und r"[0dB{}]". Und auch r" [2-35]" ist bescheuert. Das ist das gleiche wie r" [235]" nur das da keiner auf falsche Gedanken kommt.
Re: kleine Mathe-Spielereien
Verfasst: Mittwoch 28. Juni 2023, 16:56
von OSWALD
28.6.23
An __blackjack__
Da gibt es eigentlich nur eines: Regex aufgeben.
Gute Zeitm Oswald
Re: kleine Mathe-Spielereien
Verfasst: Mittwoch 28. Juni 2023, 17:59
von Sirius3
@Oswald: so funktioniert Lernen nunmal, man probiert was aus, und fragt jemanden, der sich damit auskennt, ob man es auch richtig verstanden hat. Da Du zu Deinen Patterns nicht dazuschreibst, was Du eigentlich damit erreichen willst, ist es schwierig, zu sagen, ob das was Du Dir dabei gedacht hast, richtig ist oder nicht, aber durch das Lesen und Vergleichen wirst Du selbst irgendwann auch komplizierte Reguläre Ausdrücke entwickeln können.
Re: kleine Mathe-Spielereien
Verfasst: Donnerstag 29. Juni 2023, 07:30
von OSWALD
29.6.23
Soeben habe ich auf -t:N - gelesen:
"Regex ist die Sprache, die Sprachen bändigt – und die Entwickler manchmal zum Weinen bringt. "
Na , das tröstet mich doch immerhin ein wenig.
Und für die 'tröstenden Worte ' danke ich auch - Sirius - ganz herzlich.
Gleiches gilt für die offenen Worte von __blackjack__-
Faztit: ich mache weiter.
Gute Zeit OSWALD
(Wer immer strebend sich bemüht, den können wir erlösen.
Re: kleine Mathe-Spielereien
Verfasst: Donnerstag 29. Juni 2023, 08:10
von OSWALD
29.6.2023
__blackjack__ schreibt
Und auch r" [2-35]" ist bescheuert. Das ist das gleiche wie r" [235]" nur das da keiner auf falsche Gedanken kommt.
Das verstehe ich jetzt nicht.
Auf t:n wird das pattern [1--21] zitiert. wo liegt hier der Unterschied zu " [2- 35]" ?
Ich sehe hier keinen Unterschied.
Ich habe die Zahlenfolge 1 2 1 dem Text zugefügt
Siehe unten.
Gute Zeit OSWALD
Code: Alles auswählen
import re
text = '''Der Schatzgräber :Arm am Beutel, krank am Herzen Schleppt ich meine langen Tage
Armut ist die größte Plage Reichtum ist das höchste Gut! nd zu enden meine Schmerzen
Ging ich einen Schatz zu graben Meine Seele sollst du haben!Schrieb ich hin mit eignem Blut.
Und so zog ich Kreis um Kreise, Stellte wunderbare Flammen,Kraut und Knochenwerk zusammen:
Die Beschwörung war vollbracht.Und auf die gelernte Weise Grub ich nach dem alten Schatze
Auf dem angezeigten Platze; Schwarz und stürmisch war die Nacht usw
Der Schatzgräber findet 1243 5678 7437 9559 375 X X X X X 1 2 1 '''
#pattern = " [1-35]"
pattern = "[1-21] " # Zitat aus t:n
result = re.findall(pattern, text)
print(result)
# wörtliches Zitat aus t:N:
#Dabei ist zu beachten, dass „Ranges“ zusammen mit isolierten Zeichen zusammen funktionieren können: [0-9.,]
# gibt euch eine Zahl oder . oder , zurück.
#Wichtig: „Ranges“ funktionieren nur für Zeichen, nicht aber für Ziffern beziehungsweise Zahlen.
#Der reguläre Ausdruck [1-21] bedeutet nicht: „Finde Ziffern von 1 bis 21“ sondern „Finde die Ziffern 1 oder 2 oder 1.
Re: kleine Mathe-Spielereien
Verfasst: Donnerstag 29. Juni 2023, 08:18
von Sirius3
Ja genau, das steht doch da, [1-21] bedeutet nicht „Finde Ziffern von 1 bis 21“, deshalb sollte man das nicht so schreiben, weil es den Leser nur auf falsche Gedanken bringt, wenn eigentlich [12] gemeint ist, also die Menge der Zeichen 1 und 2. [0-9.,] ist die Menge der Zeichen 0,1,2,3,4,5,6,7,8,9,. und , da macht es Sinn die vielen Ziffern durch 0-9 abzukürzen, oder bei a-z
Re: kleine Mathe-Spielereien
Verfasst: Donnerstag 29. Juni 2023, 09:32
von grubenfox
noch'n Link:
https://www.webmasterpro.de/coding/einf ... pressions/
und ein Zitat aus dem Text:
Manche Programmierer nennen RegEx auch scherzhaft „schreibgeschützten“ Code, denn reguläre Ausdrücke sind für andere (einschließlich des ursprünglichen Autors) nur sehr schwer oder fast gar nicht lesbar ist, nachdem diese einmal geschrieben wurden.
Da ist etwas wahres dran, finde ich...

Re: kleine Mathe-Spielereien
Verfasst: Donnerstag 29. Juni 2023, 10:04
von __blackjack__
Na da darf jetzt aber das klassiche Zitat von Jamie Zawinski nicht fehlen: „Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.“
