import itertools def group(digits, n): while len(digits) >= n: yield digits[-n:] digits = digits[:-n] yield digits def viitenumero(perus): perus = ''.join(perus.split()) assert 4 <= len(perus) <= 20 assert all(c.isdigit() for c in perus) digits = [ord(c) - ord('0') for c in perus] factors = itertools.cycle([1, 3, 7]) total = sum(a * b for a, b in zip(digits, factors)) check = 10 - (total % 10) if check == 10: check = 0 result = digits + [check] result = ['%d' % digit for digit in result] result = list(reversed(list(group(result, 5)))) result = [''.join(g) for g in result] result = ' '.join(result) return result if __name__ == '__main__': import sys for x in sys.argv[1:]: print(viitenumero(x)) assert(viitenumero('201803') == '20 18032')