2013-08-07 74 views
-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 

裏有編碼功能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功能應縮進。我錯過了複製)

的問題是輸入太長(他進入了太長的句子)。然而,其他的問題依然存在: 在編碼功能,我寫道:如果這封信是一個單引號, 它不應該被編碼, 但實際上,單引號進行編碼

+1

的問題是在你的編碼功能,請張貼。 – FakeRainBrigand

+0

你可以發佈編碼功能嗎?據我測試,「輸入」是正確的,是否有單引號。 – shengy

+0

實際上,我很抱歉遲到發佈代碼 – SamuraiT

回答

0

在您的編碼()函數,if語句檢查 ORD(字母)==(「'」),因爲ord()返回一個整數,它永遠不會成爲真正的最後一部分。

應訂...(字母)== ORD( 「 '」)

或者乾脆檢查字母== 「'」(不調用ORD)

+0

,這個(我的)代碼並不聰明。 所以我覺得我應該重寫這樣的: 如果字母」,\?「」」:! 旋轉+ =信 – SamuraiT

+0

這將工作太:) – Christina

+0

它運作良好 謝謝 – SamuraiT

1

你可以嘗試使用re.escape :

import re 
re.escape(n) 

但是,我無法重現您的問題。如果錯誤來自編碼函數,那麼在對它進行處理之前,請確保n是一個整數。

相關問題