我用python编写了一个脚本,它提示用户输入一个字符串,然后对其进行编码或解码。 但是,其中一个用户输入了单引号(this - >'),因此脚本停止了。 我怎么解决这个问题。 我想接受单引号作为输入。 脚本如下所示:
while True:
input = raw_input('Enter a word or sentence')
if input == 'done':break
n = raw_input('Enter an encode number')
print encode(input,n) #this function encodes the input by n and returns encoded words
编码功能中有ord和chr功能。
这是编码功能
def encode(word,n):
"""
word: strings you wanna encode or decode
n: a number you wanna encode or decode by
"""
code = 0
rotate = ''
for letter in word:
if ord(letter) == ord(',') or ord(letter)== ord('.') or ord(letter) == ord(' ') or ord(letter) == ord('?') or ord(letter) == ("'"):
rotate += letter
continue
rotate += rotate_num(letter,n,letter.islower())
return rotate
def rotate_num(letter,n,lower):
"""
n: a number you wanna encode or decode by
lower:Assign True if the letter is lowercase, otherwiser False
"""
if lower:
a = 'a'
z = 'z'
else:
a = 'A'
z = 'Z'
code = ord(letter)+n
if code > ord(z):
code = code - 1 - ord(z)+ ord(a)
if code < ord(a):
code = ord(z) - ( ord(a)-code-1)
return chr(code)
(rotate_num函数应该缩进。我错过了复制)
问题是输入太长(他输入太长的句子)。但是,还存在其他问题: 在编码函数中,我写道:如果这封信是单引号, 它不应该被编码, 但实际上,单引号是编码的
答案 0 :(得分:1)
您可以尝试使用re.escape:
import re
re.escape(n)
但是,我无法重现您的问题。如果错误来自编码函数,请在使用它之前尝试确保n是一个int。
答案 1 :(得分:0)
在你的encode()函数中,if语句的最后一部分检查 ord(letter)==(“'”),自ord()返回整数后永远不会变为True。
它应该是ord(字母)== ord (“'”)
或只是检查字母==“'”(不调用ord)