Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.python > #5645

Re: [Python-de] f-string Formatanweisung

Path csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail
From Stefan Behnel <python-de@behnel.de>
Newsgroups de.comp.lang.python
Subject Re: [Python-de] f-string Formatanweisung
Date Mon, 22 Jun 2020 14:55:40 +0200
Lines 102
Message-ID <mailman.252.1592830727.24731.python-de@python.org> (permalink)
References <rcq1j2$5b5$1@dont-email.me> <3c7649df-8e7a-6099-878c-a10882a90955@behnel.de>
Mime-Version 1.0
Content-Type text/plain; charset=utf-8
Content-Transfer-Encoding 8bit
X-Trace news.uni-berlin.de DtWPMVS2PaV+1QOtIosSEADDvolJB9QQA+wZfn8yUQKA==
Return-Path <python-de@behnel.de>
X-Original-To python-de@python.org
Delivered-To python-de@mail.python.org
Authentication-Results mail.python.org; dkim=pass reason="2048-bit key; unprotected key" header.d=behnel.de header.i=@behnel.de header.b=DYZp5NlE; dkim-adsp=pass; dkim-atps=neutral
DKIM-Signature v=1; a=rsa-sha256; c=relaxed/relaxed; t=1592830726; s=strato-dkim-0002; d=behnel.de; h=In-Reply-To:Date:Message-ID:From:References:To:Subject: X-RZG-CLASS-ID:X-RZG-AUTH:From:Subject:Sender; bh=7BtIPO1EvSA/dOd87dcCp6opoaz1NLrW18WhCxuUtEE=; b=DYZp5NlE3SygiP/HDLoYi2nDnPLeJn+B8O0cn1FUMrVs+l79LW63i9Na2WcupN/c7j MUwdS1Sp2tcCTc/AO6zo6AH0a19iEpf7wmG6omHzKduhV3sBfZ+3gG9FDkH8YPdUTfBV 50SNERvVXeOK0gnMYhR2NaIoTcfei+Gv8Nl25NGNcpADAx0FlYmsr5ACCl0MCv6EN6U6 uE1sRR7fJgJpdg00+yDdxejHBMMQdRQw6tcUicmeJsZvI+fWIN4gVa6ZSDy9HMDtgEyN cd/sp94aRkH076HFQyupwFh4rcVMVjGSe1ptq0fNVOHrOGvTWRrRuLfmxUTsvBMfGd5q RaoQ==
X-RZG-AUTH ":E1MMdFW4b++AXZOTwA41DOYM0Dv9LNWvavC/fJZ6Wfgmp/Lh1ANWCRaaq2R1hHsoZh74ArcRjqdrtbnfdSk7SR00Qivwavc27kbrx2CHRUeo5xXR"
X-RZG-CLASS-ID mo00
User-Agent Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0
In-Reply-To <rcq1j2$5b5$1@dont-email.me>
Content-Language de-DE
X-BeenThere python-de@python.org
X-Mailman-Version 2.1.33
Precedence list
List-Id Die Deutsche Python Mailingliste <python-de.python.org>
List-Unsubscribe <https://mail.python.org/mailman/options/python-de>, <mailto:python-de-request@python.org?subject=unsubscribe>
List-Archive <http://mail.python.org/pipermail/python-de/>
List-Post <mailto:python-de@python.org>
List-Help <mailto:python-de-request@python.org?subject=help>
List-Subscribe <https://mail.python.org/mailman/listinfo/python-de>, <mailto:python-de-request@python.org?subject=subscribe>
X-Mailman-Original-Message-ID <3c7649df-8e7a-6099-878c-a10882a90955@behnel.de>
X-Mailman-Original-References <rcq1j2$5b5$1@dont-email.me>
Xref csiph.com de.comp.lang.python:5645

Show key headers only | View raw


Hallo Martin,

schön, dass du deinen Code hier veröffentlichst. Lass es mich zum Anlass
nehmen, weiter unten noch ein paar Kommentare dazu zu schreiben.

Das hier

    s='f"'+(f"{{i:0{dl}d}} {{gray:0{fw}b}} {{bin:0{fw}b}}")+'"'

scheint mir ein Versuch zu sein, einen f-string innerhalb einer
Zeichenkette zu generieren. War das beabsichtigt? Zumindest wird er dann
nirgendwo verarbeitet. Wie Mike schon bemerkte, fehlt da irgendwas, aber
mir ist nicht so ganz klar, was der Zweck war und was dann die richtige
Korrektur wäre. Kannst du das ein bisschen erklären?


ruppert@hs-worms.de schrieb am 22.06.20 um 12:36:
> #!/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<<i)&gray))
>     return(val)
> 
> dbg=0
> if(len(sys.argv)>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)

Zusätzlich zu dem, was Mike schon gesagt hat: es wäre vermutlich auch für
dich einfacher gewesen, in diesem Code einen Fehler zu finden, wenn du den
Code mit mehr Abständen hingeschrieben hättest. Als jemand, der schon oft
genug kopfschüttelnd vor meinem eigenen Code von vor ein paar Jahren
gestanden hat, kann ich dir sagen: Code wird immer für Menschen
geschrieben, nicht für Maschinen.

Ich finden z.B. das hier

    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)

sehr schwer zu lesen, wohingegen ich das folgende viel klarer finde:

    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)

Noch besser als das letzte Kommando finde ich in diesem Fall:

    f = f"%-{dl}s %-{fw}s %-{fw}s"

Und der Zahl "3.321928" würde ich auch noch einen Namen geben, damit klar
ist, woher die so plötzlich kommt und was für eine Bedeutung die hat, z.B.

    DEZIMALE_STELLEN_PRO_FRZLFIFF = 3.321928

    dezimale_stellen = int(fl / DEZIMALE_STELLEN_PRO_FRZLFIFF + 1)

Vielleicht ist das nicht auf den ersten Blick klar, aber es könnte
irgendwann ein Tag kommen, an dem du jemandem auf den Knien danken
möchtest, dass eine Variable im Code "dezimale_stellen" heißt und nicht
"dl". Im besten Fall dir selbst.

Stefan

Back to de.comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

f-string Formatanweisung ruppert@hs-worms.de - 2020-06-22 10:36 +0000
  Re: [Python-de] f-string Formatanweisung Mike Müller <mmueller@python-academy.de> - 2020-06-22 14:27 +0200
  Re: [Python-de] f-string Formatanweisung Mike Müller <mmueller@python-academy.de> - 2020-06-22 14:31 +0200
    Re: [Python-de] f-string Formatanweisung ruppert@hs-worms.de - 2020-06-22 13:22 +0000
  Re: [Python-de] f-string Formatanweisung Stefan Behnel <python-de@behnel.de> - 2020-06-22 14:55 +0200
  Re: f-string Formatanweisung "Andreas B." <ab@sysing.de> - 2020-06-22 15:03 +0200
    Re: f-string Formatanweisung ruppert@hs-worms.de - 2020-06-22 13:28 +0000
  Re: [Python-de] f-string Formatanweisung Stefan Behnel <python-de@behnel.de> - 2020-06-22 15:14 +0200
    Re: [Python-de] f-string Formatanweisung ruppert@hs-worms.de - 2020-06-22 14:03 +0000
    Re: [Python-de] f-string Formatanweisung ruppert@hs-worms.de - 2020-07-13 11:13 +0000

csiph-web