For-Schleife stimmt nicht :-(

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
Dan88
User
Beiträge: 9
Registriert: Mittwoch 22. Januar 2020, 18:39

Dienstag 4. Mai 2021, 10:19

Hallo Leute,

ich bin realtiv neu dabei und mache mich gerade dabei eine Aufgabe für die Arbeit zu lösen. Ich hab folgendes kleine python skript und finde nicht das Problem das mir nicht die Ausgabe ausspuckt die ich erwarten. Kann mich jemand in die richtige Richtung schubsen :-)

Code: Alles auswählen

elements = [2131026,2131560]

pnames = ["lfNr","BT/Etage","Raum / Bereich","DN","Nennweite Q3 = m³/h","AKS","Zähler Nr.","Stand"]
pvalues = [
    ["1","AU1",	"WWB Küche Sanitärzentrale A.-2.TE.020","25","6,3","AU2_014_SAN_ZAE_WZ005","…","0,00"],
    ["2","AU2","Fettabscheider Sanitärzentrale A.-2.TE.020","15","2,5","AU2_014_SAN_ZAE_WZ006","…","0,00"],
    ]

for ele in elements:
    print(ele , "-----------------------------------------------------------------------------------")
    for pvalue in pvalues:
        #print(pValue)
        for j in range(0,len(pnames)):
            #print(j)
            #print(ele)
            pGet = pnames[j]
            pSet = pvalue[j]
            print(pGet)
            print(pSet)



Was ich als Ausgabe erwarte:

2131026 -----------------------------------------------------------------------------------
lfNr
1
BT/Etage
AU1
Raum / Bereich
WWB Küche Sanitärzentrale A.-2.TE.020
DN
25
Nennweite Q3 = m³/h
6,3
AKS
AU2_014_SAN_ZAE_WZ005
Zähler Nr.

Stand
0,00

2131560 -----------------------------------------------------------------------------------

lfNr
2
BT/Etage
AU2
Raum / Bereich
Fettabscheider Sanitärzentrale A.-2.TE.020
DN
15
Nennweite Q3 = m³/h
2,5
AKS
AU2_014_SAN_ZAE_WZ006
Zähler Nr.

Stand
0,00

Was ich als Ausgabe bekomme:
2131026 -----------------------------------------------------------------------------------
lfNr
1
BT/Etage
AU1
Raum / Bereich
WWB Küche Sanitärzentrale A.-2.TE.020
DN
25
Nennweite Q3 = m³/h
6,3
AKS
AU2_014_SAN_ZAE_WZ005
Zähler Nr.

Stand
0,00
lfNr
2
BT/Etage
AU2
Raum / Bereich
Fettabscheider Sanitärzentrale A.-2.TE.020
DN
15
Nennweite Q3 = m³/h
2,5
AKS
AU2_014_SAN_ZAE_WZ006
Zähler Nr.

Stand
0,00
2131560 -----------------------------------------------------------------------------------
lfNr
1
BT/Etage
AU1
Raum / Bereich
WWB Küche Sanitärzentrale A.-2.TE.020
DN
25
Nennweite Q3 = m³/h
6,3
AKS
AU2_014_SAN_ZAE_WZ005
Zähler Nr.

Stand
0,00
lfNr
2
BT/Etage
AU2
Raum / Bereich
Fettabscheider Sanitärzentrale A.-2.TE.020
DN
15
Nennweite Q3 = m³/h
2,5
AKS
AU2_014_SAN_ZAE_WZ006
Zähler Nr.

Stand
0,00
Benutzeravatar
Dennis89
User
Beiträge: 186
Registriert: Freitag 11. Dezember 2020, 15:13

Dienstag 4. Mai 2021, 10:32

Hallo,

ist dir der Grund für deine Ausgabe klar?
Du startest eine Schleife, in dieser startest du die nächste und in dieser startest du noch mal eine. Dann werden die Schleifen von innen nach außen abgearbeitet.
Legst du die Liste von Hand an? Müssen die so sein? Wo kommen die Daten her? Kann man eventuell eine andere Datenstruktur wie Dictonary's verweden?
Ich frage deshalb, weil es meiner Meinung nach, dadurch einfacher, übersichtlicher und besser erweiterbar ist, um auf die Daten zuzugreifen.

Vielleicht wäre auch ein Umriss deines Programms hilfreich und man kann gleich von Anfang an, die "richtige" Programmstruktur wählen.

Grüße
Dennis
“A ship is always safe at the shore, but that is not what it is built for.”
Sirius3
User
Beiträge: 14430
Registriert: Sonntag 21. Oktober 2012, 17:20

Dienstag 4. Mai 2021, 10:58

Benutze keine kryptischen Abkürzungen. Was soll das p bei pvalues und pnames bedeuten? ele?
Warum gibt es `elements` und unabhängig davon noch eine Liste `pvalues`?
Über einen Index iteriert man in Python nicht, weil man auch direkt über die Elemente iterieren kann.
Was Dir fehlt ist die zip-Funktion.

Code: Alles auswählen

elements = [2131026, 2131560]

pnames = ["lfNr","BT/Etage","Raum / Bereich","DN","Nennweite Q3 = m³/h","AKS","Zähler Nr.","Stand"]
pvalues = [
    ["1","AU1", "WWB Küche Sanitärzentrale A.-2.TE.020","25","6,3","AU2_014_SAN_ZAE_WZ005","…","0,00"],
    ["2","AU2","Fettabscheider Sanitärzentrale A.-2.TE.020","15","2,5","AU2_014_SAN_ZAE_WZ006","…","0,00"],
]

for element, values in zip(elements, pvalues):
    print(element, "-" * 84)
    for name, value in zip(pnames, values):
        print(name)
        print(value)
Dan88
User
Beiträge: 9
Registriert: Mittwoch 22. Januar 2020, 18:39

Dienstag 4. Mai 2021, 12:20

@Dennis
Danke für deine Antwort.

Die Listen stamme auch der Python API von Dynamo. Ein Plug-In für Revit, deshalb sind die als gegeben anzusehen.

@Sirius
Super. Danke. Ich muss mir die zip-Funktion mal genauer anschauen.

Viele Grüße
Daniele
Antworten