2

range(1, limit) 内の数値が 2 つの平方数の合計であるかどうかを返すコードを作成しようとしています ( などの平方数- したがって1**2 = 12**2 = 4それらが合計されているかどうかを数値のリストに割り当てようとしていますこれらの平方数の任意の組み合わせ - 例: 1+1、1+4、4+16 など)。以下は私が書いたものですが、すべての値に対して「Not squared」を返していますが、これは間違っています。おそらくコードに 1 つの小さな要素が間違っていると思いますが、私はこれにかなり慣れていないため、それが何であるかを理解するのに苦労しています。ご指導いただければ幸いです。

コード:

for n in range(1,21):
    lst = range(1,21)
    squares = [x**2 for x in lst]
    for i in range(1, 21):
        for x in range(1, 21):
            if i in squares:
                if x in squares:
                    n2 = i+x
    if n2 == n:
        print n, " - Sum of Squares"

    else:
        print n, " - Not a Sum of Squares"
4

4 に答える 4

2

これは元のものではありません:::しかし、それはあなたのより多くの洞察を与えるかもしれません.

In [20]: from itertools import combinations_with_replacement

In [21]: nk=map(sum,(combinations_with_replacement([x**2 for x in range(1,21)],2)))

In [22]: for n in range(1,21):
    ...:     if n in nk:
    ...:         print n, " -Sum of Squares"
    ...:     else:
    ...:         print n, " -Not a sum of Squares"
    ...:         
1  -Not a sum of Squares
2  -Sum of Squares
3  -Not a sum of Squares
4  -Not a sum of Squares
5  -Sum of Squares
6  -Not a sum of Squares
7  -Not a sum of Squares
8  -Sum of Squares
9  -Not a sum of Squares
10  -Sum of Squares
11  -Not a sum of Squares
12  -Not a sum of Squares
13  -Sum of Squares
14  -Not a sum of Squares
15  -Not a sum of Squares
16  -Not a sum of Squares
17  -Sum of Squares
18  -Sum of Squares
19  -Not a sum of Squares
20  -Sum of Squares

In [23]: 
于 2013-01-15T18:02:19.663 に答える
1

これですか?

for n in range(1,21):
    lst = range(1,21)
    squares = [x**2 for x in lst]
    for i in range(1, 21):
        for x in range(1, 21):
            if i in squares:
                if x in squares:
                    n2 = i+x
                    if n2 == n:
                        print n, " - Sum of Squares"

                    else:
                        print n, " - Not a Sum of Squares"

出力:

>>> 
1  - Not a Sum of Squares
1  - Not a Sum of Squares
1  - Not a Sum of Squares
1  - Not a Sum of Squares
1  - Not a Sum of Squares
1  - Not a Sum of Squares
1  - Not a Sum of Squares
1  - Not a Sum of Squares
1  - Not a Sum of Squares
1  - Not a Sum of Squares
1  - Not a Sum of Squares
1  - Not a Sum of Squares
1  - Not a Sum of Squares
1  - Not a Sum of Squares
1  - Not a Sum of Squares
1  - Not a Sum of Squares
2  - Sum of Squares
2  - Not a Sum of Squares
...
于 2013-01-15T17:55:22.650 に答える
0

あなたがするように、あなたはあなたがしなければならない計算されたn2の最後の値とnを比較します

for n in range(1,21):
    lst = range(1,21)
    squares = [x**2 for x in lst]
    sum_of_squares = False
    for i in range(1, 21):
        for x in range(1, 21):
            if i in squares:
                if x in squares:
                    n2 = i+x
                    if n2 == n:
                        sum_of_square = True
    if sum_of_square:
        print n, " - Sum of Squares"
    else:
        print n, " - Not a Sum of Squares"
于 2013-01-15T17:58:59.427 に答える
0

二乗和であるすべての数を生成する方が簡単だと思います。

# oversized output array so we can use the numbers in 1..21 as indices
is_ssq = [False for n in range(22)]
squares = [x * x for x in range(1, 21)]
for i in squares:
    for x in squares:
        if i + x < 21:
            is_ssq[i + x] = True

Soが 2 つの平方和であるis_ssq[n]かどうかを示します。n


すべての Pythonic を取得したい場合はitertools、インデント レベルを使用して保存できます。

import itertools

is_ssq = [False for n in range(22)]
squares = [x * x for x in range(1, 21)]
for i, x in itertools.product(squares, squares):
    if i + x < 21:
        is_ssq[i + x] = True
于 2013-01-15T18:10:56.160 に答える