[2.5] Find, printable

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Impi
User
Beiträge: 10
Registriert: Sonntag 22. Juni 2008, 19:16

Hallo,
Bin mit dem ersten Teil meines ersten Programmes fast fertig...
habe aber noch ein Problem...

Code: Alles auswählen

from string import find, printable

def Teilerfremd(a,b): 
    for c in range(2,b): 
        if a%c==b%c==0: 
           return 0 
    else: 
       return 1 
                 
def pubKey_n(seq):
    liste = list(seq)
    zahlen = [int(item)
              for item in liste]
    return reduce(lambda p,q: p*q, zahlen) 

def pubKey_fi(seq):
    liste = list(seq)
    zahlen = [int(item)
              for item in liste]
    return reduce(lambda p,q: (p-1)*(q-1), zahlen)

    
print('----------------------------------------------------------------------------------------------------')
print('        RSA         ')
print('----------------------------------------------------------------------------------------------------')
p = raw_input("Geben Sie eine Primzahl ein: ")
q = raw_input("Geben Sie eine weitere Primzahl ein... Achtung die Primzahlen d\xfcrfen nicht identisch sein!! :")

print ('----------------------------------------------------------------------------------------------------')

p = int(p)
q = int(q)
a = 2
public_n = pubKey_n((p, q))
public_fi = pubKey_fi((p, q))

print("F\xfcr e kommen in Frage")
while 1: 
    if Teilerfremd(a,public_fi)==1 and a!=p and a!=q: 
        print a, 
    if a==1000: 
        break 
    a+=1

print ("----------------------------------------------------------------------------------------------------") 
e = raw_input("Geben Sie e ein!: ")
e = int(e)
print ("----------------------------------------------------------------------------------------------------")

d = 0
while (e*d%public_fi)!=1: 
    d+=1 
    if d==e: 
        d+=1 
        
print ("Daraus ergibt sich d: ") 
print ("d = "),d 
print ("--------------------------------------------------------------------------------------------------- ")
text=raw_input("Geben Sie den Text ein:\n") 
for zeichen in text: 
    print zeichen,":",find(printable,zeichen),"**",e,"%",n 
Ich kann am Ende find und printable nicht benutzen obwohl ich diese oben angegeben habe.
Hab schon gegoogelt aber nix gefunden warscheinlich liegt es auch daran,
dass sobald man das word Find in Google abschickt nix gescheites mehr rauskommt...
Hoffe auf Hilfe
Mfg Impi
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Hallo Impi!

Was heist du kannst printable und find nicht benutzen?
Welche Fehlermeldung bekommst du denn?
BlackJack

@Impi: Für Wahrheitswerte gibt's in Python den Typ `bool` mit den Exemplaren `True` und `False`. Die sollte man auch verwenden, wenn man Wahrheitswerte haben möchte und nicht 1 und 0.

Bei `Teilerfremd()` erzeugst Du mit `range()` eine Liste mit Zahlen, von der Du aber immer nur *eine* auf einmal verwendest. Hier wäre `xrange()` speicherschonender. Ausserdem könntest Du mal überlegen, wie Du den Bereich der Zahlen, die getestet werden, noch ein wenig einschränken kannst.


`pubKey_n` und `pubKey_fi` sind fast identisch und ich hatte es an anderer Stelle ja schon einmal geschrieben, Funktionen die mit Zahlen rechnen, sollten auch Zahlen als Argumente bekommen, also ist eigentlich alles vor der ``return``-Zeile überflüssig. Dann könnte man auch gleich `reduce()` direkt an der Stelle des Aufrufs verwenden. Wenn ich mir dann aber anschaue, das die Funktionen immer nur mit einem Tupel mit zwei Werten aufgerufen werden, dann ist das ja alles noch komplizierter ohne wirkliche Notwendigkeit.

Die ``while``-Schleife ab Zeile 39 sollte eine ``for``-Schleife sein. Das Ergebnis von `Teilerfremd()` muss man nicht noch einmal explizt auf den Wahrheitswert testen.

Bei der ``while``-Schleife in Zeile 52 sieht man IMHO ganz gut warum der Style-Guide Leerzeichen um Operatoren empfiehlt. So zusammengequetscht ist das schlecht lesbar.

Aus dem `string`-Modul sollten nur noch Funktionen verwendet werden, die es nicht als Methoden auf Zeichenketten gibt. Das betrifft `find()`.
Antworten