【问题标题】:Palindrome in Python operating on strings onlyPython中的回文仅对字符串进行操作
【发布时间】:2021-01-13 17:21:24
【问题描述】:

我正在尝试用 Python 编写一个程序,该程序将检测用户给出的单词是否为回文。

这是我的代码 - 我只对字符串进行操作 - 我的解决方案与我在这里或任何地方看到的其他解决方案完全不同,因此我希望您 - StactOverFlow 用户 ;) - 检查它的正确性。

我不必说我不是专业人士,拥有相当基本的知识。 但是,如果有人花时间给我一些反馈,我会很高兴。

# a palindrome
string = input('word: ')
if(len(string) % 2 != 0):
  left = string.lower()[0:int((len(string)-1)/2)]
  right = string.lower()[int((len(string)-1)/2 + 1): ]
  if left == right[::-1]:
    print('{} is a palindrome'.format(string.lower()))
  else:
    print('{} is not a palindrome'.format(string))
else:
  left = string.lower()[0:int((len(string)/2))]
  right = string.lower()[int(len(string)/2):]
  if left == right[::-1]:
    print('{} is a palindrome'.format(string.lower()))
  else:
    print('{} is not a palindrome'.format(string.lower()))

【问题讨论】:

  • 您是在问这段代码是否有效?如果是这样的话,我相信你可以自己编译它。否则,您可能正在寻找代码审查,这可能更适合 codereview.stackexchange.com
  • 好的,我写了这段代码,所以它没有语法错误,它在这个意义上是有效的。问题是:这背后的逻辑是否正确。
  • 它比它需要的复杂得多......
  • 您的意思是这是一个正确的解决方案,即。 e.想法本身?我想它可以用更简单的方式完成,但即使这个更复杂,它也是正确的,对吧?

标签: python string palindrome


【解决方案1】:

要检测回文,只需检查反向字符串是否等于原始字符串

palindromes_test = ['ABCDCBA','EVE','ABCABC']

print ([v for v in palindromes_test if (v == (v[::-1]))])

输出

 ['ABCDCBA', 'EVE']

【讨论】:

  • 嘿伙计们,感谢您的关注;)没有人明确写过这是正确的,但是使用这三个“测试字符串”给我的结果与第一个答案相同。我知道这太复杂了——多亏了你 ;) 然而,一开始,当代码工作时,它是很棒的。所以,再次感谢大家,我会接受这两个答案作为有用的。
【解决方案2】:

这里有一个打印回文的单行:

print ([v for v in palindromes_test if (len(v) % 2 == 0 and v[0:len(v)//2] == v[len(v)//2:][::-1]) or (len(v) % 2 != 0 and v[0:len(v)//2] == v[len(v)//2+1:][::-1])])

否则:

palindromes_test = ['ABCDCBA','EVE','ABCABC']

for elem in palindromes_test:
    if len(elem) % 2 == 0 and elem[0:len(elem)//2] == elem[len(elem)//2:][::-1]:
        print ("%s palindrome" % elem)
    elif len(elem) % 2 != 0 and elem[0:len(elem)//2] == elem[len(elem)//2+1:][::-1]:
        print ("%s palindrome" % elem)
    else:
        print ("%s not palindrome" % elem)

输出:

ABCDCBA palindrome
EVE palindrome
ABCABC not palindrome
    

【讨论】:

  • 谢谢,只用一行写出整个解决方案真是太棒了;)对于您的“测试字符串”,我的解决方案与您的一样,我想这表明我的复杂代码是正确的。跨度>
  • 啊哈哈总是最好从编写多行代码开始。这就是你理解底层逻辑的方式。我的回答有帮助,您仍然可以验证它;)(答案左上角的灰色勾号)
  • 我认为过于复杂 :)
  • 哈哈,这很有趣。您是否在答案中复制了我的代码?至少你对示例序列做了啊哈哈。
  • 好榜样!不好的答案哈哈
猜你喜欢
  • 1970-01-01
  • 2015-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-05
  • 2013-05-12
相关资源
最近更新 更多