Path: csiph.com!eternal-september.org!feeder.eternal-september.org!reader01.eternal-september.org!.POSTED!not-for-mail From: ruppert@hs-worms.de Newsgroups: de.comp.lang.python Subject: f-string Formatanweisung Date: Mon, 22 Jun 2020 10:36:20 -0000 (UTC) Organization: A noiseless patient Spider Lines: 66 Message-ID: Reply-To: ruppert@hs-worms.de Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 8bit Injection-Date: Mon, 22 Jun 2020 10:36:20 -0000 (UTC) Injection-Info: reader02.eternal-september.org; posting-host="35d033fccaeb030a30e4ea7b7d5ed05d"; logging-data="5477"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX195J0kV9FTj84ZMBN57F8uV" User-Agent: tin/2.4.3-20181224 ("Glen Mhor") (UNIX) (Linux/4.19.0-6-amd64 (x86_64)) Cancel-Lock: sha1:c9IljDAnpONBtDGufxlYCijweyM= Xref: csiph.com de.comp.lang.python:5642 Hallo, 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. Aber bei print(s) wird nicht das in s steckende f-string-Format interpretiert, sondern einfach nur s als String ausgegeben. Das Programm soll übrigens Binärzahlen in Gray umwandeln und zurück. Mit der .format-Methode funktioniert das auch einwandfrei. Aufruf des Programms in der kürzesten Weise: grayCode.py 2 1 2 ist der kürzeste Graycode und 1 schaltet in den debug-Modus Vielen Dank Martin Ruppert #!/usr/bin/python3 import sys if(len(sys.argv)<2): a=sys.argv[0].split('/') a=a[len(a)-1] print('usage:',a,'digits of GrayCode') print(' eg.',a,'12') exit(1) def bintogray(bin): return(bin^(bin>>1)) def graytobin(n,gray): val=0 for i in range(n,-1,-1): val = val|((((1<<(i+1))&val)>>1)^((1<2):dbg=int(sys.argv[2]) fl=int(sys.argv[1]) fw=fl if(fw<4):fw=4 dl=int(fl/3.321928+1) #dezimale Stellen if(dl<4):dl=4 f="%%-%ds %%-%ds %%-%ds"%(dl,fw,fw) if(dbg>0):print("f=",f) h=f%("#val","gray","bin") 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}}")+'"' if(dbg>0):print("f=",f) if(dbg>0):print("s=",s) for i in range(2**fl): if(i%24==0):print(h) gray=bintogray(i) bin=graytobin(fl,gray) print(f.format(i,gray,bin)) s='f"'+(f"{{i:0{dl}d}} {{gray:0{fw}b}} {{bin:0{fw}b}}")+'"' print(s) -- ruppert@hs-worms.de