2016-12-06 1 views
0

Für dieses Projekt, an dem ich arbeite, schreibe ich einen Weg, um nacheinander jede mögliche Kombination von vier Buchstaben zu finden. Ich dachte darüber nach, eine Schleife zu schreiben, die i erhöht und i in die vierte Basis umwandelt und die 0, 1, 2 und 3 ersetzt. Ich stieß auf ein Problem, als 00 nicht auftauchen würde. Ich dachte daran, i in Base 5 zu konvertieren und jedes Mal zu ignorieren, wenn 0 auftauchen würde, und die 1er, 2er, 3er und 4er zu ersetzen. Es funktioniert für mich, aber das Problem ist, dass es nicht sehr effizient ist.Ein sequenzieller Zähler

Hier ist der beste Code, den ich jetzt haben:

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) 

Gibt es eine Möglichkeit, dass ich das Problem beheben kann, so dass er druckt, was es druckt, aber ich brauche nur ich in eine Funktion zu stecken? Beispiel Eingabe und Ausgabe

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

Können Sie Beispieleingabe und -ausgabe bereitstellen, so dass ich sicher sein kann, ob Sie suchen Kombinationen, Permutationen oder ein Produkt? – TigerhawkT3

+0

@ TigerhawkT3 Sicher, ich habe meinen Beitrag bearbeitet und einige Beispiele hinzugefügt – chamington

Antwort

1

Sie wollen Tabelle Spaltennummern: Get Excel-Style Column Names from Column Number

Das Folgende ist in dieser Frage auf eine Antwort zu Grunde:

digits = 'abcd' 

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

, wenn die Ergebnisse in der gewünschten Ausgabe verwendet:

>>> 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

Danke, das funktioniert perfekt – chamington

-1

Modul itertools.

import itertools 

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

Dies stimmt nicht mit der gewünschten Beispielausgabe überein. – TigerhawkT3