如果单词是回文则打印 0,否则打印 -1(无条件和循环)

print 0 if the word is palindrome and -1 if it is not(without conditions and loops)

我需要检查字符串是否为回文(没有条件和循环),如果字符串是回文则打印“0”,如果不是回文则打印“-1”。

我不确定在 string[::-1] 反转字符串后要做什么。 如何在没有任何循环或条件的情况下比较两个字符串以检查回文?

(PS。我不应该使用任何循环或条件(包括 if、else))

只是比较不需要任何循环或条件:

string == string[::-1]

这将 return TrueFalse

现在要了解如何将其设置为 0-1,这里有一些提示:

  • 您可以将 bool 转换为 intTrue → 0,False → 1
  • 负零为零

我确实想出了一个完整的解决方案,但由于这看起来像是家庭作业,我不想只它给你。我希望这些提示能鼓励您自己解决问题。


对于它的价值,如果你被允许使用条件,我会推荐一个三元 if 语句:

-1 if string == string[::-1] else 0

希望这对您有所帮助:

print(str_a == str_a[::-1] and '0' or '-1')

既然你要求解释,我正在为你写一个答案。

但请注意,除了非常特殊的情况(例如高尔夫代码),我强烈不鼓励这种做法。

如果你不想使用 if else,你可以简单地 "trick it",使用 True 隐式转换为 1False0 在某些情况下。

您可以通过两种方式使用它:

解决方案 1

访问数组中的元素将 bool 转换为 int,让我们在正确的索引处构造一个具有正确元素的数组:

[-1,0][string==string[::-1]]

如果 string==string[::-1] 的计算结果为 True(这是回文),则将访问数组的第二个元素。否则,第一个。

解决方案 2

另一个解决方案是找到一个 "function" 将 1 转换为 0,并将 0 转换为 -1。最简单的是 f(x) = x - 1

这导致:

(string == string[::-1]) - 1

请记住,我的评论与其说是一个真正的解决方案,不如说是一个玩笑,您可能不应该在现实世界中使用它!

PS:"no conditions",我怀疑它的意思是 "without comparing letters one by one",但我确实认为

if string == string[::-1]:
    print(0)
else:
    print(-1)

完全可以接受。