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.