Deine if-Bedingung ist (wenn man sie ein wenig anders aufschreibt):
if (ende == "ja") or ("Ja"):
Damit überprüfst du in der ersten Klammer, ob ende gleich "ja" ist. In der zweiten Klammer überprüfst du nur ob "Ja". Du überprüfst nicht ob "Ja" gleich ende ist. Deswegen wird die zweite Bedinungun immer zu True ausgewertet. Du musst stattdessen schreiben:
if (ende == "ja") or (ende == "Ja"):
Oder noch besser wäre es, wenn du die Variable ende in Kleinbuchstaben umwandelst, und dann nur überprüfst ob diese gleich "ja" ist. Das sieht dann so aus:
if (ende.lower() == "ja"):
Mit ende.lower() erhältst du die Eingababe direkt in Kleinbuchstaben.
Und ich glaube bei deiner if-elif-else Bedingung für hex, bin und oct hast du noch einen kleinen Fehler:
Das letzte else müsste genau so weit eingerückt sein wie das if und das elif.
Außerdem würde ich auch da umwandler.lower() benutzen, damit man zum Beispiel auch "HEX" oder "Oct" schreiben kann. Damit du das nicht bei jeder Bedingung schreiben musst, kannst du auch direkt die Eingabe in kleinbuchstaben umwandeln. Zeile 8 sieht dann in etwa so aus:
umwandler = input().lower()
Als letzten Vorschlag hätte ich noch eine Kleinigkeit. Du überprüfst, ob die variable umwandler gleich "hex" ist und wandelst dann nach hex um, sonst überprüfst du ob sie gleich "bin" ist und wandelst in "bin" um. Und wenn beides nicht zutrifft, wandelst du in oct um. Wenn man jetzt aber bei umwandler irgendwas anderes eingibt (zB "foo") wird die else Anweisung ausgeführt, und es wird nach oct umgewandelt.
Ich würde da lieber eine weitere Bedingung für oct einbauen, und wenn weder hex, bin oder oct zutreffend waren mit else ausgeben "Die von dir angegebene Umwandlung wird nicht unterstützt".