我今天接受了实习面试,他们让我谈谈如何判断字符串是否是回文使用python。我设置了我的基本结构和一些伪代码,一切都很顺利......现在我回家了,我想实际编写代码。
一切都到位,我对字符串中的每个字母进行比较,以确定它是否是回文。代码有效,我只有一个小问题。我的结构方式,输出'字符串,〜不管〜,不是回文。'对于每一个字母的比较直到最后一个,它将输出是否是回文的最终确定。
我明白为什么会发生这种情况,但我有点坚持如何解决它。有人可以指导我如何在下面的代码中修复if语句,这样它只会输出一次是否是回文吗?
string = raw_input('Enter your string here: ')
sa = list(string)
n = len(sa)
if n%2 == 0:
print('This string has an even number of letters.')
for x in range(0, n/2):
if sa[x] == sa[n/2 - x]:
print('The string, ' + string + ', is a palindrome!')
else:
print('The string, ' + string + ', is NOT a palindrome!')
else:
print('This string has an odd number of letters.')
a = int(n/2)
for x in range(0, a):
if sa[x] == sa[n - a]:
print('The string, ' + string + ', is a palindrome!')
else:
print('The string, ' + string + ', is NOT a palindrome!')
如果我运行代码,输出的一些示例是:
Enter your string here: abba
This string has an even number of letters.
The string, abba, is NOT a palindrome!
The string, abba, is a palindrome!
Enter your string here: racecar
This string has an odd number of letters.
The string, racecar, is NOT a palindrome!
The string, racecar, is NOT a palindrome!
The string, racecar, is a palindrome!
Enter your string here: travel
This string has an even number of letters.
The string, travel, is NOT a palindrome!
The string, travel, is NOT a palindrome!
The string, travel, is NOT a palindrome!
此外,如果您对如何改进代码有任何建议,请不要犹豫,按照我的方式发送。我远离其他例子,因为我希望这种尝试是有机的,而且来自我。
答案 0 :(得分:1)
这是挽救代码的最直接方式:
string = raw_input('Enter your string here: ')
sa = list(string)
n = len(sa)
palindrome = True
if n%2 == 0:
print('This string has an even number of letters.')
for x in range(0, n/2):
if sa[x] != sa[n - x - 1]:
palindrome = False
else:
print('This string has an odd number of letters.')
a = int(n/2)
for x in range(0, a):
if sa[x] != sa[n - x - 1]:
palindrome = False
if palindrome:
print 'The string, ' + string + ', is a palindrome!'
else:
print 'The string, ' + string + ', is NOT a palindrome!'
首先,每次检查字符对时,您都不想报告它是否是回文。假设它是一个带有布尔变量的回文并且如果你发现则将它改为False。
接下来,您的循环和索引存在一些问题。在你的情况下,你应该从字符串的末尾开始倒数,而不是中间。同样,在您的奇怪情况下,您应该根据循环变量x
而不是静态中点进行倒数。在这两种情况下,您都必须将索引调整一,以避免在x = 0
时出错。
最后,虽然您采用的方法是手动执行的一种好方法,但您可以使用内置于该语言的更简洁的方法。简单地将输入字符串与reversed(string)
或string[::-1]
进行比较将产生一个布尔值,其中包含是否为回文的答案。
答案 1 :(得分:0)
尝试以下操作,您可能必须修复一些语法,因为我不是Python开发人员。 :)
string = raw_input('Enter your string here: ')
sa = list(string)
n = len(sa)
bool isPalindrome =false
if n%2 == 0:
print('This string has an even number of letters.')
for x in range(0, n/2):
if sa[x] == sa[n/2 - x]:
isPalindrome = true
else:
//should be in a block
isPalindrome = false
break;
else:
print('This string has an odd number of letters.')
a = int(n/2)
for x in range(0, a):
if sa[x] == sa[n - a]:
isPalindrome = true
else:
//should be in a block
isPalindrome = false
break;
if isPalindrome:
print('The string, ' + string + ', is a palindrome!')
else:
print('The string, ' + string + ', is NOT a palindrome!')
答案 2 :(得分:0)
在迭代期间跟踪标记。在开始时将其分配为True
,然后在您测试不起作用的字母时将其False
分配。
或者更好的是,也许这样的事情可以简化一些事情:
string = 'nurses run'.replace(' ','')
gnirts = string[::-1]
if all( [ a==b for a,b in zip(string,gnirts) ] ):
print("It's a palindrome.")
else:
print("It's not a palindrome.")