2017-03-19 8 views
-2

異なる基底(つまり基底4)で動作するrange()関数が必要です。range()with x Base(基数10ではない)

桁の量が知られている場合、私は次のことを行うことができます:

for a in range(4): 
    for b in range(4): 
     print str(a) + str(b) 

生成するために必要な桁数の量は不明であるが。私はある種の再帰が必要だと思っています。

+2

塩基/基数は、純粋に表示問題である、あなただけ ''正規範囲(16)が必要と適切なフォーマット( 'の' 'str'にint'を変換する関数hex、 'oct '、' bin'が組み込まれていますが、あなた自身でベース4を書く必要があります)。 – jonrsharpe

+1

[任意のベースの整数を文字列に変換するにはどうすればよいですか?](http://stackoverflow.com/questions/2267362/how-to-convert-an-integer-in-any-base-to-a -string) –

答えて

3
import itertools 
import string 

digits_len = 2 
digits_repr = string.digits[:4] 
for digits in itertools.product(digits_repr, repeat=digits_len): 
    print ''.join(digits) 
+1

これは洗練されたソリューションです。 –

0

jonrsharpeのコメントのおかげで、私は以下の解決策を考え出しました。エレガントではありませんが、仕事をします!ありがとうございました!

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) 

base = 4 
digits = 2 

for x in range(base**digits): 
    print int2base(x, base).zfill(digits) 
関連する問題