回文代码

时间:2017-03-17 02:46:41

标签: python python-2.7 palindrome

我今天接受了实习面试,他们让我谈谈如何判断字符串是否是回文使用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!

此外,如果您对如何改进代码有任何建议,请不要犹豫,按照我的方式发送。我远离其他例子,因为我希望这种尝试是有机的,而且来自我。

3 个答案:

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