staging.inyokaproject.org

Python wenn Variable

Status: Gelöst | Ubuntu-Version: Ubuntu 20.04 (Focal Fossa)
Antworten |

dsm4

Anmeldungsdatum:
9. April 2021

Beiträge: 20

Hallo, ich möchte das wenn eine Variable also z.b.

1
2
3
4
day = datetime.datetime.today().weekday() + 1
html = {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e', 6: 'f', 7: 'g'}
if day in html.keys():
    dayhtml = html[day]

Wenn dayhtml a,b,c... ist. Dann: a = hallo, wenn b = super. Und so weiter.

Geht das mit if, elif und else?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Ich verstehe das nicht: warum so kompliziert? Da geht doch

1
2
3
4
html = {0: 'a', 2: 'b', 2: 'c', 3: 'd', 4: 'e', 5: 'f', 6: 'g'}

day = datetime.datetime.today().weekday()
dayhtml = html[day]

Die Bedingung und den Offset brauchst Du doch gar nicht.

dsm4

(Themenstarter)

Anmeldungsdatum:
9. April 2021

Beiträge: 20

Nein, ich will das wenn es Montag ist etwas anderes ausgibt als wenn es Dienstag, Mittwoch,... ist.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

Lies die Dokumentation noch mal genau - ich glaube du wirfst da datetime.weekday() und datetime.isoweekday() durcheinander - ersteres startet die Woche bei Montag = 0, letzteres bei Montag = 1

Den Überlauf (day > 6) könnte man mit einem Modulo 7 abfangen (und statt weekday() + 1 auch isoweekday() schreiben, wenn man den Wert für den nächsten Tag haben will und das dictionary Werte ab 0 liefert):

1
2
3
4
html = {0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e', 5: 'f', 6: 'g'}

next_weekday = (datetime.datetime.today().weekday() + 1) % 7
dayhtml = html[next_weekday]

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

dsm4 schrieb:

Nein,

Wieso?

ich will das wenn es Montag ist etwas anderes ausgibt als wenn es Dienstag, Mittwoch,... ist.

Genau das tut es doch (wenn man mal davon absieht, dass in dem Schnipsel kein Ausgabebefehl steht).

seahawk1986 schrieb:

Lies die Dokumentation noch mal genau - ich glaube du wirfst da datetime.weekday() und datetime.isoweekday() durcheinander - ersteres startet die Woche bei Montag = 0, letzteres bei Montag = 1

Den Überlauf (day > 6) könnte man mit einem Modulo 7 abfangen

Was für einen Überlauf? Es gibt doch sowieso nur sieben Werte für Wochentage - egal, welche Methode man verwendet. Wenn man die Schlüssel entsprechend dem Wertebereich der genutzten Weekday-Funktion wählt, muss man auch keinen weiteren Zirkus (= Rechnerei) veranstalten. Selbst, wenn man das nicht tut, muss man nur einen festen Offset addieren oder subtrahieren. Auch dabei gibt es keinen Überlauf.

dsm4

(Themenstarter)

Anmeldungsdatum:
9. April 2021

Beiträge: 20

Wollte eigentlich nur:

1
2
3
4
if 'a' in dayhtml:
     print("a")
elif 'b' in dayhtml:
     print("b")

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

Also z.B. so?

1
2
3
key = 1
if (v := dayhtml.get(key)):
    print(v)

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

dsm4 schrieb:

Wollte eigentlich nur:

1
2
3
4
if 'a' in dayhtml:
     print("a")
elif 'b' in dayhtml:
     print("b")

Das ging aus Deiner ursprünglichen Frage nicht hervor. Außerdem verstehe ich nicht, warum Du das über eine Kontrollstruktur anstatt ein Dictionary machen willst. Das ist meist deutlich ineffizienter. Was ist überhaupt Dein Ziel?

Antworten |