phi und e
This commit is contained in:
@@ -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",
|
||||||
|
|||||||
191
app/tools.py
191
app/tools.py
@@ -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():
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user