![](/img/trans.png)
[英]How can i fix my code to ignore the spaces when recognizing special characters in a string?
[英]Can I make a code in python that ignores special characters such as commas, spaces, exclamation points, etc?
我想創建一個返回“ true”的代碼(如果我鍵入回文而不考慮大小寫或其中是否包含特殊字符),否則返回“ false”。 到目前為止,我擁有的代碼適用於沒有特殊字符(例如逗號,撇號,空格等)的短語。
def is_palindrome(my_str):
my_str= my_str.casefold()
rev_str= reversed(my_str)
if list(my_str) == list(rev_str):
print("True")
else:
print("False")
當我做:
print (is_palindrome("Rats live on no evil star"))
它返回True,因為它是回文
當我做:
print (is_palindrome("Hello World!"))
它返回False,因為它不是回文
當我做:
print (is_palindrome("Madam, I'm Adam"))
它返回False。 但我想創建一個將其視為回文的代碼
您需要在測試之前進行過濾,然后:
letters = [c.casefold() for c in my_str if c.isalpha()]
將只挑選字母並將其小寫,然后可以測試這些字母形成回文:
return letters == letters[::-1]
這是str.isalpha()
因為str.isalpha()
僅對字母返回True
。
合並到您的函數中:
def is_palindrome(my_str):
letters = [c.casefold() for c in my_str if c.isalpha()]
return letters == letters[::-1]
演示:
>>> def is_palindrome(my_str):
... letters = [c.casefold() for c in my_str if c.isalpha()]
... return letters == letters[::-1]
...
>>> is_palindrome("Rats live on no evil star")
True
>>> is_palindrome("Hello World!")
False
>>> is_palindrome("Madam, I'm Adam")
True
my_str = my_str.casefold()
my_str = ''.join(e for e in my_str if e.isalpha())
這應該使用.isalpha()僅使用字母字符重新創建my_str。 然后對此進行測試。 如果要保留原始字符串的記錄,則剛剛存儲的重新創建的版本是一個臨時字符串。
如果只想排除標點和空格,可以使用str.translate
:
from string import punctuation
d = {k: None for k in punctuation}
d[" "] = None
def is_palindrome(my_str):
trans = str.maketrans(d)
my_str = my_str.translate(trans).casefold()
return my_str == my_str[::-1]
您的字符串中可能只包含字母數字字符;
re.sub(r'[^a-zA-Z0-9]+', '', your_string).lower()
順便說一句,如果您忽略非ASCII字符,則此方法有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.