Генерация шестнадцатеричных чисел с условием
Необходимо сгенерировать список шестнадцатеричных чисел, не содержащих 0, и в которых сумма цифр не превосходит 11 в десятиричной системе.
Сам пока додумался только до этого:
import itertools
nums = [list(x) for x in itertools.product((1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F'), repeat=7) if (x[-1] == x[-2])]
Осталось только проверку суммы, но как?
Может можно в условии if как-то прописать, что 'A' = 10, 'B' = 11 и тд?
Ответы (1 шт):
я внес некоторые изменения в код
поскольку максимум может быть сумма 11, то никаких 'C', 'D', 'E', 'F' нет - можно оставить, но считать будет гораздо дольше
я формирую обычные числа от 0 до 15 (ну вернее от 1 до 11), по ним вычисляю сумму
и в конце перевожу через список соответствий в буквы
буквы формирую в слова
зачем у вас в коде if (x[-1] == x[-2]) я не понял, поэтому убрал, но если надо - верните
код:
import itertools
data = ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F')
nums = [''.join(map(lambda i: data[i], x)) for x in itertools.product((1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,), repeat=7) if sum(x) < 12]
print(*nums)