Seite 2 von 2

Verfasst: Sonntag 18. Mai 2008, 17:42
von nightm4r3^
Tut mir leid aber leider Falsch verstanden^^

Es handelt sich hier um eine Ceasar Verschlüsselung. Es ist erst sozusagen inder "beta" Phase, zuerst soll man in das Entry Widget die Zahl eingeben um wie viele Zeichen der Buchstabe verschoben werden soll, und in das Text Widget der zu verschlüsselnde Text. In einem neu erscheinendem Textfeld, soll dann der Text ausgegeben werden.

Beispiel:

Entryfeld: 2
Textfeld: Hallo
Neues Textfeld: Jcnnq


PS: versch=Verschiebung ;)

Verfasst: Sonntag 18. Mai 2008, 17:53
von Leonidas
nightm4r3^ hat geschrieben:was soll ich machen? wieso passt die net zum code
Die Zeile die da angemängelt wird ist:

Code: Alles auswählen

ausgabe=tk.Text(root, text=verschluesseln(text.get(), versch.get()), width=50, height=20) 
In dem von dir gezeigtem Code kommt diese Zeile gar nicht vor!

Stattdessen hast du so eine Zeile:

Code: Alles auswählen

ausgabe=tk.Text(root, text=verschluesseln(text.get(1.0, tk.END), versch.get()), width=50, height=20)
Also wie erwartest du, dass man dein Problem löst, wenn du selbst noch zusätzliche Probleme machst, indem du entweder den falschen Code oder die falsche Exception postest?!

Verfasst: Sonntag 18. Mai 2008, 18:21
von nightm4r3^
entschuldigung ich habe den falschen fehler gepostet

Code: Alles auswählen

Exception in Tkinter callback
Traceback (most recent call last):
  File "F:\Python25\lib\lib-tk\Tkinter.py", line 1403, in __call__
    return self.func(*args)
  File "F:\Python25\Python Programme(self)\verschluesseln.py", line 26, in chiff
    ausgabe=tk.Text(root, text=verschluesseln(text.get(1.0, tk.END), versch.get()), width=50, height=20)
  File "F:\Python25\Python Programme(self)\verschluesseln.py", line 9, in verschluesseln
    laenge=len(text.get(1.0, tk.END))
AttributeError: 'str' object has no attribute 'get'
Es kommt dieser Fehler

Verfasst: Sonntag 18. Mai 2008, 20:03
von wuf
Hallo nightm4r3^

Ich bin leider kein Verschlüsselungs-Experte Hi!

Kannst Du bitte Deine Funktion 'verschluesseln'
einmal durch die folgende ersetzen und kontrol-
lieren was der am Ende der Funktion stehende
Befehl 'print chiffre' auf die Konsole ausgibt:

Code: Alles auswählen

def verschluesseln(text, versch):
	""" Verschlüsselungs-Algorithmus """
	
	#~~ Das Text-Widget liefert automatisch ein '\n' zur eingegebenen
	#   Textzeile mit. Das wird hier entfernt
	text = text.replace('\n','')
	
	#~~ Anzahl Zeichen des zu verschlüsselnden Textes
	laenge = len(text)
	
	text = text.upper()
	
	#~~ Modulo-Operator kann nur auf ganze Zahlen angewendet werden
	shift = int(versch)%26
	
	chiffre=''
	for i in range(0,laenge):
		if text[i]==' ':
			chiffre+=' '
		elif 65<=ord(text[i]) + shift<=90:
			chiffre += chr(ord(text[i])+int(versch))
		elif ord(text[i])+ shift >90:
			chiffre += chr(ord(text[i])+int(versch)-26)
		else:
			chiffre += chr(ord(text[i])+int(versch)+26)
	print chiffre
Gruss wuf :wink:

Verfasst: Sonntag 18. Mai 2008, 20:14
von nightm4r3^

Code: Alles auswählen

JCNNQ
Exception in Tkinter callback
Traceback (most recent call last):
  File "F:\Python25\lib\lib-tk\Tkinter.py", line 1403, in __call__
    return self.func(*args)
  File "F:\Python25\Python Programme(self)\verschluesseln.py", line 37, in chiff
    ausabe.place(x=410, y=70)
NameError: global name 'ausabe' is not defined
Also das Wort gibt er aus. Aber wo der Fehler jetzt liegt, weiß ich auch noch nicht^^

Verfasst: Sonntag 18. Mai 2008, 20:36
von wuf
Hallo nightm4r3^

Die Fehlermeldung sagt:

Python findet den Name 'ausabe' nicht.
Der Grund ist dieser Name hast Du falsch
geschrieben. Du musst ihn auf ausgabe
umändern.

Der Fehlerhafte Namen befindet sich auf Zeile-37!

Viel Spass nightm4r3^ mit der Python & Tkinter-
Programmierung.

Gruss wuf :wink:

Verfasst: Sonntag 18. Mai 2008, 20:41
von nightm4r3^
und dir vielen dank wuf. ich glaube nicht das ich ohne deine hilfe geschafft hätte^^

aber eine frage hät ich noch. und zwar gibt mir das programm jetzt den chiffrierten text in der idle aus. wie bekomm ich ihn jetzt aber in das 2. textfeld?

Verfasst: Sonntag 18. Mai 2008, 21:21
von wuf
Hallo nightm4r3^

Hier ist die Lösung für die Ausgabe des
verschlüsselten Textes:

Hänge am Schluss der Funktion 'verschluesseln'
unmittelbar nach dem Befehl 'print chiffre'
folgende Zeile an:

Code: Alles auswählen

return chiffre
Ersetze die Funktion chiff durch die folgende:

Code: Alles auswählen

def chiff():
	""" Ausgabe des verschlüsselten Textes """
	global text
	
	root.geometry('900x400')
	
	ausgabe = tk.Text(root,
		width  = 50,
		height = 20
		)
	ausgabe.place(x=500, y=100)
	
	chiffre   = verschluesseln(text.get(1.0, tk.END),versch.get()),
	ausgabe.insert(tk.END,chiffre)

Gruss wuf und good luck :wink: