2014-01-25 120 views
0

我被要求编写一个程序来测试一个给定的字符串是否是回文。 n是长度为1的字符串= x < = 10000不包含空格或特殊字符。我在几分钟内写了如下内容:Python回文挑战

def run(n): 
    n = n.replace('\n','') 
    nprime = n[::-1] 
    Bool = True 
    for i in range(0,len(n)): 
    if not n[i]==nprime[i]: 
     Bool = False 
    if Bool==True: 
    print "Y" 
    else: 
    print "N" 

显然这对某些测试用例是失败的。我不知道它失败的测试用例。我尝试了所有边缘案例,我可以想到和我的脚本似乎工作正常。有没有人有任何想法可能会失败?

+10

你不能用'n任何特别的原因== N [:: -1]'? – user2357112

+1

哪个测试用例是该程序明显失败的? –

+0

我最好的猜测是你没有正确处理I/O。无论是错误地解析输入,还是不以正确的格式输出输出。 – user2357112

回答

0

我将简化您的代码:

def check(inval): 
    val = inval.strip().lower() 
    lav = val[::-1] 
    print (val == lav) and 'Y' or 'N' 

如果你想一个非常广义的版本使用:

def check(inval): 
    val = ''.join([l for l in inval if l.isalnum()]).lower() 
    lav = val[::-1] 
    result = (val == lav) 
    # print result and 'Y' or 'N' # Since comments indicate some dislike this! 
    return result 
+2

更好的是,只需返回相等结果并让调用者处理显示输出。 –

+0

为什么当条件表达式存在时容易出错的'和'/'或'黑客? – user2357112

+0

它是否也适用于边缘情况太等例如“上升投票,先生” –