Een positiestelsel1 is een talstelsel2 waarin een getal wordt voorgesteld door een reeks symbolen — doorgaans worden hiervoor Arabische cijfers en kleine letters gebruikt — waarvan de positie op basis van een gekozen grondtal de bijdrage aan het getal bepaalt. Het gebruikelijke grondtal is tien. Men twijfelt er niet aan dat dit grondtal is ontstaan doordat de mensen op hun vingers telden. Een getal als 1234 heeft dan de betekenis: 1×1000+2×100+3×10+4×1. De positie van een cijfer bepaalt de bijdrage in machten van het grondtal 10 aan het getal.

Een natuurlijk getal x laat zich in het decimale positiestelsel uitdrukken als een reeks termen van machten van een ander natuurlijk getal: het grondtal a: x=i=0kxiai of x=xkak++x2a2+x1a1+x0a0 waarbij voor de coëfficiënten xiN geldt dat 0xi<a. In het a-tallige stelsel wordt x dan voorgesteld als de reeks symbolen: xkx2x1x0 De coëfficiënten xi vormen in volgorde de symbolen van het getal. Het meest linkse symbool xk is de coëfficiënt van de hoogste macht van het grondtal, het meest rechtse x0 de coëfficiënt van de eenheden (de 0-de macht van het grondtal).

Zo wordt in het 7-tallig stelsel het getal 123410 geschreven als 34127, want: 123410=3×73+4×72+1×71+2×70

Opgave

Schrijf een functie positiestelsel die de voorstelling van een getal in een positiestelsel met een gegeven grondtal a1 omzet in de voorstelling van datzelfde getal, maar dan in een positiestelsel met een ander grondtal a2. Aan deze functie moeten de volgende drie parameters doorgegeven worden:

def positiestelsel(getal, grondtal1, grondtal2)

De functie moet een string teruggeven die het getal in het positiestelsel met grondtal a2 voorstelt. Je mag ervan uitgaan dat 0<a1,a236. Bij de stringvoorstelling van getallen in een positiestelsel worden de gangbare symbolen gebruikt:

Voorbeeld

>>> positiestelsel('1234', 10, 7)
'3412'
>>> positiestelsel('1234', 10, 16)
'4d2'
>>> positiestelsel('4d2', 16, 10)
'1234'
>>> bin(1234)[2:] == positiestelsel('1234', 10, 2)
True
>>> oct(1234)[2:] == positiestelsel('1234', 10, 8)
True
>>> hex(1234)[2:] == positiestelsel('1234', 10, 16)
True