zeichen zählen + rückwärts

This commit is contained in:
2025-07-22 13:34:48 +02:00
parent 4568f65866
commit 5ed64edcef
2 changed files with 63 additions and 56 deletions

View File

@@ -1,8 +1,7 @@
# app.py # app.py
import streamlit as st import streamlit as st
from pyarrow.interchange.from_dataframe import map_date_type
from tools import * import tools
standard_output = ('#### Um den HILFE-Text zu einzelnen Funktionen aufzurufen bitte die Funktion mit leerem' standard_output = ('#### Um den HILFE-Text zu einzelnen Funktionen aufzurufen bitte die Funktion mit leerem'
' Eingabefeld aufrufen.') ' Eingabefeld aufrufen.')
@@ -28,13 +27,24 @@ def auswahl_verarbeiten():
st.session_state.output_text = standard_output st.session_state.output_text = standard_output
st.session_state.map_data = None st.session_state.map_data = None
elif auswahl == "Cesarchiffre (all)": elif auswahl == "Cesarchiffre (all)":
st.session_state.output_text = cesar_all(text) st.session_state.output_text = tools.cesar_all(text)
st.session_state.map_data = None st.session_state.map_data = None
elif auswahl == "BW,BWW,... ermitteln": elif auswahl == "BW,BWW,... ermitteln":
st.session_state.output_text = buchstabenwortwert(text) st.session_state.output_text = tools.buchstabenwortwert(text)
st.session_state.map_data = None st.session_state.map_data = None
elif auswahl == "Buchstabenwert->Text":
st.session_state.output_text = tools.buchstabenwertzutext(text)
st.session_state.map_data = None
elif auswahl == "Zeichenzählen":
st.session_state.output_text = tools.zeichenzaehlen(text)
st.session_state.map_data = None
elif auswahl == "Text rückwärts":
st.session_state.output_text = tools.zeichenkette_rueckwaerts(text)
st.session_state.map_data = None
elif auswahl == "Dummy mit Karte": elif auswahl == "Dummy mit Karte":
output, mapd = funktion_mit_karte(text, additional_parameter) output, mapd = tools.funktion_mit_karte(text, additional_parameter)
st.session_state.output_text = output st.session_state.output_text = output
st.session_state.map_data = mapd st.session_state.map_data = mapd
@@ -59,6 +69,16 @@ option = st.sidebar.radio("hidden_label",
"Dummy mit Karte", "Dummy mit Karte",
"Cesarchiffre (all)", "Cesarchiffre (all)",
"BW,BWW,... ermitteln", "BW,BWW,... ermitteln",
"Buchstabenwert->Text",
"Zeichenzählen",
"Text rückwärts",
"",
"",
"",
"",
"",
"",
"",
), ),
key='option', key='option',
on_change=auswahl_verarbeiten, on_change=auswahl_verarbeiten,

View File

@@ -1,4 +1,4 @@
from helper import * import helper
import pandas as pd import pandas as pd
def funktion_mit_karte(text,param): def funktion_mit_karte(text,param):
@@ -108,7 +108,7 @@ def buchstabenwortwert(eingabetext):
ausgabe += "|_Summe aller Buchstabenwerte:_|" ausgabe += "|_Summe aller Buchstabenwerte:_|"
ausgabe += str(wortsumme) + "|\n" ausgabe += str(wortsumme) + "|\n"
ausgabe += "|_Quersumme der Summe aller Buchstabenwerte / iterierte Quersumme:_|" ausgabe += "|_Quersumme der Summe aller Buchstabenwerte / iterierte Quersumme:_|"
ausgabe += str(q_sum(wortsumme)) + " / " + str(iq_sum(wortsumme)) + "|\n" ausgabe += str(helper.q_sum(wortsumme)) + " / " + str(helper.iq_sum(wortsumme)) + "|\n"
ausgabe += "|_Buchstabenanzahl pro Wort:_|" ausgabe += "|_Buchstabenanzahl pro Wort:_|"
ausgabe += banzwtxt[0:-1] + "|\n" ausgabe += banzwtxt[0:-1] + "|\n"
ausgabe += "|_Gesamtanzahl aller Buchstaben:_|" ausgabe += "|_Gesamtanzahl aller Buchstaben:_|"
@@ -119,27 +119,20 @@ def buchstabenwortwert(eingabetext):
ausgabe += str(wortprodukt) + "|\n" ausgabe += str(wortprodukt) + "|\n"
return ausgabe return ausgabe
def buchstabenwertzutext(eingabetext):
def buchstabenwertzutext():
seperator = ("|,", "_", ".", "-", "/", ";", ",") seperator = ("|,", "_", ".", "-", "/", ";", ",")
bw = {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e', 6: 'f', 7: 'g', 8: 'h', 9: 'i', 10: 'j', 11: 'k', bw = {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e', 6: 'f', 7: 'g', 8: 'h', 9: 'i', 10: 'j', 11: 'k',
12: 'l', 13: 'm', 14: 'n', 15: 'o', 16: 'p', 17: 'q', 18: 'r', 19: 's', 20: 't', 21: 'u', 12: 'l', 13: 'm', 14: 'n', 15: 'o', 16: 'p', 17: 'q', 18: 'r', 19: 's', 20: 't', 21: 'u',
22: 'v', 23: 'w', 24: 'x', 25: 'y', 26: 'z', 27: 'ä', 28: 'ö', 29: 'ü', 30: 'ß'} 22: 'v', 23: 'w', 24: 'x', 25: 'y', 26: 'z', 27: 'ä', 28: 'ö', 29: 'ü', 30: 'ß'}
eingabetext = Eingabe.get(1.0, END)
eingabetext = eingabetext.rstrip() eingabetext = eingabetext.rstrip()
if eingabetext == "": if eingabetext == "":
Ausgabe.insert(1.0, """HILFE: [Buchstabenwerte zu Text] return ("### HILFE: [Buchstabenwerte zu Text]\n"
Die eingegebenen Buchstabenwert werden in die " Die eingegebenen Buchstabenwerte werden in die entsprechenden Buchstaben umgewandelt."
entsprechenden Buchstaben umgewandelt. " (A=1 B=2 .... Ä=27 Ö=28 Ü=29 ß=30) Als Trennungszeichen zwischen den Zahlen sind folgende"
(A=1 B=2 .... Ä=27 Ö=28 Ü=29 ß=30) " Zeichen erlaubt: | , _ . - / ; , und Leerzeichen. Bei Verwendung von Leerzeichen sollten"
Als Trennungszeichen zwischen den Zahlen sind " möglichst nur 1 Leerzeichen zwischen den Zahlen verwendet werden (überzählige Leerzeichen"
folgende Zeichen erlaubt: | , _ . - / ; , und " werden sonst als nicht erkannte Zeichen behandelt).")
Leerzeichen. Bei Verwendung von Leerzeichen
sollten möglichst nur 1 Leerzeichen zwischen
den Zahlen verwendet werden (überzählige
Leerzeichen werden sonst als nicht erkannte
Zeichen behandelt).""" + "\n\n")
else: else:
se = "" se = ""
for s in seperator: for s in seperator:
@@ -151,14 +144,14 @@ Zeichen behandelt).""" + "\n\n")
try: try:
ausz = int(eingabetext) ausz = int(eingabetext)
except ValueError: except ValueError:
Ausgabe.insert(1.0, "Keine Zahl oder gültiges Trennzeichen (, ; . / - _ | oder Leerzeichen) erkannt!\n", return "Keine Zahl oder gültiges Trennzeichen (, ; . / - _ | oder Leerzeichen) erkannt!\n"
"re")
else: else:
if ausz not in bw: if ausz not in bw:
Ausgabe.insert(1.0, "Die eingegebene Zahl ist kein gültiger Buchstabenwert!\n", "re") return "Die eingegebene Zahl ist kein gültiger Buchstabenwert!\n"
else: else:
Ausgabe.insert(1.0, bw[ausz] + "\n") return bw[ausz]
else: else:
ausgabe_text = ""
txt = eingabetext.split(se) txt = eingabetext.split(se)
atxt = "" atxt = ""
ignor = "" ignor = ""
@@ -172,36 +165,29 @@ Zeichen behandelt).""" + "\n\n")
atxt = atxt + bw[az] atxt = atxt + bw[az]
else: else:
ignor = ignor + str(z) + " " ignor = ignor + str(z) + " "
Ausgabe.insert(1.0, atxt + "\n")
Ausgabe.insert(1.0, "umgewandelte Zeichen:\n", "bu")
if ignor != "": if ignor != "":
Ausgabe.insert(1.0, ignor + "\n") ausgabe_text += "_Achtung folgendes wurde ignoriert:_ \n"
Ausgabe.insert(1.0, "Achtung folgendes wurde ignoriert:\n", "re") ausgabe_text += ignor + " \n"
ausgabe_text += "_umgewandelte Zeichen:_ \n"
ausgabe_text += atxt
return ausgabe_text
def zeichenkette_rueckwaerts(eingabetext):
def zeichenkette_rueckwaerts():
eingabetext = Eingabe.get(1.0, END)
eingabetext = eingabetext.rstrip() eingabetext = eingabetext.rstrip()
if eingabetext == "": if eingabetext == "":
Ausgabe.insert(1.0, """HILFE: [Zeichenkette rückwärts] return ("### HILFE: [Zeichenkette rückwärts]\n"
Diese Funktion gibt die eingegebene Zeichenkette "Diese Funktion gibt die eingegebene Zeichenkette von hinten nach vorn gelesen aus.")
von hinten nach vorn gelesen aus.\n""")
else: else:
Ausgabe.insert(1.0, eingabetext[::-1] + "\n") return eingabetext[::-1]
def zeichenzaehlen(eingabetext):
def zeichenzaehlen():
eingabetext = Eingabe.get(1.0, END)
eingabetext = eingabetext.rstrip() eingabetext = eingabetext.rstrip()
if eingabetext == "": if eingabetext == "":
Ausgabe.insert(1.0, """HILFE: [Zeichenzählen] return ("### HILFE: [Zeichenzählen]\n"
Es wird das Vorkommen jedes einzelnen Zeichens gezählt "Es wird das Vorkommen jedes einzelnen Zeichens gezählt und ausgegeben. Achtung! Leerzeichen,"
und ausgegeben. " Tabulatorzeichen und Zeilenumbrüche werden nur vor dem letzten sichtbaren Zeichen gezählt!!!")
Achtung! Leerzeichen, Tabulatorzeichen und Zeilenumbrüche
werden nur vor dem letzten sichtbaren Zeichen gezählt!!!""" + "\n\n")
else: else:
ausgabetext = ""
anzahl = {} anzahl = {}
for b in eingabetext: for b in eingabetext:
if b in anzahl: if b in anzahl:
@@ -211,18 +197,19 @@ werden nur vor dem letzten sichtbaren Zeichen gezählt!!!""" + "\n\n")
s = [] s = []
for key in anzahl: for key in anzahl:
s.append(key) s.append(key)
s.sort(reverse=True) s.sort()
ausgabetext += f"Es wurden {len(anzahl)} unterschiedliche Zeichen gefunden. \n"
ausgabetext += "| Zeichen | Anzahl |\n|----|----|\n"
for i in s: for i in s:
if ord(i) == 9: if ord(i) == 9:
Ausgabe.insert(1.0, "[TAB] = {} mal\n".format(anzahl[i])) ausgabetext += f"|TAB|{anzahl[i]}|\n"
elif ord(i) == 32: elif ord(i) == 32:
Ausgabe.insert(1.0, "[SPACE] = {} mal\n".format(anzahl[i])) ausgabetext += f"|SPACE|{anzahl[i]}|\n"
elif ord(i) == 10: elif ord(i) == 10:
Ausgabe.insert(1.0, "[LINEFEED] = {} mal\n".format(anzahl[i])) ausgabetext += f"|LINEFEED| = {anzahl[i]}|\n"
else: else:
Ausgabe.insert(1.0, "{} = {} mal\n".format(i, anzahl[i])) ausgabetext += f"|{i}|{anzahl[i]}|\n"
Ausgabe.insert(1.0, "Es wurden {} unterschiedliche Zeichen gefunden.\n".format(len(anzahl))) return ausgabetext
def quersummen(): def quersummen():
seperator = ("|,", "_", ".", "-", "/", ";", ",") seperator = ("|,", "_", ".", "-", "/", ";", ",")
@@ -3064,7 +3051,7 @@ Koordinaten ergibt.
la = float(text[0]) la = float(text[0])
lo = float(text[1]) lo = float(text[1])
if not la < -180 and not la > 180 and not lo < -180 and not lo > 180: if not la < -180 and not la > 180 and not lo < -180 and not lo > 180:
x, y = dec_to_maptiles(la, lo, zoom) x, y = helper.dec_to_maptiles(la, lo, zoom)
Ausgabe.insert(1.0, "Zoom:{:>2} X:{:<10} Y:{}\n".format(zoom, x, y)) Ausgabe.insert(1.0, "Zoom:{:>2} X:{:<10} Y:{}\n".format(zoom, x, y))
except ValueError: except ValueError:
pass pass
@@ -3072,9 +3059,9 @@ Koordinaten ergibt.
elif len(text) == 2: elif len(text) == 2:
for zoom in range(30, 0, -1): for zoom in range(30, 0, -1):
try: try:
la, lo = maptiles_to_dec(int(text[0]), int(text[1]), zoom) la, lo = helper.maptiles_to_dec(int(text[0]), int(text[1]), zoom)
if not la < -180 and not la > 180 and not lo < -180 and not lo > 180: if not la < -180 and not la > 180 and not lo < -180 and not lo > 180:
Ausgabe.insert(1.0, "Zoom:{:>2} DEG: {:<23} DEC: {} {}\n".format(zoom, dec_to_deg(la, lo), Ausgabe.insert(1.0, "Zoom:{:>2} DEG: {:<23} DEC: {} {}\n".format(zoom, helper.dec_to_deg(la, lo),
round(la, 5), round(lo, 5))) round(la, 5), round(lo, 5)))
except ValueError: except ValueError:
pass pass