不带字符串函数的Python回文程序

问题描述 投票:0回答:10

我是Python初学者。我已经编写了不使用字符串函数的回文程序。

问题1:为什么第一个逻辑没有给我想要的输出?如果我错了请纠正我。

问题2:在第二个程序中,如果我在if语句中跳过

i += 1
,它应该给我正确的结果,因为
for
循环会自动增加
i
的值。相反,只有当我包含该语句或不包含该语句时,它才会给我正确的输出。这可能是什么原因?

逻辑1:

n = input("eNTER  STRING\n")
length = int(len(n))
n = str(n)

for i in range(0, int(length/2+1)):
   if n[i] != n[-i - 1]:
      break

if i < int(length/2 + 1):
   print("not")
else:
   print("yes")

逻辑2:

n = input("ENTER  STRING\n")
length = int(len(n))

for i in range(0, int(length/2 + 1)):
   if n[i] == n[-i - 1]:
      i += 1
   else:
      break

if i < (length / 2):
   print("not")
else:
   print("yes")

提前致谢..

python string palindrome
10个回答
3
投票

第一个逻辑的解决方案是:

n = raw_input("eNTER  STRING\n")           
length = len(n)           
for i in range(0, (length/2)+1):
    if n[i] != n[-i - 1]:           
        break           

if i < int(length/2):  #Not length/2 + 1, as index starts at 0 and not 1. 
   print("not")
else:
   print("yes")

在第二个逻辑中,你只需要看看左右两侧是否有任何字符不相同。所以你可以像这样改变你的代码:-

n = raw_input("ENTER  STRING\n")
length = len(n)

for i in range(0, int(length/2 + 1)):
    if n[i] is not n[-i - 1]:      #change logic here.
        break

if i < (length / 2):
   print("not")
else:
   print("yes")

2
投票
while True:
    x=input("Enter a string: ")
    if x==x[::-1]:
        print ("It's a palindrom")
    else:
        print ("It's not a palindrom")

这是一个快速测试单词是否回文的方法。如您所见,很简单。您可以仅通过字母来检查其构建的输入。这只是对你提出想法的一个点。

还有一点程序的“安全性”:

while True:
    x=input("Enter a string: ")
    if x.isalpha():#checking input has only strings
        if x==x[::-1]:
            print ("It's a palindrom")
        else:
            print ("It's not a palindrom")
    else:
        print ("We allow only strings.")

因此仅处理字母字符。不处理数字、符号等。


0
投票

在逻辑 1 中,尝试用

if i<int(length/2):
代替
if i<int((length/2+1)):

在逻辑 2 中,即使删除

i+=1
也会给出正确的结果:

if n[i] == n[-i-1]:
    pass
else:
    break

您也可以使用以下代码:

def reverse(text):
    if len(text) <= 1:
        return text
    return reverse(text[1:]) + text[0]

n = input("ENTER  STRING\n")
if n==reverse(n):
    print ("It's a palindrome")
else:
    print ("It's not a palindrome")

0
投票

比较中存在一个错误。在第一段逻辑中,你说,如果字符不等于其“镜像”字符的单词的第一个索引小于 len(word)/2 +1 那么它不是回文。

所以我们以 aboba 为例(索引:0,1,2,3,4)

字符不等于其镜像字符的第一个索引是 2(字符“o”)(我们从零开始) 是 2<(5/2)+1 or 2<2+1 2<3 ? Yes, then your logic says its not a palindrome, even though it clearly is.

测试一个语句的真实性然后输出“not”也是相当令人困惑的。这是新程序员不应该养成的习惯,我敢打赌这就是为什么你自己很难找到错误的部分原因。


0
投票

这是另一种方式。

def PAL(S):
    return S== ''.join(reversed(S))

>>> PAL('ABABA')
True
>>> PAL('ABAA')
False

0
投票

1)逻辑没问题 - 问题是最后的

if
语句。
range(0, int(length/2 + 1))
包含从
0
length/2
的所有数字 - 这就是为什么检查
if i < int(length/2 + 1)
always 返回
True

2) 即使您删除

i += 1
,此方法也有效。


通过删除第二个

if
语句,您可以轻松避免犯这些小错误:

n = input("eNTER  STRING\n")
length = len(n)

for i in range(0, length/2+1):
   if n[i] != n[-i - 1]:
      print("not")
      break
else:
   print("yes")

0
投票
a=raw_input("eNTER  STRING\n")
b=a[::-1]
if b==a:
  print "True"
else:
  print "false" 

0
投票
string=raw_input("Enter the String:")
l=len(string)
flag=0

for i in range(l/2):
    if string[i]!=string[l-i-1]:
        flag=1
        break

if flag==1:
    print "Not Palindrome"
else:
    print "Palindrome"

0
投票

这个问题的一行解决方案是;

print(["String is a palindrome" if s == s[::-1] else "String is NOT a palindrome"])

使用;

s = input("Input something: ")
print(["String is a palindrome" if s == s[::-1] else "String is NOT a palindrome"])

0
投票

另一种解决方案:

def isPalindrome(数据): 返回数据==数据[::-1]

data=input("请输入数字或字符串:") 结果 = isPalindrome(数据)

如果结果: 打印(“是”) 别的: 打印(“否”)

© www.soinside.com 2019 - 2024. All rights reserved.