Python回文程序没有字符串函数

时间:2014-12-27 10:00:27

标签: python string palindrome

我是Python的初学者。我在不使用字符串函数的情况下编写了回文程序。

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

问题2:在第二个程序中,如果我在if语句中跳过i += 1,它应该给我正确的结果,因为for循环会自动增加{{1}的值}}。相反,它只有在我包含该声明或其他情况下才能给出正确的输出。可能是什么原因?

逻辑1:

i

逻辑2:

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")

提前致谢..

9 个答案:

答案 0 :(得分: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")

答案 1 :(得分:1)

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

这是一个快速测试单词是否是palindrom。如您所见,简单。您可以仅通过字母检查输入。它只是向你提出想法的一点。

  

有点安全&#39;对于程序:

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.")

所以只有字母字符才能处理。没有数字,符号等。

答案 2 :(得分:0)

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

所以让我们拿aboba(指数:0,1,2,3,4)

字符不等于其镜像的第一个索引是2(字符'o')(我们从零开始) 是2 <(5/2)+1还是2 <2 + 1 2 <3? 是的,那么你的逻辑说它不是回文,尽管它显然是。

测试一个语句的真实性然后输出“不是”也很混乱..这是一个新的程序员不应该进入的习惯而且我打赌这是为什么你自己找到错误的问题的一部分

答案 3 :(得分: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")

答案 4 :(得分:0)

这是另一种方式。

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

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

答案 5 :(得分:0)

1)逻辑很好 - 问题是最后的if语句。 range(0, int(length/2 + 1))包含0length/2的所有数字 - 这就是检查if i < int(length/2 + 1)总是返回True的原因。< / p>

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")

答案 6 :(得分:0)

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

答案 7 :(得分: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"

答案 8 :(得分: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"])