2015年9月20日 星期日

[程式/Python] 凱撒密碼 加密器 Caesar Cipher

凱撒密碼是移位密碼的一種,將英文字的各字母順移指定次數,例如ABE各順移兩次的話就會變成CDG。

以下是Python的code,這次沒有註解,因為寫的時候有點想睡,想寫快點,而且函數名稱都很明顯了,有看不懂再問吧:

 
def checkint(c):
    while True:
        try:
            c = int(c)
            return c
        except:    
            print ("Invaild value!")
            c = input("Enter shift value again:")

def checkempty(s):
    while s=="":
        print ("No sentence.")
        s = input("Enter sentence to encrypt again:")
    return s

def shiftletter(word, c):
    new_word = []
    for letter in word:
        temp=ord(letter)
        if temp in range(65, 91):
            temp+=c
            temp = (temp-65)%26+65
        elif temp in range(97, 123):
            temp+=c
            temp = (temp-97)%26+97
        new_word.append(chr(temp))
    return "".join(new_word)

def encode(Input, c):
    word_list = Input.split()
    new_word_list = []
    for word in word_list:
        new_word_list.append(shiftletter(word, c))
    return " ".join(new_word_list)

#My "Restart" option
def exit(ans):
    while True:
        ans = str(ans).lower()    
        if ans == "y":
            print ("See You!")
            input ("Press enter to continue")
            raise SystemExit()
        elif ans == "n":
            return "n"
        else:
            print ()
            print ("Invalid Input")
            ans = input("Exit? (y/n)")
#End of "Restart"

def main():
    Input = checkempty(input("Enter sentence to encrypt:"))
    c = checkint(input("Enter shift value:"))

    #for test
    #Input = "Mayday! Mayday!"
    #c = input("Enter shift value:")
    #end for test
    
    print ("The encoded phrase is:", encode(Input, c))


print ("Welcome to Caesar cipher!")
print ()
re = "n"
while re=="n":
    main()
    print ()
    re = exit(input("Exit? (y/n)"))
    print ()
    print ()



效果:


首先顯示歡迎字句,然後問要加密的句子,如果沒有輸入句子就會要你重新輸入。然後到輸入順移次數,如果輸入非整數就會顯示輸入無效,直至輸入為整數。之後就會輸出加密後的句子,數字和符號不會改變。最後問你是否離開,答y就會結束,答n的話就會再來一次。

沒有留言 :

張貼留言