Python 3 で数学を。

Python 3 とライブラリで数学の問題を解いていきます。統計学や機械学習はときどき。

順列。順列の計算。(含む階乗)。(Python 3: アンパック、スライス、 SymPy: sympy.functions.combinatorial.numbers, nP(), factorial())

使用するライブラリ

SymPy

Python 3 コード

permutations3.py

#!/usr/bin/env python3


"""(docstring)
"""


import sympy as sym
from sympy.functions.combinatorial.numbers import nP


def print_math_problems():
    """(docstring)
    """
    print("""問題:

以下の計算をせよ。

(1) 10P3
(2) 8P4
(3) 7P1
(4) 5P5
(5) 6!
(6) 0!
""")


def solutions():
    """(docstring)
    """
    print('解答例 1:\n')

    expressions = [nP(10, 3), nP(8, 4),
                   nP(7, 1), nP(5, 5),
                   sym.factorial(6), sym.factorial(0)]

    for idx, expr in enumerate(expressions, 1):
        print('({}) '.format(idx), end='')
        print(expr)

    print('\n\n')

    print('解答例 2:\n')

    n_list = [[10, 3], [8, 4], [7, 1], [5, 5], [6, 0]]

    # nP():
    for idx, nums in enumerate(n_list[:4], 1):
        print('({}) '.format(idx), end='')
        print(nP(*nums))

    # factorial():
    for idx, n in enumerate(n_list[-1], 5):
        print('({}) '.format(idx), end='')
        print(sym.factorial(n))

    print('\n\n')

    print('解答例 3:\n')
    print('(1) 6P3 =', nP(10, 3))
    print('(2) 8P4 =', nP(8, 4))
    print('(3) 7P1 =', nP(7, 1))
    print('(4) 5P5 =', nP(5, 5))
    print('(5) 6! =', sym.factorial(6))
    print('(6) 0! =', sym.factorial(0))


if __name__ == '__main__':
    print_math_problems()
    print('-'*79)
    solutions()

出力

$ python3 permutations3.py
問題:

以下の計算をせよ。

(1) 10P3
(2) 8P4
(3) 7P1
(4) 5P5
(5) 6!
(6) 0!

-------------------------------------------------------------------------------
解答例 1:

(1) 720
(2) 1680
(3) 7
(4) 120
(5) 720
(6) 1



解答例 2:

(1) 720
(2) 1680
(3) 7
(4) 120
(5) 720
(6) 1



解答例 3:

(1) 6P3 = 720
(2) 8P4 = 1680
(3) 7P1 = 7
(4) 5P5 = 120
(5) 6! = 720
(6) 0! = 1

参考文献 (数式を参考)

関連過去記事

py3math.hatenablog.com

py3math.hatenablog.com