-1

我用 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

在 encode 函数中有 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 函数应该缩进。我错过了复制)

问题是输入太长(他输入的句子太长)。但是,另一个问题仍然存在:在encode函数中,我写道:如果字母是单引号,则不应该对其进行编码,但实际上,单引号已被编码

4

2 回答 2

1

您可以尝试使用 re.escape:

import re
re.escape(n)

但是,我无法重现您的问题。如果错误来自编码函数,请在使用它之前尝试确保 n 是一个 int。

于 2013-08-07T01:50:11.097 回答
0

在您的 encode() 函数中,if 语句的最后一部分检查 ord(letter) == ("'"),它永远不会变为 True,因为ord()返回一个整数。

它应该是 ord(letter) == ord ("'")

或者简单地检查 letter == "'" (不调用 ord)

于 2013-08-07T05:08:44.137 回答