我有一个代码来检查一个单词是否是回文:
str = input("Enter the string")
l = len(str)
p = l-1
index = 0
while index < p:
if str[index] == str[p]:
index = index + 1
p = p-1
print("String is a palindrome")
break
else:
print("string is not a palindrome")
如果输入一个单词,例如:转子,我希望程序检查这个单词是否是回文并输出为&#34;给定的单词是回文&#34;。
但我面临的问题是,程序首先检查r和r并打印&#34;给定的单词是回文&#34;然后检查o和o并打印&#34;给定的单词是回文&#34;。它会在检查单词时多次打印结果。
我希望结果只传递一次。如何更改代码?
答案 0 :(得分:4)
只需反转字符串并将其与原始
进行比较即可string_to_check = input("Enter a string")
if string_to_check == string_to_check[::-1]:
print("This is a palindrome")
else:
print("This is not a palindrome")
答案 1 :(得分:2)
我必须在您的代码中进行一些更改,以复制您所看到的输出。
最终,您想要的是仅在所有比较结束时显示消息。在你的情况下,你把它放在循环中,所以每次循环运行并且它达到if
条件时,就会打印状态消息。相反,我更改了它,只有当两个指针index
和p
位于单词的中间时才打印。
str = input("Enter the string: ")
l = len(str)
p = l-1
index = 0
while index < p:
if str[index] == str[p]:
index = index + 1
p = p-1
if index == p or index + 1 == p:
print("String is a palindrome")
else:
print("string is not a palindrome")
break
答案 2 :(得分:1)
我看到互联网上大多数解决方案都是将字符串作为输入,或者只是将字符串取反然后进行测试。下面是一个考虑两点的解决方案: 1)输入是一个非常大的字符串,因此不能仅从用户那里获取。 2)输入的字符串将使用大写字母和特殊字符。 3)我没有研究复杂性,看不到进一步的改进。将邀请建议。
def isPalimdromeStr(self, strInput):
strLen = len(strInput)
endCounter = strLen - 1
startCounter = 0
while True:
# print(startCounter, endCounter)
# print(strInput[startCounter].lower(), strInput[endCounter].lower())
while not blnValidCh(self, strInput[startCounter].lower()):
startCounter = startCounter + 1
while not blnValidCh(self, strInput[endCounter].lower()):
endCounter = endCounter - 1
# print(startCounter, endCounter)
# print(strInput[startCounter].lower() , strInput[endCounter].lower())
if (strInput[startCounter].lower() != strInput[endCounter].lower()):
return False
else:
startCounter = startCounter + 1
endCounter = endCounter - 1
if (startCounter == strLen - 1):
return True
# print("---")
def blnValidCh(self, ch):
if rePattern.match(ch):
return True
return False
global rePattern
rePattern = re.compile('[a-z]')
blnValidPalindrome = classInstance.isPalimdromeStr("Ma##!laYal!! #am")
print("***")
print(blnValidPalindrome)
答案 3 :(得分:0)
[::-1]
此代码是反转字符串的最简单方法。无论你从哪个方面阅读它,回文都是相同的。因此,检查单词/字符串是否递归的最简单函数是:
def checkPalindrome(s):
r = s[::-1]
if s == r:
return True
else:
return False
现在您可以查看此代码。例如:
checkPalindrome("madam")
>>> True
checkPalindrome("sentence")
>>> False
答案 4 :(得分:0)
将您的实现更改为以下一种:
dt[, I := .I] # Add a dummy id if one doesn't already exist
distance_by_I <- melt(dt, id.vars = "I")[, .(distance = sum(reference != value)), keyby = "I"]
dt[distance_by_I, on = "I"]
答案 5 :(得分:0)
最简单的方法是
{{parseFloat(post.meta.price).toFixed(0)}}
同一登录名也可以应用于回文数
答案 6 :(得分:0)
def palindrome(s):
if len(s)<1:
return True
else:
if s[0]==s[-1]:
return palindrome(s[1:-1])
else:
return False
a=str(input("enter data")
if palindrome(a) is True:
print("string is palindrome")
else:
print("string is not palindrome")
答案 7 :(得分:0)
string = 'ASDBDSA'
if string[:]==string[::-1]:
print("palindrome")
else:
print("not palindrome")
答案 8 :(得分:0)
您也可以通过在 python 中使用三元运算符来实现。
string = "Madam"
print("palindrome") if string == string[::-1] else print("not a palindrome")