Seite 1 von 1

print() formatiert ausgeben / vereinfacht ausgeben

Verfasst: Donnerstag 29. November 2018, 16:54
von lxks1337
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

Re: print() formatiert ausgeben / vereinfacht ausgeben

Verfasst: Donnerstag 29. November 2018, 17:15
von narpfel
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.

Re: print() formatiert ausgeben / vereinfacht ausgeben

Verfasst: Donnerstag 29. November 2018, 17:18
von kbr
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)))

Re: print() formatiert ausgeben / vereinfacht ausgeben

Verfasst: Donnerstag 29. November 2018, 20:05
von Sirius3
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)