Seite 1 von 1
Decoder - Einige Fehler
Verfasst: Donnerstag 3. Juni 2010, 12:03
von xpilz
Hallo Community.
Schon seit längerem befasse ich mich mit einem simplen Decoder und Encoder. Darin wird erst nach einer Eingabe gefragt. Diese wird dann decodiert und danach encodiert. Einige Probleme habe ich noch. Das Skript kann keine Leertasten und " oder ' Zeichen verarbeiten. Zudem ist er noch nicht so sauber geschrieben, denke ich.
http://python-forum.de/pastebin.php?mode=view&s=30
Erkennt ihr da den/die Fehler?
Vielen Dank fürs lesen und angucken.
VIele Grüße xpilz
Re: Decoder - Einige Fehler
Verfasst: Donnerstag 3. Juni 2010, 13:05
von BlackJack
@xpilz: Das mag hart klingen aber das ganze Skript ist ziemlicher Murks. Da ist im Grunde jede zweite Zeile ein "WTF!?".
Re: Decoder - Einige Fehler
Verfasst: Donnerstag 3. Juni 2010, 13:12
von xpilz
Hmm

.. das mag daran liegen das es eins meiner ersten Skripte ist.
Re: Decoder - Einige Fehler
Verfasst: Donnerstag 3. Juni 2010, 17:05
von b.esser-wisser
Aber "len_check()" musst du uns erklären -- da hab ich ja gestaunt:
Code: Alles auswählen
def len_check(check_string): # wozu wird hier der string übergeben, hier wird doch nur eine Zahl gebraucht?
"""
Checks a String if its length is over 255
""" # gelogen!
if 33 < len(check_string) < 100:
return len(check_string) #mhh, ok
elif len(check_string) < 33:
return len(check_string) + 33 # Wieso 33?
else: # Ab hier nur noch HÄ?!
# (ist das ein Versuch "return len(check_string) % 100" zu schreiben?
p_cent = (len(check_string)) / 100
p_val = "%0.f" % p_cent
p_cent = p_cent - int(p_val)
p_num = (100 * float(p_cent))
if list(str(p_num))[0] == "-":
p_num = -p_num
p_num = int("%d" % p_num)
return p_num
Allgemeine Coder-Weisheit: "wenn du's nicht erklären kannst, ist es zu kompliziert/falsch"
hth, Jörg
Re: Decoder - Einige Fehler
Verfasst: Donnerstag 3. Juni 2010, 22:25
von Dauerbaustelle
Ich versteh zwar den Algorithmus-Code nicht, aber einige Anmerkungen:
Du musst hier keine Listen nutzen, nimm einfach Strings und mache +, dann erübrigt sich auch die `for`-Schleife.
Du brauchst hier keine Umwandlung zu `list`, man kann auch Strings slicen:
Im Übrigen gibt es `abs`, dann erübrigt sich das ge-stringe auch:
Der nächste Schritt zu verständlichem Code sind sprechende Funktions- und Variablennamen.
Re: Decoder - Einige Fehler
Verfasst: Freitag 4. Juni 2010, 23:07
von xpilz
b.esser-wisser hat geschrieben:Aber "len_check()" musst du uns erklären -- da hab ich ja gestaunt:
Mein Gedanke war den Ascii-Code von jedem eingegebenen Zeichen plus der Länge des Strings zu nehmen. Das Problem wäre dann aber das die Anzahl der Zeichen im String begrenzt wäre Daher ist len_check eine Funktion die überprüfen soll ob der Wert des Strings zwischen 33 und 127 steht. Was erstmal nur testhalber da steht.. Und falls die Länge des Strings über 127 wäre dann nimmt der die Länge teil sie durch 100 zieht die erste Ziffer ab, was in dem Fall nur provisorisch war weil ich nicht wusste wie das sonst geht. Dann nimmt er die Zahl mal 100 und hat dann einen Bereich der zwischen 33 und 127 liegt. Der dann auch wieder enkodierbar wäre. Tut mir leid wenn das ein paar Denkfehler enthält..
und Danke an Dauerbaustelle
Grüße xpilz
Re: Decoder - Einige Fehler
Verfasst: Sonntag 6. Juni 2010, 14:17
von b.esser-wisser
Meinst du dann sowas:
Code: Alles auswählen
LOWER_BOUND, UPPER_BOUND = ord(" ") , 0x7F
"""32 und 127, d.h. alle ASCII-Glyphen"""
def calculate_shift(n):
return n % (UPPER_BOUND - LOWER_BOUND)
def encode(s):
shift_distance = calculate_shift(len(s))
encoded = []
for c in s:
tmp = ord(c) + shift_distance
if tmp > UPPER_BOUND:
tmp = tmp - UPPER_BOUND + LOWER_BOUND
encoded.append(chr(tmp))
return "".join(encoded)
def decode(s):
shift_distance = calculate_shift(len(s))
decoded = []
for c in s:
tmp = ord(c) - shift_distance
if tmp < LOWER_BOUND:
tmp += UPPER_BOUND - LOWER_BOUND
decoded.append(chr(tmp))
return "".join(decoded)
hth, Jörg
Re: Decoder - Einige Fehler
Verfasst: Sonntag 6. Juni 2010, 18:25
von xpilz
Das trifft es. Wo ich mir das so durchlese, sehr einfach. Danke für deine Mühe.
Aber zwei Fragen:
Warum kann man LOWER_BOUND und UPPER_BOUND nicht gleich 32 und 127 in dezimal Schreibweise übergeben?
Und wieso ist mein Skript so.. "um die Ecke gedacht"

. Naja ich bin überzeugt das kann ich ändern.
Grüße xpilz
Re: Decoder - Einige Fehler
Verfasst: Sonntag 6. Juni 2010, 19:36
von b.esser-wisser
xpilz hat geschrieben:Warum kann man LOWER_BOUND und UPPER_BOUND nicht gleich 32 und 127 in dezimal Schreibweise übergeben?
Natürlich kann man das - es gibt eben viele verschiedene Arten Zahlen zu notieren, so dass ich (nicht besonders erfolgreich, zugegeben) versucht habe eine zu finden, die gut beschreibt wo diese Zahlen herkommen.
Re: Decoder - Einige Fehler
Verfasst: Sonntag 6. Juni 2010, 20:12
von Dauerbaustelle
aber 0x7F?!
Re: Decoder - Einige Fehler
Verfasst: Sonntag 6. Juni 2010, 20:40
von BlackJack
@Dauerbaustelle: 0x7F erweckt bei mir sofort die Assoziation "Byte bei dem alle bis auf das höchstwertige Bit gesetzt sind". Das passiert wenn man mal zu lange zu nah an der Maschine programmiert hat.

Re: Decoder - Einige Fehler
Verfasst: Sonntag 6. Juni 2010, 21:49
von xpilz
Na das is ja komisch ich Google mal alles was ich hier nicht verstanden habe. Danke @all
Gruß