2 Stimmen

Caesars Chiffre mit Python, könnte ein wenig Hilfe gebrauchen

Ich versuche, eine "Caesar's Cipher" mit Python zu erstellen. Kann mir jemand sagen, wie das aussieht? Gehe ich in die richtige Richtung? Was fehlt mir noch? Wenn ich das Programm ausführe, um zum Beispiel (josh is cool) zu sagen, bekomme ich die Chiffre nicht in der gleichen Zeile. Es sieht so aus, wenn ich das tue main(3)

m
r
v
k
l
v
f
r
r
o

Allerdings wird jeder Buchstabe in eine neue Zeile gesetzt. Wie kann ich es so machen, dass es in einer Zeile steht?

def main(k):

    if k<0 or k>231:
        print "complaint"
        raise SystemExit

    Input = raw_input("Please enter Plaintext to Cipher")

    for x in range(len(Input)):
        letter=Input[x]
        if letter.islower():
            x=ord(letter)
            x=x+k
            if x>122:
                x=x-122+97
            print chr(x),
        if letter.isupper():
            x=ord(letter)
            x=x+k
            if x>90:
                x=x-90+65
            print chr(x),

0voto

dorvak Punkte 8273

Eine sehr einfache, 3-schichtige Lösung ohne Umlaute und ähnliches wäre:

def caesar(inputstring):
    shifted=string.lowercase[3:]+string.lowercase[:3]
    return "".join(shifted[string.lowercase.index(letter)] for letter in inputstring)

und umgekehrt:

def brutus(inputstring):
    shifted=string.lowercase[-3:]+string.lowercase[:-3]
    return "".join(shifted[string.lowercase.index(letter)] for letter in inputstring)

es zu benutzen:

caesar("xerxes")

0voto

user2997187 Punkte 1

Für Python 3.3 sollten Sie die Funktionen ord(), chr() und .isalpha verwenden:

m = input("What is your message?: ")
s = int(input("What is the shift?: "))
for i in m:
    if i.isalpha():
        if (ord(i)+s)>90:
            print(chr(ord(i)+s-26),end=""),
        elif chr(ord(i)+s-26)<65:
            print("The shift is invalid")
        else:
            print(chr(ord(i)+s),end=""),
    else:
        pass

0voto

thekindlyone Punkte 499

Hier ist ein Einzeiler.

>>> brutus=lambda message,cipher,direction:''.join([chr((ord(letter)+(cipher*direction))%256) for letter in message])
>>> encrypted= brutus('Message to be encrypted',14,1) #direction=1 for encryption
>>> encrypted
'[s\x81\x81ous.\x82}.ps.s|q\x80\x87~\x82sr'
>>> brutus(encrypted,14,-1) # direction=-1 for decryption
'Message to be encrypted'
>>>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X