Permutationer/Kombinationer med och utan återläggning

import itertools as it
import math

def perm_comb_print(a, r: int, typ: str, replacement: bool):
    n = len(a)
    if typ == 'perm' and replacement == True:  #Permutationer med återläggning  (med hänsyn till ordningsföljd), ex v kan innehålla både (1, 2) och (2, 1)
        perm_a = list(it.product(a, repeat=r))
        for i in range(n ** r):
            print(perm_a[i])
        print(f'Number of permutations with replacement = {len(perm_a)}') #print(n ** r)
    elif typ == 'perm' and replacement == False:  #Permutationer utan återläggning (med hänsyn till ordningsföljd)
        perm_a = list(it.permutations(a, r))
        for i in range(math.perm(n, r)):
            print(perm_a[i])
        print(f'Number of permutations with no replacement = {len(perm_a)}')  #print(math.perm(n, r))
    elif typ == 'comb' and replacement == True:  #Kombinationer med återläggning (utan hänsyn till ordningsföljd, ex v kan inte innehålla både (1, 2) och (2, 1)
        comb_a = list(it.combinations_with_replacement(a, r))
        for i in range(math.comb(n+r-1, r)):
            print(comb_a[i])
        print(f'Number of combinations with replacement = {len(comb_a)}')  #print(math.comb(n+r-1, r))
    elif typ == 'comb' and replacement == False:  #Kombinationer utan återläggning (utan hänsyn till ordningsföljd)
        comb_a = list(it.combinations(a, r))
        for i in range(math.comb(n, r)):
            print(comb_a[i])
        print(f'Number of combinations with no replacement = {len(comb_a)}')  #print(math.comb(n, r))


mylist = ['A', 'B', 'C']
pick = 2

perm_comb_print(mylist, pick, typ='perm', replacement=True)
perm_comb_print(mylist, pick, typ='perm', replacement=False)
perm_comb_print(mylist, pick, typ='comb', replacement=True)
perm_comb_print(mylist, pick, typ='comb', replacement=False)