2016-12-06 7 views
0

Для этого проекта, над которым я работаю, я пишу способ последовательно найти все возможные комбинации из четырех букв. Я думал о написании цикла, который увеличивает i и конвертирует i в базовую четверку и заменяет 0, 1, 2 и 3. Я столкнулся с проблемой, когда 00 не придет. Я думал о преобразовании i в базу 5 и игнорируя каждый раз, когда появится 0, и замените 1, 2, 3 и 4. Это работает для меня, но проблема в том, что это не очень эффективно.Последовательный счетчик

Вот лучший код у меня есть на данный момент:

import string 
digs = string.digits + string.letters 
def int2base(x, base): 
    if x < 0: sign = -1 
    elif x == 0: return digs[0] 
    else: sign = 1 
    x *= sign 
    digits = [] 
    while x: 
     digits.append(digs[x % base]) 
     x /= base 
    if sign < 0: 
     digits.append('-') 
    digits.reverse() 
    return ''.join(digits) 
for i in range(0,1000): 
    x=i 
    x=int2base(x, 5) 
    if str(x).count("0")==0: 
     print(i) 

Есть ли способ, что я могу это исправить, так что он печатает, что он печатает, но мне просто нужно подключить I в функцию? Пример входных и выходных

0 -> a 
1 -> b 
2 -> c 
3 -> d 
4 -> aa 
5 -> ab 
6 -> ac 
7 -> ad 
8 -> ba 
9 -> bb 
10 -> bc 
11 -> bd 
12 -> ca 
13 -> cb 
14 -> cc 
15 -> cd 
16 -> da 
17 -> db 
18 -> dc 
19 -> dd 
20 -> aaa 
21 -> aab 
+0

Можете ли вы предоставить образец ввода и вывода, чтобы я мог быть уверен, ищете ли вы комбинаций, перестановок или продукта? – TigerhawkT3

+0

@ TigerhawkT3 Конечно, я отредактировал свое сообщение и добавил несколько примеров – chamington

ответ

1

Вы хотите электронных таблиц номера столбцов: Get Excel-Style Column Names from Column Number

основан на ответе на этот вопрос следующее:

digits = 'abcd' 

def column(n): 
    result = [] 
    while n: 
     n, rem = divmod(n-1, len(digits)) 
     result.append(digits[rem]) 
    return ''.join(reversed(result)) 

при использовании результатов в требуемой мощности:

>>> for i in range(22): 
...  print i, '->', column(i+1) 
... 
0 -> a 
1 -> b 
2 -> c 
3 -> d 
4 -> aa 
5 -> ab 
6 -> ac 
7 -> ad 
8 -> ba 
9 -> bb 
10 -> bc 
11 -> bd 
12 -> ca 
13 -> cb 
14 -> cc 
15 -> cd 
16 -> da 
17 -> db 
18 -> dc 
19 -> dd 
20 -> aaa 
21 -> aab 
+0

Спасибо, это прекрасно работает – chamington

-1

Модуль itertools.

import itertools 

for acombo in itertools.product('ABCD', repeat=4): 
    print acombo 
+0

Это не соответствует желаемому образцу. – TigerhawkT3

Смежные вопросы