0

私はPythonに少し慣れていません。私は特定の範囲の数を調べて、Pythonにその中のすべての回文を数えさせ、それらを私に返そうとしています(合計数ではなく合計数)。したがって、この範囲内のすべての整数をカウントし、1つの数値として返します。

無効な構文エラーが発生し続け、何を変更すればよいかわかりません。これが私がこれまでに持っているものです:

import math

def ispal(n):
    return str(n) == str(n)[::-1]

しかし、これは基本的に私たちがクラスで行ったことです。

私の数の範囲は171から115000であり、これら2つの数を含むその間の全範囲を調べて、Pythonに回文数の数を教えてもらいたいと思います。問題は、forループに合わせる方法がわからないことです。

私は始めました:

def count_pal(n):  
   count = 0  
   for i in range(n):  
       if i = str(n) == str(n)[::-1]:
           return:  
           count =+ i   
   else:
       pass

しかし、私は2つを組み合わせる方法がわかりません。私はPython3.2を持っています。誰か助けてくれませんか?ありがとうございました!

4

2 に答える 2

2
def num_palindromes(start, end):
    count = 0
    for i in range(start, end + 1):
        if str(i) == str(i)[::-1]:
            count += 1
    return count

またはワンライナーとして

def num_palindromes(start, end):
    return sum(str(i) == str(i)[::-1] for i in range(start, end + 1))
于 2013-03-24T03:37:03.993 に答える
0

カウンターをインクリメントする機会を得る前に、for ループ内に戻っています。何もしないので、空の「else: pass」ブロックも必要ありません。

正しい解決策は、ループが終了した後、関数の最後にカウンターを返します。

このようなものが動作します:

count = 0
for i in range(171, 115000):
    if str(i) == str(i)[::-1]:
        count += 1
return count

いくつかのスタイルの変更に注意してください。 str(i)[::-1])

あなたの質問とは直接関係ありませんが、Pythonの従来のスタイルに従うと、コードが読みやすくなり、他の人が理解しやすくなり、助けやすくなります。

最後に、おまけとして、リスト内包表記を使用してこのタスクを実行することもできます。

sum([1 for i in range(171, 115000) if str(i) == str(i)[::-1]])

個人的には、ループカウンターのバリエーションよりも簡潔で理解しやすいと思います。

于 2013-03-24T03:50:21.693 に答える