phi und e

This commit is contained in:
2025-07-25 10:32:35 +02:00
parent d0e95a35f2
commit 8e47292ac2
2 changed files with 86 additions and 113 deletions

View File

@@ -158,6 +158,12 @@ def auswahl_verarbeiten():
elif auswahl == "Kreiszahl PI": elif auswahl == "Kreiszahl PI":
st.session_state.output_text = tools.pi_suche(text) st.session_state.output_text = tools.pi_suche(text)
st.session_state.map_data = None st.session_state.map_data = None
elif auswahl == "Eulersche Zahl":
st.session_state.output_text = tools.euler_suche(text)
st.session_state.map_data = None
elif auswahl == "phi (goldener Schnitt)":
st.session_state.output_text = tools.goldener_schnitt_suche(text)
st.session_state.map_data = None
elif auswahl == "Anagrammsuche-DE": elif auswahl == "Anagrammsuche-DE":
st.session_state.output_text = tools.anagramm_suche_de(text) st.session_state.output_text = tools.anagramm_suche_de(text)
st.session_state.map_data = None st.session_state.map_data = None
@@ -261,6 +267,8 @@ option = st.sidebar.radio("hidden_label",
"Nak-Nak -> Text", "Nak-Nak -> Text",
"Navajo -> Text", "Navajo -> Text",
"Kreiszahl PI", "Kreiszahl PI",
"Eulersche Zahl",
"phi (goldener Schnitt)",
"Anagrammsuche-DE", "Anagrammsuche-DE",
"Anagrammsuche-EN", "Anagrammsuche-EN",
"Wortsuche-DE", "Wortsuche-DE",

View File

@@ -1448,6 +1448,84 @@ def pi_suche(eingabetext):
f'{pistr[pos:pos + 20]}...') f'{pistr[pos:pos + 20]}...')
return ausgabetext return ausgabetext
def euler_suche(eingabetext):
eingabetext = eingabetext.rstrip()
if eingabetext == "":
return ("### Eulersche Zahl - Nachkommastellensuche\n"
"Für die eingegebene Zahl/Zahlenreihe X wird versucht die entsprechende X. Nachkommastelle auszugeben "
"und das erst Vorkommen der Zahlenreihe X innerhalb der Nachkommastellen von e "
"(2.71828182845904523.....) zu ermitteln. Aus Performance- und Speicherplatzgründen "
"ist die Suche auf die ersten 10 Millionen Nachkommastellen beschränkt.")
else:
try:
eread = open("./data/e.txt", "r")
except FileNotFoundError:
return "Sorry es scheint die Datei e.txt zu fehlen, welche von dieser Funktion benötigt wird."
else:
estr = ""
for zeile in eread:
estr = estr + zeile.rstrip()
eread.close()
elen = len(estr) - 2
try:
zahlx = int(eingabetext)
except ValueError:
return "Sorry aber ohne gültige Zahleneingabe funktioniert das nicht!"
else:
ausgabetext = "_e (Eulersche Zahl)_ \n \n"
pos = estr.find(eingabetext)
if elen >= zahlx > 0:
ausgabetext += (f"_Die {zahlx}. Nachkommstelle lautet:_ {estr[zahlx + 1]} \n_20 Stellen ab "
f"{zahlx}. Nachkommstelle:_ {estr[zahlx + 1:zahlx + 21]}... \n \n")
else:
ausgabetext += f"_Die verwendete pi.txt kennt leider nur {elen:,} Nachkommstellen._ \n \n"
if pos == -1:
ausgabetext += f"_Zahlenreihe in {elen:,} Nachkommastellen nicht zu finden._"
else:
ausgabetext += (f'erstes Vorkommen von Zahlenfolge "{eingabetext.rstrip()}" ab {pos - 1}. '
f'Nachkommastelle \n20 Stellen ab {pos - 1}. Nachkommstelle: '
f'{estr[pos:pos + 20]}...')
return ausgabetext
def goldener_schnitt_suche(eingabetext):
eingabetext = eingabetext.rstrip()
if eingabetext == "":
return ("### phi(Goldener Schnitt) Nachkommastellensuche\n"
"Für die eingegebene Zahl/Zahlenreihe X wird versucht die entsprechende X. Nachkommastelle auszugeben "
"und das erst Vorkommen der Zahlenreihe X innerhalb der Nachkommastellen von phi "
"(1.618033988749894848204586...) zu ermitteln. Aus Performance- und Speicherplatzgründen ist die "
"Suche auf die ersten 10 Millionen Nachkommastellen beschränkt.")
else:
try:
phiread = open("./data/phi.txt", "r")
except ValueError:
return "Sorry es scheint die Datei phi.txt zu fehlen, welche von dieser Funktion benötigt wird."
else:
phistr = ""
for zeile in phiread:
phistr = phistr + zeile.rstrip()
phiread.close()
philen = len(phistr) - 2
try:
zahlx = int(eingabetext)
except ValueError:
return "Sorry aber ohne gültige Zahleneingabe funktioniert das nicht!"
else:
ausgabetext = "_phi (Goldener Schnitt)_ \n \n"
pos = phistr.find(eingabetext)
if philen >= zahlx > 0:
ausgabetext += (f"_Die {zahlx}. Nachkommstelle lautet:_ {phistr[zahlx + 1]} \n_20 Stellen ab "
f"{zahlx}. Nachkommstelle:_ {phistr[zahlx + 1:zahlx + 21]}... \n \n")
else:
ausgabetext += f"_Die verwendete pi.txt kennt leider nur {philen:,} Nachkommstellen._ \n \n"
if pos == -1:
ausgabetext += f"_Zahlenreihe in {philen:,} Nachkommastellen nicht zu finden._"
else:
ausgabetext += (f'erstes Vorkommen von Zahlenfolge "{eingabetext.rstrip()}" ab {pos - 1}. '
f'Nachkommastelle \n20 Stellen ab {pos - 1}. Nachkommstelle: '
f'{phistr[pos:pos + 20]}...')
return ausgabetext
def anagramm_suche_de(eingabetext): def anagramm_suche_de(eingabetext):
eingabetext = eingabetext.rstrip() eingabetext = eingabetext.rstrip()
if eingabetext == "": if eingabetext == "":
@@ -2980,119 +3058,6 @@ erkannt.
Ausgabe.insert(1.0, "Es konnte keine römische oder arabische Zahl erkannt werden!\n", "re") Ausgabe.insert(1.0, "Es konnte keine römische oder arabische Zahl erkannt werden!\n", "re")
def euler_suche():
hilfetext = """HILFE: [Eulersche Zahl - Nachkommastellensuche]
Für die eingegebene Zahl/Zahlenreihe X wird versucht die
entsprechende X. Nachkommastelle auszugeben und das erst
Vorkommen der Zahlenreihe X innerhalb der Nachkommastellen
von e (2.71828182845904523.....) zu ermitteln.
Da es deutlich schnneller geht mit einer vorgefertigten
Datei zu suchen als die Nachkommastellen zu berechnen
wird die Datei e.txt im Unterverzeichnis "data" benötigt.
Diese Datei enthält die Zahl e mit den ersten 10 Millionen
Nachkommastellen. Wer mehr Stellen braucht, kann sich mit
dem Tool y-cruncher (http://numberworld.org/y-cruncher/)
auch eine Datei mit deutlich mehr Nachkommastellen erstellen
und e.txt damit ersetzen. (Bei 1 Millarde Stellen ist
die Datei dann allerdings schon knapp 1 GB groß und
die Abfrage dauert auch etwas länger)
"""
eingabetext = Eingabe.get(1.0, END)
eingabetext = eingabetext.rstrip()
if eingabetext == "":
Ausgabe.insert(1.0, hilfetext + "\n")
else:
try:
eread = open("./data/e.txt", "r")
except FileNotFoundError:
Ausgabe.insert(1.0, hilfetext + "\n")
else:
estr = ""
for zeile in eread:
estr = estr + zeile.rstrip()
eread.close()
elen = len(estr) - 2
try:
zahlx = int(eingabetext)
except ValueError:
Ausgabe.insert(1.0, "Sorry aber ohne gültige Zahleneingabe funktioniert das nicht!\n", "re")
else:
pos = estr.find(eingabetext)
if pos == -1:
Ausgabe.insert(1.0, "Zahlenreihe in {} Nachkommastellen nicht zu finden.\n\n".format(elen), "re")
else:
Ausgabe.insert(1.0,
"20 Stellen ab {}. Nachkommstelle: {}...\n\n".format(pos - 1, estr[pos:pos + 20]))
Ausgabe.insert(1.0, 'erstes Vorkommen von Zahlenfolge "{}" ab {}. Nachkommastelle\n'.format(
eingabetext.rstrip(), pos - 1))
if elen >= zahlx > 0:
Ausgabe.insert(1.0, "20 Stellen ab {}. Nachkommstelle:"
" {}...\n\n".format(zahlx, estr[zahlx + 1:zahlx + 21]))
Ausgabe.insert(1.0, "Die {}. Nachkommstelle: lautet {}\n".format(zahlx, estr[zahlx + 1]))
else:
Ausgabe.insert(1.0, "Die verwendete e.txt kennt leider nur {} Nachkommstellen.\n\n".format(elen),
"re")
Ausgabe.insert(1.0, "e (Eulersche Zahl)\n\n", "gr")
def goldener_schnitt_suche():
hilfetext = """HILFE: [phi(Goldener Schnitt) Nachkommastellensuche]
Für die eingegebene Zahl/Zahlenreihe X wird versucht die
entsprechende X. Nachkommastelle auszugeben und das erst
Vorkommen der Zahlenreihe X innerhalb der Nachkommastellen
von phi (1.6180339887498948482045...) zu ermitteln.
Da es deutlich schnneller geht mit einer vorgefertigten
Datei zu suchen als die Nachkommastellen zu berechnen
wird die Datei phi.txt im Unterverzeichnis "data" benötigt.
Diese Datei enthält die Zahl phi mit den ersten 10 Millionen
Nachkommastellen. Wer mehr Stellen braucht, kann sich mit
dem Tool y-cruncher (http://numberworld.org/y-cruncher/)
auch eine Datei mit deutlich mehr Nachkommastellen erstellen
und phi.txt damit ersetzen. (Bei 1 Millarde Stellen ist
die Datei dann allerdings schon knapp 1 GB groß und
die Abfrage dauert auch etwas länger)
"""
eingabetext = Eingabe.get(1.0, END)
eingabetext = eingabetext.rstrip()
if eingabetext == "":
Ausgabe.insert(1.0, hilfetext + "\n")
else:
try:
phiread = open("./data/phi.txt", "r")
except ValueError:
Ausgabe.insert(1.0, hilfetext + "\n")
else:
phistr = ""
for zeile in phiread:
phistr = phistr + zeile.rstrip()
phiread.close()
philen = len(phistr) - 2
try:
zahlx = int(eingabetext)
except ValueError:
Ausgabe.insert(1.0, "Sorry aber ohne gültige Zahleneingabe funktioniert das nicht!\n", "re")
else:
pos = phistr.find(eingabetext)
if pos == -1:
Ausgabe.insert(1.0, "Zahlenreihe in {} Nachkommastellen nicht zu finden.\n\n".format(philen), "re")
else:
Ausgabe.insert(1.0,
"20 Stellen ab {}. Nachkommstelle: {}...\n\n".format(pos - 1, phistr[pos:pos + 20]))
Ausgabe.insert(1.0, 'erstes Vorkommen von Zahlenfolge "{}" ab {}. Nachkommastelle\n'.format(
eingabetext.rstrip(), pos - 1))
if philen >= zahlx > 0:
Ausgabe.insert(1.0, "20 Stellen ab {}. Nachkommstelle:"
" {}...\n\n".format(zahlx, phistr[zahlx + 1:zahlx + 21]))
Ausgabe.insert(1.0, "Die {}. Nachkommstelle: lautet {}\n".format(zahlx, phistr[zahlx + 1]))
else:
Ausgabe.insert(1.0, "Die verwendete pi.txt kennt leider nur {} Nachkommstellen.\n".format(philen),
"re")
Ausgabe.insert(1.0, "Phi (Goldener Schnitt)\n\n", "gr")
def url_decode(): def url_decode():