我需要帮助保持空间。我有caesar密码功能, 但是我希望它能够保留空间并且无法弄清楚如何做到这一点。
sentence = raw_input("Please enter a sentence : ").lower()
newString = ''
validLetters = "abcdefghijklmnopqrstuvwxyz"
space = [ ]
for char in sentence:
if char in validLetters or char in space:
newString += char
shift = input("Please enter your shift : ")
resulta = []
for ch in newString:
x = ord(ch)
x = x + shift
resulta.append(chr(x if 97 <= x <= 122 else 96 + x % 122))
print sentence
print("")
print("Your encryption is :")
print("")
print ''.join(resulta)
它输出正确的代码但删除了空格。如何保留加密空间?
答案 0 :(得分:6)
>>> key = string.ascii_lowercase
>>> rotation = 13
>>> tab = string.maketrans(key,key[rotation:]+key[:rotation])
>>> "hello world".translate(tab)
'uryyb jbeyq'
答案 1 :(得分:1)
如果您不想加密空格,这对我有用:
sentence = raw_input("Please enter a sentence : ").lower()
newString = ''
validLetters = "abcdefghijklmnopqrstuvwxyz " #adding whitespace to valid chars...
space = []
for char in sentence:
if char in validLetters or char in space:
newString += char
shift = input("Please enter your shift : ")
resulta = []
for ch in newString:
x = ord(ch)
x = x+shift
# special case for whitespace...
resulta.append(chr(x if 97 <= x <= 122 else 96+x%122) if ch != ' ' else ch)
print sentence
print("")
print("Your encryption is :")
print("")
print ''.join(resulta)
有点短,但仍然是你的方式:
sentence = raw_input("Please enter a sentence : ").lower()
shift = input("Please enter your shift : ")
validLetters = map(chr, range(97, 123))
validLetters.append(' ')
tmp = [ord(ch)+shift for ch in sentence if ch in validLetters]
resulta = [chr(x if 97 <= x <= 122 else 96+x%122) if x != ord(' ')+shift else ' ' for x in tmp]
print sentence
print
print("Your encryption is :")
print
print ''.join(resulta)
答案 2 :(得分:0)
<强>参考书目:强>
儿童片段:“数学课”(由孩子设想) - YouTube http://youtu.be/KdxEAt91D7k
玛丽有一首小羔羊童谣歌词 - YouTube http://youtu.be/CkRdvGmcCBE
玛丽有一只小羊羔 - 维基百科,免费的百科全书http://goo.gl/FNEuyd
注意:也适用于负班次号
注意:如果反向移位,那么我们编码 - 解码消息
注意:也保留空格
small_chars = [chr(item) for item in range(ord('a'), ord('z')+1)]
upper_chars = [item.upper() for item in small_chars]
def encode_chr(chr_item, is_upper_case):
'''
Cipher each chr_item.
'''
# setting orig and end order.
if is_upper_case:
orig_ord = ord('A')
end_ord = ord('Z')
else:
orig_ord = ord('a')
end_ord = ord('z')
# calculating shift
temp_ord = ord(chr_item)+shift
# calculating offset order with modulo.
# char is after end_ord, calculating offset
num_of_chars = 26
offset_ord = (temp_ord - end_ord - 1)%num_of_chars
return chr(orig_ord + offset_ord)
# enable while loop to repeat until status not 'y'
status = 'y'
while status == 'y':
# enter word to cipher.
word = raw_input("Word: ")
# enter char shift
shift = input("Shift: ")
print
# create cipher list variable
cipher = list()
# loop trough each char in word
for chr_item in word:
# encode just letters.
# replace non-alfa with underscore: "_"
if chr_item in upper_chars or chr_item in small_chars:
# set is_uppser_case to True for upper case chars.
is_upper_case = (chr_item in upper_chars) and True
# cipher char.
temp_chr = encode_chr(chr_item, is_upper_case)
# append ciphered char to list
cipher.append(temp_chr)
elif chr_item is ' ':
cipher.append(chr_item)
else:
cipher.append('_')
# print word
print word
# print ciphered word
print ''.join(cipher)
# repeat again for another word?
status = raw_input("Repeat? [y|n]: ")
print
>>>
Word: aAzZ!@
Shift: 1
aAzZ!@
bBaA__
Repeat? [y|n]: y
Word: aAzZ@!
Shift: -1
aAzZ@!
zZyY__
Repeat? [y|n]: y
Word: aAzZ@$
Shift: 27
aAzZ@$
bBaA__
Repeat? [y|n]: y
Word: aAzZ%^
Shift: -27
aAzZ%^
zZyY__
Repeat? [y|n]: n
>>>
注意:如果反向移位,那么我们编码 - 解码消息
>>>
Word: "Mary Had a Little Lamb"
Shift: 1
"Mary Had a Little Lamb"
_Nbsz Ibe b Mjuumf Mbnc_
Repeat? [y|n]: y
Word: _Nbsz Ibe b Mjuumf Mbnc_
Shift: -1
_Nbsz Ibe b Mjuumf Mbnc_
_Mary Had a Little Lamb_
Repeat? [y|n]: n
>>>