Skip to content

Instantly share code, notes, and snippets.

@Per48edjes
Created May 12, 2017 15:27
Show Gist options
  • Save Per48edjes/e0e8dea8ee590fc5d999925a54ff62c3 to your computer and use it in GitHub Desktop.
Save Per48edjes/e0e8dea8ee590fc5d999925a54ff62c3 to your computer and use it in GitHub Desktop.
Caesar's Cipher (v.1)
#!/bin/python
import sys
n = int(raw_input().strip())
s = raw_input().strip()
k = int(raw_input().strip())
def shift_n_letters(letter, n):
shift_amount = n % 26
raw_ord = ord(letter) + shift_amount
# ...for no loop-arounds, straightforward cases
if ((ord(letter) >= ord('A') and ord(letter) <= ord('Z')) and (raw_ord >= ord('A') and raw_ord <= ord('Z'))) or ((ord(letter) >= ord('a') and ord(letter) <= ord('z')) and (raw_ord >= ord('a') and raw_ord <= ord('z'))):
return chr(raw_ord)
# Lower-case extended shift
elif (ord(letter) >= ord('a') and ord(letter) <= ord('z')):
loop_amt = shift_amount - (ord('z') - ord(letter))
return chr(ord('a') + loop_amt - 1)
# Upper-case extended shift
elif (ord(letter) >= ord('A') and ord(letter) <= ord('Z')):
loop_amt = shift_amount - (ord('Z') - ord(letter))
return chr(ord('A') + loop_amt - 1)
def rotate(text, n):
output = ''
for letter in text:
if ord(letter) in list(range(ord('a'), ord('z') + 1)) or ord(letter) in list(range(ord('A'), ord('Z') + 1)):
output += shift_n_letters(letter, n)
else:
output += letter
return output
print rotate(s, k)
@Per48edjes
Copy link
Author

Per48edjes commented May 12, 2017

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment