ich beschäftige mich seit ein paar Tagen mit Python und lerne nach einem Anfängerkurs autodidaktisch weiter, indem ich mir Dinge ausdenke, die ich programmieren könnte und die nur ein wenig über das hinausgehen, das ich schon kann. Mein aktuelles Projekt ist ein Tool, mit dem man aus BLZ und Kontonummern IBANs ausrechnen kann (und umgekehrt) sowie eine eingegebene IBAN auf Gültigkeit überprüfen kann.
Das Tool funktioniert, ich würde nur gern an einer Stelle (Zeile 24) dafür sorgen, dass die erzeugte IBAN nicht am Stück, sondern in den besser lesbaren Viererblöcken ausgegeben wird. Ich möchte also nach allen vier Zeichen des Strings ein Leerzeichen einfügen und das nicht umständlich über Slicing bewerkstelligen. Ich habe hier im Forum auch schon eine zehn Jahre alte Lösung gefunden (viewtopic.php?t=24474), die in eine Zeile passt. Sie hilft mir aber nicht weiter. Zum einen ist sie nicht erklärt, weil der TO nur eine Erinnerung brauchte, wie das noch einmal ging; zum anderen basiert sie wohl auf Python 2.x und sie wird bei mir entweder im Code überlesen oder wirft einen Fehler aus.
Falls irgendwer Zeit und Lust hat, mir eine aktuelle Lösung zu erklären, damit ich das nächste Mal nicht mehr fragen muss, freue ich mich Wenn wem noch anderes Verbesserungspotential an meinem Code auffällt, nehme ich die Ratschläge auch gerne an. Ich könnte mir zum Beispiel vorstellen, dass man das ewige Recasting von String zu Integer und zurück irgendwie umgehen könnte.
Im Voraus vielen Dank für Euer Feedback und Eure Hilfe.
warpy
Code: Alles auswählen
aufgabe=input("""Was wollen Sie tun?
a) iban aus Bankleitzahl und Kontonummer berechnen
b) Bankleitzahl und Kontonummer aus iban berechnen?
c) Eine iban überprüfen
""")
def pruefen():
global pruefz
pruefz=str(blz+kto+"131400")
pruefz=int(pruefz.replace(" ", ""))
while pruefz>97:
pruefz=(98-(pruefz%97))
else:
pruefz=str(pruefz)
if aufgabe.lower()=="a":
blz=input(str("""Bitte geben Sie Ihre Bankleitzahl ein.
"""))
if len(blz)==8:
kto=input(str("""Bitte geben Sie Ihre Kontonummer ein.
"""))
kto=str(kto).zfill(10)
if len(kto)==10:
pruefen()
iban=str("DE"+pruefz+blz+kto)
# Hier fehlt noch eine Funktion, die die IBAN in Viererblöcke aufteilt.
print("""Die zu Ihren Eingaben passende IBAN lautet:
""", iban)
else:
print("Dies ist keine in Deutschland gültige Kontonummer.")
else:
print("Dies ist keine in Deutschland gültige Bankleitzahl.")
elif aufgabe.lower()=="b":
iban=input("""Wie lautet die IBAN, die umgerechnet werden soll?
""")
iban=iban.replace(" ", "")
land=iban[0:2]
pruef=iban[2:4]
blz=iban[4:12]
kto=iban.zfill(10)[12:23]
pruefen()
if len(iban)==22 and land.upper()=="DE" and pruefz==pruef:
print("Ihre Bankleitzahl lautet: "+blz)
print("Ihre Kontonummer lautet: "+kto)
else:
print("Dies ist keine gültige deutsche IBAN")
elif aufgabe.lower()=="c":
iban=input("""Wie lautet die IBAN, die geprüft werden soll?
""")
iban=iban.replace(" ", "")
land=iban[0:2]
pruef=iban[2:4]
blz=iban[4:12]
kto=iban.zfill(10)[12:22]
pruefen()
if len(iban)==22 and land.upper()=="DE" and pruefz==pruef:
print("Dies ist eine gültige deutsche IBAN")
else:
print("Dies ist keine gültige deutsche IBAN")
else:
print("Bitte geben Sie ab, b oder c ein.")