A byte of Python《輸入與輸出》一節中有一個處理回文的小例子(io_input.py)。作者留了個思考題。
如何將標點去掉、忽略大小寫后,再考慮是否回文?
可以學習re模塊、學習str的方法來處理。
方法1:使用re正則表達式將特殊字符處理為空字符串。
import re def reverse(text): return text[::-1] def is_palindrome(text): return text == reverse(text) something = input("Enter text: ") something = re.sub(r'[,. -!?:]', '', something) something = something.lower() print (something) if is_palindrome(something): print("Yes, it is a palindrome") else: print("No, it is not a palindrome")
方法2:使用循環判斷每個字符是否在特殊字符串里面,然后將特殊字符替換為空格。
最后使用join和split將空格替換掉。
def reverse(text): return text[::-1] def is_palindrome(text): return text == reverse(text) something = input("Enter text: ") specialstr = (",",".","-","!","?",":") prostr = list(something) for i in range(len(something)): if something[i] in specialstr: prostr[i]= " "
#將列表變為字符串 something = "".join(prostr)
#將字符串以空格為分隔符,變為列表,再變為不包含空格的字符串
something = "".join(something.split(" "))
#變為小寫字符串
something = something.lower()
#打印字符串,確認是否轉換好
print (something) if is_palindrome(something): print("Yes, it is a palindrome") else: print("No, it is not a palindrome")
RE模塊參考文檔:
http://www.cnblogs.com/sevenyuan/archive/2010/12/06/1898075.html