Как преобразовать систему счисления в десятичную систему без какого-либо вмешательства со стороны другой системы - PullRequest
0 голосов
/ 11 октября 2019

Я имею в виду, как я могу преобразовать из любой системы счисления в десятичную систему, избавившись от систем счисления, которые находятся внутри этой системы! Этот код является примером тройной системы:

обратите внимание, что число 001 не учитывается во втором счетчике, потому что это двоичная система!

Этот код может преобразовываться между небольшими системами, но не можетконвертировать системы с более чем 100 числами. Я пытался заставить его сделать это, но у меня не получилось.

Кто может мне помочь?

def To_decimal(num_str):
    dec_num = 0
    f = len(num_str)-1
    for num in num_str:
        dec_num +=int(num)*(3**f)
        f-=1
    return dec_num

def Find(i,txt):
    for v in txt:
        if v == i:
            return False
    return True

def Number_system_of(num):

    txt = ""
    for i in num:
        if Find(i,txt):
            txt += i         

    return len(txt)

t = 0
r=["0","1","2"]
k=[" "," "," "]
x = 0
while x!= 3:
    k[0] = r[x]
    x+=1
    x1 = 0
    while x1 != 3:
        k[1] = r[x1]
        x1+=1
        x2 = 0
        while x2 != 3:
            k[2] = r[x2]
            x2+=1
            s=""
            s = k[0]+k[1]+k[2]
            if Number_system_of(s) == 3:
                t+=1
            print(s,t,To_decimal(s))

out:

 000 0 0
 001 0 1
 002 0 2
 010 0 3
 011 0 4
 012 1 5
 020 1 6
 021 2 7
 022 2 8
 100 2 9
 101 2 10
 102 3 11
 110 3 12
 111 3 13
 112 3 14
 120 4 15
 121 4 16
 122 4 17
 200 4 18
 201 5 19
 202 5 20
 210 6 21
 211 6 22
 212 6 23
 220 6 24
 221 6 25
 222 6 26

1 Ответ

0 голосов
/ 16 октября 2019

это работает! .. но это очень медленно: <</p>

def Switch(keyl):
    key = keyl
    L = key[len(key)-1]
    R = key[len(key)-2]
    key[len(key)-1] = R
    key[len(key)-2] = L
    return key

def Zero(y,n,f):
    keyf = f
    for x in range(y,n):
        keyf[x]= 0
    return keyf


def inkey(ke,r):
    for x in ke:
        if x == r:
            return False
    return True
def Getnum(f,li,n):

    nl = []
    for x in range(0,f):
        nl.append(li[x])
    i = li[f]
    while i != n-1:
        i+=1
        if inkey(nl,i):
            return i

def clear(f,key1,n):

    key0 = key1
    key0f =[]
    for x in range(0,f):
        key0f.append(key0[x])
    notinkey =[]

    for x in range(n):
        if inkey(key0f,x):
            notinkey.append(x)

    key0 = Zero(f,n,key0)
    keyl = []
    for x in range(len(key0)-len(notinkey)):
        keyl.append(key0[x])
    for x in notinkey:
        keyl.append(x)
    return keyl

def plus(kee,f,n,stop):

    if kee == stop:
        return kee
    if f == 0:
        kee[0]+=1
        kee = clear(1,kee,n)
        return kee
    if kee[f] == n-1 :

        return plus(kee,f-1,n,stop)
    k = Getnum(f,kee,n)

    if k == None:
        return plus(kee,f-1,n,stop)
    kee[f]=k
    kee = clear(f+1,kee,n)
    return kee


def main(n):

    key = []
    for x in range(n):
        key.append(x)
    stop = []
    for x in range(n-1,-1,-1):
        stop.append(x)
    o = 1
    t = 0
    while key != stop :
        st = ""
        for x in key:
            st+=str(x)
        print(st,t)
        if o == 1 :
            key = Switch(key)
        if o == 2 :
            key = plus(key,n-3,n,stop)
            o = 0
        t+=1
        o+=1
    st = ""
    for x in stop:
        st+=str(x)
    print(st,t)



while True:
    main(int(input("base ? : ")))
...