Hallo nochmal, es hilft doch durchaus, nicht nur Code zu lesen, sondern auch den Text, den du dazu geschrieben hast. :) ruppert@hs-worms.de schrieb am 22.06.20 um 12:36:
das unten befindliche Programm funktioniert mit f-String-Formatierung nicht so, wie ich das erwarte. Wenn ich das F-String-Format, das ich haben möchte, zuerst als Striing formatiere (s), sieht es richtig aus.
Du meinst wohl diese Zeilen: f = "{{:0{:1d}d}} {{:0{:1d}b}} {{:0{:1d}b}}".format(dl,fw,fw) # s wird in der for-Schleife unten nicht interpretiert, # sondern als string ausgegeben: s = 'f"' + str(f"{{i:0{dl}d}} {{gray:0{fw}b}} {{bin:0{fw}b}}") + '"' bzw. wenn ich mir nur den f-string ansehe: >>> dl = 5 >>> fw = 6 >>> f"{{i:0{dl}d}} {{gray:0{fw}b}} {{bin:0{fw}b}}" '{i:05d} {gray:06b} {bin:06b}' Für mich sieht das soweit erstmal korrekt aus. Ich vermute, du möchtest etwas machen, was mit .format() funktioniert aber mit f-strings nicht: den Formatstring programmatisch erzeugen statt hinzuschreiben, stimmt das? f-strings sind ein festes Sprachkonstrukt, das direkt in der Sprache (bzw. im Parser) auf String-Literalen ausgewertet wird, daher ist es nicht möglich, f-strings zu generieren. (Ok, du könntest eval() verwenden, aber das ist recht langsam und auch fehleranfällig – tu's lieber nicht.) ".format()" dagegen wird dynamisch auf beliebigen Strings ausgewertet, nicht nur auf Literalen. Du kannst .format() und f-strings aber auch mischen: formatiere_ausgabe = \ f"{{i:0{dl}d}} {{gray:0{fw}b}} {{bin:0{fw}b}}".format print(formatiere_ausgabe(i=i, gray=gray, bin=bin)) Hier ist "formatiere_ausgabe" die ".format" String-Methode, angewendet auf meinen Formatierungsstring, den ich per f-string erzeugt habe. Wenn ich diese Methode dann aufrufe, und meine drei Argumente übergebe, dann wird meine Ausgabe entsprechend dem Formatierungsstring zusammengestellt. Stefan