Помогите мне закончить эту самопроблему Python 3.x

Это не домашняя работа.

Я видел, что эта статья хвалила библиотеку Linq и насколько большой это для того, чтобы сделать материал комбинаторики, и я думал мне: Python может сделать это более читаемым способом.

После получаса клевков с Python я перестал работать. Закончите, где я кончил. Кроме того, сделайте это в большей части Pythonic и эффективном пути, возможном.

from itertools import permutations
from operator import mul
from functools import reduce
glob_lst = []
def divisible(n): return (sum(j*10^i for i,j in enumerate(reversed(glob_lst))) % n == 0)
oneToNine = list(range(1, 10))
twoToNine = oneToNine[1:]
for perm in permutations(oneToNine, 9):
    for n in twoToNine:
        glob_lst = perm[1:n]
        #print(glob_lst)
        if not divisible(n):
            continue
    else:
        # Is invoked if the loop succeeds
        # So, we found the number
        print(perm)

Спасибо!

8
задан Hamish Grubijan 25 April 2010 в 03:44
поделиться

2 ответа

Вот краткое решение, использующее itertools.permutations :

from itertools import permutations

def is_solution(seq):
    return all(int(seq[:i]) % i == 0 for i in range(2, 9))

for p in permutations('123456789'):
    seq = ''.join(p)
    if is_solution(seq):
        print(seq)

Я намеренно пропустил проверки делимости на 1 и 9, так как они всегда будут удовлетворены.

23
ответ дан 5 December 2019 в 05:44
поделиться

Вот мое решение (не такое элегантное, как у Марка, но оно все равно работает):

from itertools import permutations

for perm in permutations('123456789'):
    isgood = 1
    for i in xrange(9):
        if(int(''.join(perm[:9-i])) % (9-i)):
            isgood = 0
            break
    if isgood:
        print ''.join(perm)
2
ответ дан 5 December 2019 в 05:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: