

各約数を入力して、出力では約数の合計を出力するプログラム作成してまして  
現在ですと、最後に入力された値のみしか出力されません。  
どうすれば、各入力値に対する出力をすることが出来ますか？

[code]

    N = int(input())
    sum_list = []
    num_list = []
    for _ in range(N):
        num = int(input())
    
    divisor = [i for i in range(1, num) if num % i == 0]
    divisor_list = list(divisor)
    sum_divisor_list = sum(divisor_list)
    print(sum_divisor_list)
    
[/code]

目的

入力値  
3  
28  
16  
10

出力  
28  
15  
8

ご教示よろしくお願いいたします。


CC BY-SA 4.0
2021-08-22T14:14:40.687
80969
2021-08-24T00:06:11.867
2021-08-23T23:48:19.863
47752
47752
question
python python3
各約数の出力について


「後に入力された値のみしか出力され」ない理由はfor文の中でN回`num`を書き換えているため、それ以前の入力値を消して上書きしていることが原因です。

ご質問の意図が「特定の数値の(素数ではなく)約数をすべて求め、その約数(ただし特定の数値自体は除く)を合計すること」であり、`divisor`の定義以降の処理が正しいと仮定した場合は下記のようにコードを書きなおすことができます。

**修正例**

[code]

    N = int(input())  # 3 を入力
    for _ in range(N):
        num = int(input("> ")) # 3回のループでそれぞれ 28, 16, 10 を入力
    
        divisor = [i for i in range(1, num // 2 + 1) if num % i == 0] # Tips 約数を求めるならばnumの半分までループすれば良い
        divisor_list = list(divisor)
        sum_divisor_list = sum(divisor_list)
        print(divisor_list)     # 約数の確認用コード
        print(sum_divisor_list) # 求める出力
    
[/code]

**出力結果**

[code]

    3
    > 28
    [1, 2, 4, 7, 14]
    28
    > 16
    [1, 2, 4, 8]
    15
    > 10
    [1, 2, 5]
    8
    
[/code]


CC BY-SA 4.0
2021-08-23T04:36:14.147
80984
2021-08-23T06:21:23.000
2021-08-23T06:21:23.000
9820
9820
80969
answer


[SymPy](https://www.sympy.org/en/index.html) というパッケージに `proper_divisors()`
という関数があります。

[sympy.ntheory.factor_.proper_divisors](https://docs.sympy.org/latest/modules/ntheory.html#sympy.ntheory.factor_.proper_divisors)

> Return all divisors of n except n, sorted by default.

質問文にあるコードには `num_list` というリストがあるので、それを使いましょう(`sum_list`も)。

[code]

    from sympy import proper_divisors
    
    num_list = []
    N = int(input())
    for _ in range(N):
      num_list.append(int(input()))
    
    sum_list = []
    for num in num_list:
      sum_divisors = sum(proper_divisors(num))
      print(sum_divisors)
      sum_list.append(sum_divisors)
    
[/code]


CC BY-SA 4.0
2021-08-24T00:06:11.867
80998
2021-08-24T00:06:11.867
47127
80969
answer