0

何らかの理由で、最初のfor...ループのx変数は、コードを1回繰り返した後にからintに変わります。strなぜそうなのか困惑していますが、このスクリプトを実行するたびに、何百ものゼロで構成される文字列がセットに入力されてしまいます。

誰かが興味を持っている場合、これはオイラーの質問4を解決する試みです。

# A palindromic number reads the same both ways.
# The largest palindrome made from the product
# of two 2-digit numbers is 9009 = 91 99.
# Find the largest palindrome made from the product of two 3-digit numbers.

def palindrome():

    products = set()

    for x in xrange(700,999):
        for y in xrange(700,999):
            temp = x*y
            n = [x for x in str(temp)]
            if temp not in products:
                if len(n)%2 == 0:
                    half = len(n)/2
                    first = n[:half]
                    last = n[half:]
                    last.reverse()
                    if first == last:
                        products.add(temp)

    return products



if __name__ == "__main__":
    n = palindrome()
    print n
4

4 に答える 4

7

Python 2.x では、リスト内包表記はその変数を囲んでいるスコープにリークします。したがって、リスト内包[x for x in str(temp)]表記は x の値を上書きします。ただし、外側のループの次の繰り返しで int に戻されることに注意してください。

于 2012-08-08T07:42:03.240 に答える
3

文字列を代入するため、文字列に変更されます。

        n = [x for x in str(temp)]

このような間違いは、1 文字の変数を避けるべき理由です。そうは言っても、私は通常_、リスト内包表記で使い捨て変数として使用します...

于 2012-08-08T07:41:58.537 に答える
3

次のリスト内包表記内で x を使用しないでくださいn = [x for x in str(temp)]。代わりに別の変数名を選択してください。

于 2012-08-08T07:42:35.277 に答える
-1
1    for x in xrange(700,999):
2        for y in xrange(700,999):
3            temp = x*y
4            n = [x for x in str(temp)]

ステップ 4 の後、n = ['4', '9', '0', '0', '0', '0'], x = '0'

次のステップ 3 では、temp='0'*701

于 2012-08-08T08:05:23.350 に答える