-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)

これは私がこれまでに持っているものです。私がやろうとしていることは次のとおりです。

下位リストをフィルタリングして、次の 3 つの基準すべてを満たす単語のリストを作成し、完了したらリストを出力します。

単語の長さは 7 文字以上です。最初と最後の文字をスキップした単語の真ん中は、回文です (前方と後方と同じ)。単語自体は回文ではありません。

私は本当に近くにいるように感じます..何が欠けているのですか

4

2 に答える 2

1

あなたの問題は、結果のリストが空であることなので、条件の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)

これで、表示されない print ステートメントを探すことができ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 に答える