创建一个程序palindrome.py,该程序的函数接受一个字符串参数,并打印一个句子,指示文本是否为回文。函数应该只考虑字符串中的字母数字字符,而不依赖大写、标点符号或空格。如果字符串是回文,它应该打印:它是回文!但是,如果字符串不是回文,它应该打印:它不是回文!
问题
当字符串中有空格时,我的代码不是打印回文,而是打印它不是回文,尽管有空格。我在代码中包括了replace()、zip()和reversed(),以说明空格和相反的单词,但它没有打印所需的结果。
,我在代码中遗漏了什么或者做错了什么?
import sys
def palindrome(words):
if ' ' in words:
palindromes = words[::-1]
if palindromes == words:
return "It's a palindrome!"
return "It's not a palindrome!"
print(palindrome(sys.argv[1]))示例测试用例
测试用例1
tests 1 Run python3 palindrome.py 'Dennis, Nell, Edna, Leon, Nedra, Anita, Rolf, Nora, Alice, Carol, Leo, Jane, Reed, Dena, Dale, Basil, Rae, Penny, Lana, Dave, Denny, Lena, Ida, Bernadette, Ben, Ray, Lila, Nina, Jo, Ira, Mara, Sara, Mario, Jan, Ina, Lily, Arne, Bette, Dan, Reba, Diane, Lynn, Ed, Eva, Dana, Lynne, Pearl, Isabel, Ada, Ned, Dee, Rena, Joel, Lora, Cecil, Aaron, Flora, Tina, Arden, Noel, and Ellen sinned' and match its output to an expected value.测试用例2
test 2 Run python3 palindrome.py 'Ed, I saw Harpo Marx ram Oprah W. aside' and match its output to an expected value.输出
预期输出:“这是回文!”
实际输出:“这不是回文!”
发布于 2022-03-17 12:21:07
整个代码在第一个if条件下缩进,这意味着只有当条目字符串中有空格时,它才能工作。
最重要的是,你在添加你的论点时会使用引号还是双引号?因为使用sys.argv[1]需要第一个参数。
python3 palindrome.py hey yeh # does not work
python3 palindrome.py "hey yeh" # is supposed to work使用您的代码示例的问题是,在每个非字母字符中,您只是试图处理空格。
def palindrome(words):
words = ''.join(filter(str.isalnum, words.lower()))
palindrome = words[::-1]
if palindrome == words:
return ("It's a palindrome!")
return ("It's not a palindrome!")
print(palindrome(sys.argv[1]))发布于 2022-03-17 12:48:21
请记住,替换将替换给定模式的所有事件。没有必要去检查单词中是否有空格,只要无条件地做就行了。
更好的是,使用正则表达式来消除空格和标点符号。
import re
def palindrome(s):
s = re.sub('[^\w]', '', s.lower())
return "It's a palindrome" if s == s[::-1] else "It's not a palindrome"如果您不想导入re,那么:
def palindrome(s):
s = ''.join(c for c in s.lower() if c.isalnum())
return "It's {}a palindrome".format('' if s == s[::-1] else 'not ')如果你喜欢一条条线的话,...and:
def palindrome(s):
return "It's {}a palindrome".format('' if (s := ''.join(c for c in s.lower() if c.isalnum())) == s[::-1] else 'not ')发布于 2022-03-17 12:48:22
我不知道你的代码会达到什么目的。但是我可以看到你试着检查word是否有一个长度,因为那将自动是回文。该代码应该在外部循环。它可能在你的功能开始的时候。在for循环中,您应该做的是比较单词和回文中的字符。但即便如此,如果单词中包含标点符号,也会失败,因为在这个问题上没有考虑到这些标点符号。我建议您删除所有空格和标点符号,并确保所有字符都是小写或大写(以便您的函数可以被大写盲)。然后,您可以比较单词和回文中的字符,在这些字符中,一旦找到不等字符,就返回False;如果没有找到不等字符,则返回True。
然而,我发现这个过程很长时间,所以下面是我做的一个更简单的解决方案(它完全解决了问题):
def palindrome(words):
new_word = ""
'''
Collect alpha numeric characters into new_word
Spaces are removed and all characters are changed to lower case
so that capitalisation can be ignored
'''
for char in words.replace(" ", "").lower():
if char.isalnum():
new_word += char
# Check if word is a palindrome
if list(new_word) == list(reversed(new_word)):
print("It's a palindrome!")
else:
print("It's not a palindrome")测试:
palindrome('Dennis, Nell, Edna, Leon, Nedra, Anita, Rolf, Nora, Alice, Carol, Leo, Jane, Reed, Dena, Dale, Basil, Rae, Penny, Lana, Dave, Denny, Lena, Ida, Bernadette, Ben, Ray, Lila, Nina, Jo, Ira, Mara, Sara, Mario, Jan, Ina, Lily, Arne, Bette, Dan, Reba, Diane, Lynn, Ed, Eva, Dana, Lynne, Pearl, Isabel, Ada, Ned, Dee, Rena, Joel, Lora, Cecil, Aaron, Flora, Tina, Arden, Noel, and Ellen sinned')
Output: It's a palindrome!https://stackoverflow.com/questions/71512070
复制相似问题