我是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")
提前致谢..
第一个逻辑的解决方案是:
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")
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.")
因此仅处理字母字符。不处理数字、符号等。
在逻辑 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")
比较中存在一个错误。在第一段逻辑中,你说,如果字符不等于其“镜像”字符的单词的第一个索引小于 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”也是相当令人困惑的。这是新程序员不应该养成的习惯,我敢打赌这就是为什么你自己很难找到错误的部分原因。
这是另一种方式。
def PAL(S):
return S== ''.join(reversed(S))
>>> PAL('ABABA')
True
>>> PAL('ABAA')
False
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")
a=raw_input("eNTER STRING\n")
b=a[::-1]
if b==a:
print "True"
else:
print "false"
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"
这个问题的一行解决方案是;
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"])
另一种解决方案:
def isPalindrome(数据): 返回数据==数据[::-1]
data=input("请输入数字或字符串:") 结果 = isPalindrome(数据)
如果结果: 打印(“是”) 别的: 打印(“否”)