May-14-2020, 02:18 AM
Hi
I am starting off in python and as part of my learning I'm attempting to code a simple caeser's cipher.
I have figured out how to get this working if I don't have the get_offset as a function to call, but I would like to know how to do this as the ability to call functions is giving me headaches.
What I'm trying to achive:
1: program a function (get_offset) to input the shift of the caeser ciper, to be called once entering the string to encrypt/decrypt as per menu options 1 and 2.
2: have this function loop back to the shift int(input) whenever a number that isn't a digit is entered, or a digit is entered that is not between 1 and 94. I currently only have if statements there and those are not working also
3: additional question, I'm struggling to understand if in this case I should have my function as get_offset(shift): or get_offset(): and why either should be the case.
TIA
I am starting off in python and as part of my learning I'm attempting to code a simple caeser's cipher.
I have figured out how to get this working if I don't have the get_offset as a function to call, but I would like to know how to do this as the ability to call functions is giving me headaches.
What I'm trying to achive:
1: program a function (get_offset) to input the shift of the caeser ciper, to be called once entering the string to encrypt/decrypt as per menu options 1 and 2.
2: have this function loop back to the shift int(input) whenever a number that isn't a digit is entered, or a digit is entered that is not between 1 and 94. I currently only have if statements there and those are not working also
1 |
shift = int ( input ( 'Please enter offset value (1 to 94): ' )) |
TIA
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
def menuChoice(): print ('') print ( 'Menu' ) print ('') print ( '1. Encrypt string' ) print ( '2. Decrypt string' ) print ( '3. Brute force decryption' ) print ( '4. Quit' ) print ('') choice = input ( 'What would you like to do (1,2,3,4)? ' ) while choice ! = '1' and choice ! = '2' and choice ! = '3' and choice ! = '4' : print ( 'Invalid choice, please enter either 1, 2, 3 or 4.' ) choice = input ( '\nWhat would you like to do (1,2,3,4)? ' ) return choice def get_offset(): shift = int ( input ( 'Please enter offset value (1 to 94): ' )) if shift.isdigit = = 0 : shift = int ( input ( 'Please enter offset value (1 to 94): ' )) elif shift < 0 or shift > 95 : shift = int ( input ( 'Please enter offset value (1 to 94): ' )) else : return shift choice = menuChoice() if choice = = '1' : encrypt = input ( 'Please enter string to encrypt: ' ) shift = get_offset() cipher = '' for i in encrypt: cipher + = chr (( ord (i) - 32 + shift) % 95 + 32 ) print ( '\nEncrypted string:' ) print (cipher) elif choice = = '2' : decrypt = input ( 'Please enter string to decrypt: ' ) shift = get_offset() cipher = '' for i in decrypt: cipher + = chr (( ord (i) - 32 - shift) % 95 + 32 ) print ( '\nDecrypted string:' ) print (cipher) elif choice = = '3' : decrypt = input ( 'Please enter string to decrypt: ' ) brute_shift = 1 cipher = '' for index in range ( 94 ): for i in decrypt: cipher + = chr (( ord (i) - 32 - brute_shift) % 95 + 32 ) print ( 'Offset: ' , brute_shift, '= Decrytped string: ' , cipher) brute_shift + = 1 cipher = '' |
Output:Menu
1. Encrypt string
2. Decrypt string
3. Brute force decryption
4. Quit
What would you like to do (1,2,3,4)? 1
Please enter string to encrypt: one more time
Please enter offset value (1 to 94): 3[output]
Error:Traceback (most recent call last):
File "C:/Users/Angelica/Documents/caesercipher.py", line 44, in <module>
shift = get_offset()
File "C:/Users/Angelica/Documents/caesercipher.py", line 31, in get_offset
if shift.isdigit == 0:
AttributeError: 'int' object has no attribute 'isdigit'