【问题标题】:palindrome , can't return False for no string回文,不能为没有字符串返回 False
【发布时间】:2015-07-28 15:22:31
【问题描述】:

回文是一个单词、短语、数字或其他单位序列,可以在任一方向以相同的方式阅读。编写一个函数来确定给定的单词或数字是否是回文。

示例

>>> isPalindrome("")
False
>>> isPalindrome("Racecar")
True
>>> isPalindrome(121)
True
>>> isPalindrome("Never")
False
>>> isPalindrome("level")
True

我的代码

def isPalindrome(word):
        word = str(word)
        if word == ''.join(reversed(word)) :
            return True
        elif len(word)<1 or word[0] == '':
            return False
        else: 
            return False
    print isPalindrome('')
    print isPalindrome('abba')
    print isPalindrome('level')
    print isPalindrome(12321)

返回的代码是什么。

True
True
True
True

因为它应该为 >>> isPalindrome("") 返回 false,但它返回 True,所以我应该如何更改我的代码以使其正确。在其他条件下代码工作正常。

【问题讨论】:

  • 首先你需要检查if len(word)&lt;1 or word[0] == '':这个条件。

标签: python python-2.7


【解决方案1】:
def isPalindrome(word):
    word = str(word)
    if word and word == ''.join(reversed(word)):
        return True
    else:
        return False

仅当word 为真且word == ''.join(reversed(word)) 为真时才返回True。字符串只有在非空时才为真。这样就无需测试len(word)&lt;1

顺便说一句,测试word[0] == '' 可能不会像您预期的那样:如果word 为空,那么word[0] 将抛出IndexError

还是更简单

根据 BrianO 的建议:

def isPalindrome(word):
    word = str(word)
    return bool(word) and word == word[::-1]

【讨论】:

  • word=str(word) 实际上是需要的,因为他也检查整数数据
  • @VigneshKalai 眼睛好。是的,你是对的:最后一个例子没有引号。
  • 虽然答案很棒:D
  • 更简单:def isPalindrome(word): word = str(word); return word and word == word[::-1] 实际上,我不同意为空字符串返回False,因为它也是回文,但我想这就是作业所需要的;)
  • @BrianO 非常好。我必须做一个小调整:我用return bool(word) and word == word[::-1] 替换了return word and word == word[::-1],以便isPalindrome('') 返回False 而不是''
【解决方案2】:

您必须首先检查单词本身是否为空:

def isPalindrome(word):
        word = str(word)
        if len(word)<1 or word[0] == '':
            return False
        if word == ''.join(reversed(word)) :
            return True


        return False

print isPalindrome('')
print isPalindrome('abba')
print isPalindrome('level')
print isPalindrome(12321)
print isPalindrome(1231)

输出:

False
True
True
True
False

这是因为如果给定的单词是空字符串,你的第一个 if 情况将是真的

即)

word= ''    
word == ''.join(reversed(word))         
True

【讨论】:

    【解决方案3】:

    您的第一个 if 语句导致空字符串返回 true 并退出函数。

    你需要切换你的 if 和 else if 语句。

    【讨论】:

      猜你喜欢
      • 2011-12-04
      • 2020-05-23
      • 2017-12-14
      • 2020-09-15
      • 2021-08-23
      • 1970-01-01
      • 2019-11-04
      • 1970-01-01
      • 2010-11-10
      相关资源
      最近更新 更多