_szergej_ Creative Commons License 2019.04.16 0 0 60

A valt() fuggvenyed majdnem jo, kiveve, hogy forditott sorrendben irja ki a szamokat. Javaslom, hogy print helyett gyujtsd a szamjegyeket egy listaba, majd fuzd ossze azokat, valahogy igy:

 

def valt(szam, szamrendszer):

   szamok = []

   while szam > 10:

       ... (a ket sor ok)...

       if maradek < 10:

          szamok.append(str(maradek))

       else:

          szamok.append("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[maradek])

 

   eredmeny = "".join(szamok[::-1]))

   print(eredmeny)

 

Utolso elotti sor, ha ismeretlen dolgok vannak benne: a szamok[::-1] megforditja a lista elemeit, azaz az [1,2,3]-bol [3,2,1] lesz, stb. A "(sep)".join(iterable) a lista elemeit osszefuzi egymas melle a (sep) szeparatorral, jelen esetben ez ures string, azaz a szamjegyek nem lesznek elvalasztva egymastol.

 

A tizesbe() fuggvenyed nem ertem, a for i-s ciklus mire jo..., az kb igy nezzen ki:

 

def tizesbe(szam, mibol):
    osszeg = 0

    for idx, c in enumerate(str(szam)[::-1]):
        helyiertek = mibol ** idx
        osszeg += "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".index(c) * helyiertek

    return valt(osszeg, szamrendszer)

 

Magyarazat: a 'szam'-ot stringge alakitva szamjegyenkent vegig lehet menni rajta. Fentiek alapjan a [::-1]-gyel megforditjuk, igy nem kell azzal kulon torodni hany szamjegybol all a szam. A for idx, c in enumerate(...) cucc olyan ketto-az-egyben dolog, az 'idx' megadja a szamjegy helyet (ebbol szamithato a helyiertek - ld. https://hu.wikipedia.org/wiki/Helyi%C3%A9rt%C3%A9k), a 'c' pedig maga a szam. Az '01...XYZ'.index(c) megadja az adott szamjegy 10-es szamrendszerbeli reprezentaciojat, ezekbol meg osszerakhato a bemeneti szam 10-es szamrendszerbeli reprezentacioja. Ami mar valthato a masik szamrendszerbe.

 

Nyilvan nem bolondbiztos a kod: ugye csak 36-os szamrendszerig mukodik, csak nagybetukkel, nem tartalmazhat barmilyen karaktert stb, szoval az inputot megfeleloen kell validalni meg atalakitani.

 

Előzmény: Drezzer (59)