-4
nonpalidrome=[]
for word in lowers:
    if len(word)>=7:
        if word[2:-2:1]==word[2:-2:-1]:
            if word[1]!=word[-1]:
                nonpalidrome.append(word)

这就是我到目前为止我想做的是:

通过过滤 lowers 列表,创建满足以下所有三个条件的单词列表,完成后打印列表:

该词至少有 7 个字符长;单词的中间,跳过第一个和最后一个字母,是一个回文(向前和向后一样);这个词本身不是回文。

我觉得我真的很亲近..我错过了什么

4

2 回答 2

1

由于您的问题是您的结果列表为空,这意味着您的条件之一不起作用:

if len(word)>=7:

if word[2:-2:1]==word[2:-2:-1]:

if word[1]!=word[-1]:

我会尝试的第一件事是print在每个语句之后添加语句以缩小问题范围:

nonpalidrome=[]
for word in lowers:
    print("Got word " + word)
    if len(word)>=7:
        print("len(word) >= 7")
        if word[2:-2:1]==word[2:-2:-1]:
            print("word[2:-2:1]==word[2:-2:-1]")
            if word[1]!=word[-1]:
                print("word[1]!=word[-1]")
                nonpalidrome.append(word)

现在您可以查找没有出现的打印语句,并且您会知道哪个if语句没有达到您的预期结果。

顺便说一句,您的代码比它需要的要复杂得多。为什么不循环遍历字符串而不是比较像 1 和 2 这样的硬编码索引?

于 2012-11-12T18:32:57.013 回答
0

尝试这样的事情:

for word in lowers :
   if len(word) >=7 and word[1:-1] == word[1:-1][::-1] and word [0] != word[-1]:
       nonpalindrome.append(word)

用于[1:-1]获取单词的中间,[::-1]用于获取反转字符串以匹配是否为回文:

In [172]: word='ballooned'

In [173]: word[1:-1] 
Out[173]: 'alloone'

In [174]: word[1:-1][::-1]
Out[174]: 'enoolla'

In [175]: word[::-1]
Out[175]: 'denoollab'

或使用列表理解:

non_palindrome=[x for x lowers if len(x)>=7 and x[1:-1]==x[1:-1][::-1] and x[0] != x[-1] ]
于 2012-11-12T18:32:20.133 回答