2016-02-14 56 views
-1

我目前正在寫一個程序,爲學校,爲加密和解密輸入的消息。我的代碼目前有效,但並不完整。我無法嘗試允許它從2-26的值中輸入偏移量,並且我無法重複該問題,然後繼續執行代碼,直到獲得正確的值。現在它只是在輸入錯誤的數字時說無效的消息,但仍然繼續執行代碼。此外,我需要加密或解密的消息只在字母表中沒有其他符號或密鑰。任何人都可以幫忙嗎?這是我目前的代碼。 計算 - Python的GCSE

result = '' 

message = '' 

choice = '' 

offset=int(input("Enter an offset: ")) 

if offset >25 or offset <0: 

    print("Invalid offset, please enter another offset: ") 
else: 

    print("Okay") 


while choice != '3': 


    choice = input("\nDo you want to encrypt or decrypt the message?\nEnter 1 to Encrypt, 2 to Decrypt, 3 to Exit Program: ") 

    if choice == '1': 
     message = input("\nEnter the message to encrypt: ") 

    for i in range(0, len(message)): 
     result = result + chr(ord(message[i]) - offset) 

    print (result + '\n\n') 
    result = '' 

    elif choice == '2': 
     message = input("\nEnter the message to decrypt: ") 

     for i in range(0, len(message)): 
      result = result + chr(ord(message[i]) + offset) 

    print (result + '\n\n') 
    result = '' 

    elif choice != '3': 
     print ("You have entered an invalid choice. Please try again.\n\n") 
+0

縮進*時*是不正確的。請更正您的帖子,否則難以遵循。 – cdarke

+0

嘿,讓我對你多麼希望程序循環有點困惑,因爲我已經跑了(固定你的縮進一點點,雖然第一),如果沒有輸入無效數它要求再喜歡我猜你'想要發生。 –

+0

@GenericSnake它會問它再次輸入,但不會讓你嘗試將繼續與該程序,而不是實際再次輸入 –

回答

0

好了,我還沒有得到解決的只能是字母的問題你的交換,因爲我不想做你所有的功課(提示:你將不得不迫使你chr(number)是插圖中字母值)。但我已經得到了一切爲你循環。

def find_offset(): 
    offset = int(input("Enter an offset: ")) 
    if offset > 25 or offset < 0: 
     print("Invalid offset, please enter another offset: ") 
     find_offset() 
    else: 
     print("Okay") 
     encrypt_fun(offset) 


def encrypt_fun(offset): 
    choice = '' 
    while choice != '3': 
     choice = input("\nDo you want to encrypt or decrypt the message?\nEnter 1 to Encrypt, 2 to Decrypt, 3 to Exit Program: ") 
     if choice == '1': 
      message = input("\nEnter the message to encrypt: ") 

      for i in range(0, len(message)): 
       result = chr(ord(message[i]) - offset) 
       print(result, end=''), 

     elif choice == '2': 
      message = input("\nEnter the message to decrypt: ") 

      for i in range(0, len(message)): 
       result = chr(ord(message[i]) + offset) 
       print(result, end=''), 

     elif choice != '3': 
      print("You have entered an invalid choice. Please try again.\n\n") 

find_offset() 

所以你現在有兩個功能,而不是一個單一的腳本。注意結果,選擇變量等已被刪除 - 它們現在都在函數內聲明,所以你不再需要它們了!第一個函數找到你的偏移量(並在最後調用,啓動程序),如果它在正確的範圍內,它傳遞偏移量encrypt_fun函數的值,如果不是則它再次運行find_offset。我試圖讓你的while循環和以前一樣 - 但它已經被簡化了一些。請注意您的result = ''申明已被刪除。好吧,因爲它是一個循環,無論如何它都會被重置,所以沒有必要。

希望這有助於你出去了一下。祝您的GCSE好運。 的鏈接,幫助您用密碼:https://inventwithpython.com/chapter14.html

+0

喔你使用了一個子程序,謝謝你,我必須做ASCIICODE -96嗎? –

+0

你有正確的想法 - 它會帶我一點去解決它自己,但你必須確保該值> = 97 <= 122(假定只是非大寫字母就可以了)。你也可能需要改變你的解密。不幸的是,就像我希望的那樣,只是將偏移量加回去就行不通。 –

+0

我不知道該怎麼辦 –