reticulateとPython3で楽しむプログラミング。正の整数の因数を求める。

Python3コード

(ファイル(モジュール)名は、factors.py とした)。

#!/usr/bin/env python3


"""(docstring 必要ならば書く。)
"""


def calc_factors(num):
    """(docstring 必要ならば書く。)
    """

    try:
        if num <= 0:
            print('Bless you!')
            return
            # 一応、ハマらないために残しておく。
            # return print('Bless you!')だとRStudioでSyntaxError: invalid syntax(略)。
    except TypeError as err:
        print(err)

    try:
        res = [i for i in range(1, num+1) if num % i == 0]
    except (ValueError, TypeError) as err:
        print(err)
    else:
        print('{0} {1}'.format('n =', num))
        print(res)
        # 一応、ハマらないために残しておく。
        # print(*res) アンパックはRStudioでSyntaxError: invalid syntax(略)。

    try:
        for j in range(1, num+1):
            if num % j == 0:
                print('{0} {1} {2} {3} {4}'.format(num, '=', j, '*', num//j))

        print('')
        print('')
    except (ValueError, TypeError) as err:
        print(err)

if __name__ == '__main__':
    calc_factors(25)
    calc_factors(30)
    calc_factors(51)
    calc_factors(52)
    calc_factors(53)
    calc_factors(57)
    calc_factors(70)
    calc_factors(75)
    calc_factors(100)

    # 例外処理用
    #
    # 一応、コメントアウトして残しておく。
    #
    # calc_factors(-100) # Bless you!
    # calc_factors(0) # Bless you!
    # calc_factors(1.1) # ValueError
    # calc_factors('1') # TypeError
    # calc_factors(-0.1) # Bless you!

Rコード

library(reticulate)




# py_config() 読み込んだPythonのバージョン確認。




py_run_file("factors.py")

R Console

> library(reticulate)
> 
> 
> 
> 
> # py_config() 読み込んだPythonのバージョン確認。
> 
> 
> 
> 
> py_run_file("factors.py")
n = 25
[1, 5, 25]
25 = 1 * 25
25 = 5 * 5
25 = 25 * 1


n = 30
[1, 2, 3, 5, 6, 10, 15, 30]
30 = 1 * 30
30 = 2 * 15
30 = 3 * 10
30 = 5 * 6
30 = 6 * 5
30 = 10 * 3
30 = 15 * 2
30 = 30 * 1


n = 51
[1, 3, 17, 51]
51 = 1 * 51
51 = 3 * 17
51 = 17 * 3
51 = 51 * 1


n = 52
[1, 2, 4, 13, 26, 52]
52 = 1 * 52
52 = 2 * 26
52 = 4 * 13
52 = 13 * 4
52 = 26 * 2
52 = 52 * 1


n = 53
[1, 53]
53 = 1 * 53
53 = 53 * 1


n = 57
[1, 3, 19, 57]
57 = 1 * 57
57 = 3 * 19
57 = 19 * 3
57 = 57 * 1


n = 70
[1, 2, 5, 7, 10, 14, 35, 70]
70 = 1 * 70
70 = 2 * 35
70 = 5 * 14
70 = 7 * 10
70 = 10 * 7
70 = 14 * 5
70 = 35 * 2
70 = 70 * 1


n = 75
[1, 3, 5, 15, 25, 75]
75 = 1 * 75
75 = 3 * 25
75 = 5 * 15
75 = 15 * 5
75 = 25 * 3
75 = 75 * 1


n = 100
[1, 2, 4, 5, 10, 20, 25, 50, 100]
100 = 1 * 100
100 = 2 * 50
100 = 4 * 25
100 = 5 * 20
100 = 10 * 10
100 = 20 * 5
100 = 25 * 4
100 = 50 * 2
100 = 100 * 1