print statement nur, wenn für alle erfüllt ist

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
peter99
User
Beiträge: 84
Registriert: Samstag 3. August 2013, 21:32

Hallo,
ich bin neu im Forum und hätte gleich mal eine Frage:

Code: Alles auswählen

Q = range(1, 10 +1, 1)
for i in Q:
    liste = [1,1,1,1,1]
    effect = (0.7943, 0.8686, 0.7432, 0.9603, 1.0145, 0.7468)
    cavmax = [1,2,3,4,5,6]
    relative = 0
    listfields = []
    for a, b in zip(liste, effect):
        field = a/b/i
        listfields.append(field)
        relative = relative + a/b/i
    for t, u in zip(listfields, cavmax):
        if t < u:
            print relative, field
Das schaut nun mal etwas verworren aus, aber worum es mir eigentlich geht, sind die letzten beiden Zeilen. ich habe zwei Listen und vergleiche immer das erste mit dem ersten und das zweite mit dem zweiten Element und so fort. danach soll es mir ein print statement ausgeben (relative) und das bei jedem Durchlauf. es soll aber nur das print-Statement ausgeben, wenn das erste kleiner als das erste und das zweite kleiner als das zweite und so fort ist. so wie ich es programmiert habe, gibt es aus, wenn ein kleiner als eins oder zwei kleiner als zwei... Ich bräuchte also etwas wie
if for all t, u in zip(listfields, cavmax) t<u:
Vielen Dank im Vorraus.
Liebe Grüße,
Peter
Zuletzt geändert von Anonymous am Samstag 3. August 2013, 21:55, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
peter99
User
Beiträge: 84
Registriert: Samstag 3. August 2013, 21:32

Und außerdem: kennt ihr eine einfache Möglichkeit eine Liste aus z.B 5 1ern zu erstellen:? :)
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@peter99: Warum hat »liste« nur 5 Einträge, alle anderen Listen aber 6?

Der Sinn muß mir jetzt nicht sofort klar werden, oder?

Code: Alles auswählen

liste = [1]*6
effect = (0.7943, 0.8686, 0.7432, 0.9603, 1.0145, 0.7468)
cavmax = [1,2,3,4,5,6]

for i in xrange(1, 11):
    listfields = [a/b/i for a, b in zip(liste, effect)]
    if all(t<u for t, u in zip(listfields, cavmax)):
        relative = sum(listfields)
        print relative
BlackJack

@peter99: Um mal die letzte Frage zuerst zu beantworten: ``[1] * 5``.

Dir ist klar, dass die `liste` 5 Elemente hat und `effect` und `cavmax` jeweils 6 Elemente? Soll das so?

``a / b / i`` wird unnötigerweise zweimal mit den gleichen Werten berechnet.

Ausserdem könnte man das vereinfachen wenn man die Liste `listfields` und die Summe in zwei Schritte zerlegt. Dann kann man nämlich eine „list comprehension” verwenden und darauf dann die `sum()`-Funktion anwenden.

Dann lande ich bei diesem Code:

Code: Alles auswählen

#!/usr/bin/env python

def main():
    for i in xrange(1, 11):
        effect = [0.7943, 0.8686, 0.7432, 0.9603, 1.0145, 0.7468]
        cavmax = xrange(1, 7)
        listfields = [a / b / i for a, b in zip([1] * 5, effect)]
        relative = sum(listfields)
        for t, u in zip(listfields, cavmax):
            if t < u:
                print relative, listfields[-1]


if __name__ == '__main__':
    main()
Was die Frage zu den letzten Zeilen angeht wäre es vielleicht besser wenn Du nicht ungültige Python-Syntax angibst und wir blind raten müssten was das in Deinen Augen bedeuten mag, sondern vielleicht besser die gewünschte Ausgabe mit einer Beschreibung wie diese zustande kommt.
peter99
User
Beiträge: 84
Registriert: Samstag 3. August 2013, 21:32

wow, ihr seid toll!! die listen sind bewusst so gewählt, dass eine nur 5 und die andere 6 hat. der code ist länger und es ist schwierig das zu erklären, aber eine der beiden listen hat 1-6 elemente und die jeweils exsistierenden ersten, zweiten, dritten, vierten, etc. elemente sollen miteinander verglichen werden. ;)
peter99
User
Beiträge: 84
Registriert: Samstag 3. August 2013, 21:32

Entschuldige, dass die Frage so unverständlich gestellt wurde;)
Antworten