-1

ユーザーに文字列を入力してからエンコードまたはデコードするように求めるスクリプトをPythonで作成しました。ただし、ユーザーの 1 人がシングル クォーテーション ( 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関数はインデントする必要があります。コピーを逃しました)

問題は、入力が長すぎることでした (彼は長すぎる文章を入力しました)。しかし、他の問題が残っていました: エンコード関数で、私は書きました: 文字がシングル クォーテーションである場合、それはエンコードされるべきではありませんが、実際にはシングル クォーテーションがエンコードされました。

4

2 に答える 2

0

encode() 関数では、if ステートメントの最後の部分で ord(letter) == ("'") をチェックしますが、ord()が整数を返すため、これは True にはなりません。

ord(文字) == ord ("'")である必要があります

または単に文字 == "'" をチェックします (ord を呼び出さずに)

于 2013-08-07T05:08:44.137 に答える