print() formatiert ausgeben / vereinfacht ausgeben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
lxks1337
User
Beiträge: 6
Registriert: Montag 26. November 2018, 14:45

Hallo, ich (Anfänger) habe mal ein Kopfrechenspiel geschrieben. Da ich nicht auf alle Fragen auf ein Mal eingehen will, fange ich ganz am Anfang an.
die Ausgabe zur Auswahl der Rechenaufgabe. Mir sind %xs / %xf / %xd bekannt, weshalb das dann aber im Endeffekt ausgesprochen umständlich aussieht.
so schaut das ganze aus:

Code: Alles auswählen

print("Waehlen Sie eine der vier Aufgabentypen aus: ", "%22s" % ("Addition..........(1)"),"\n%68s" % ("Subtraktion.......(2)"),"\n%68s" % ("Multiplikation....(3)"),"\n%68s" % ("Division..........(4)"))
    
Gibt es eine möglichkeit die Zahlenwerde zwischen % und s so zu *berechnen* dass man nicht mehr "ausprobieren" muss bis alles ordentlich aussieht, oder gibt es sogar eine alternative zu meiner Vorgehensweise?

MfG
Lukas
narpfel
User
Beiträge: 645
Registriert: Freitag 20. Oktober 2017, 16:10

Wenn man das ganze ein wenig umformatiert, ist es ein wenig einfacher auszugeben, zum Beispiel so:

Code: Alles auswählen

In [2]: operations = ["Addition", "Subtraktion", "Multiplikation", "Division"]

In [3]: def print_operations(operations):
   ...:     print(f"Wählen Sie einen der {len(operations)} Aufgabentypen aus:")
   ...:     for i, operation in enumerate(operations, 1):
   ...:         print(f"({i}) {operation}")
   ...:

In [4]: print_operations(operations)
Wählen Sie einen der 4 Aufgabentypen aus:
(1) Addition
(2) Subtraktion
(3) Multiplikation
(4) Division

In [5]:
Dieses Textmenü-Tutorial von Hyperion (siehe auch) ist auch einen Blick wert.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Da gibt es mehrere Möglichkeiten, dies zu erreichen. Hier eine Variante:

Code: Alles auswählen

task = 'Waehlen Sie eine der vier Aufgabentypen aus:  '
spacer = ' ' * len(task)
add = 'Addition'
sub = 'Subtraktion'
mul = 'Multiplikation'
div = 'Division'

menu = f'{task}{add:.<20}(1)\n{spacer}{sub:.<20}(2)\n{spacer}{mul:.<20}(3)\n{spacer}{div:.<20}(4)'

print(menu)
Edit: hier noch etwas eleganter:

Code: Alles auswählen

operations = ['Addition', 'Subtraktion', 'Multiplikation', 'Division']
task = 'Waehlen Sie eine der vier Aufgabentypen aus:  '
spacer = ' ' * len(task)

print(task, end='')
print(f'\n{spacer}'.join(f'{operation:.<20}({n})' for n, operation in enumerate(operations, start=1)))
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Das ganze kann man auch mit optimaler Breite schreiben:

Code: Alles auswählen

def print_operations(operations):
    print(f"Wählen Sie einen der {len(operations)} Aufgabentypen aus:")
    width = max(map(len, operations)) + 4
    for i, operation in enumerate(operations, 1):
        print("{:.<{}s} ({})".format(operation + " ", width, i))

operations = ["Addition", "Subtraktion", "Multiplikation", "Division"]
print_operations(operations)
Antworten