簡體   English   中英

我可以使用python編寫一個忽略特殊字符(例如逗號,空格,感嘆號等)的代碼嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM