Werte an ein Shell Script übergeben

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.
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

@Sirius3: Was soll ich dazu sagen? Du hast in allem Recht und ich geb dir auch recht was das betrifft.

Laut Script wird man 2 mal gefragt ob man sich sicher ist mit dem was man tut. Zusätzlich wird auch noch eine Log-Datei angelegt mit dem Namen der Person die das ausgeführt hat.
Das berücksichtige ich schon mit Messageboxen. Was ich aber nicht machen kann ist das die Patienten-ID mit dem dazugehörigem Namen zu filtern bzw. anzuzeigen. Dazu bräuchte ich wieder Datenbankzugriff.

Zu deinem Mehrwert, ich kann die Patienten-ID´s nochmal anzeigen lassen bei den "blödsinnigen" Ja/Nein-Abfragen.

Ich versteh schon worauf du hinaus willst aber ich kann schlecht auf die Barrikaden steigen.
Sirius3
User
Beiträge: 18265
Registriert: Sonntag 21. Oktober 2012, 17:20

@Kalli87: willst Du Programmierroboter sein, oder jemand, der Mängel anspricht und Lösungen dafür bietet? Ein guter Programmierer hinterfragt auch seine Randbedingungen. Was ist das wirkliche Problem, das es zu lösen gilt? Selbständig denken ist ja nicht gleichzusetzen mit "auf die Barrikaden steigen".
Vielleicht ärgern sich alle schon Jahrelang, dass sie die Namen zu den Nummern nicht angezeigt bekommen, wissen aber gar nicht, dass Abhilfe einfach möglich wäre. Beim Mergen müssen ja nicht nur Dateien kopiert, sondern auch die Datenbank angepasst werden. Woher kommen die Nummern? Gibt es vielleicht schon die Möglichkeit, die Nummern von dort direkt zu übernehmen. Als Programmierer muß man den gesamten Lösungsraum im Blick haben. Auch wenn man nicht alles im Detail verstehen kann, die groben Zusammenhänge müssen immer klar sein. Und aus allen Möglichkeiten ist es Deine Aufgabe, die beste zu finden und wenigstens ins Gespräch zu bringen.
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

Grüße, mal kurz und einfach.

Wenn ich mehrere Entry-Felder habe und prüfen will ob was eingetragen ist oder nicht.
Kann ich doch alles in eine if-Abfrage packen.
z.B.

Code: Alles auswählen

if self.name.get() or self.alte_id.get() or self.neue_id.get() == "":
    tkinter.messagebox.showerror('Fehler', 'Daten wurden nicht vollständig angeben')
Wenn ich es so schreibe kommt jedes mal die Fehlermeldung bzw. die Messagebox, setze ich das ganze in eine Klammer:

Code: Alles auswählen

if (self.name.get() or self.alte_id.get() or self.neue_id.get()) == "":
    tkinter.messagebox.showerror('Fehler', 'Daten wurden nicht vollständig angeben')
Kommt keine Messagebox mehr egal ob ein Entry-Feld leer ist oder mehrere leer sind.

Gibts da ein trick?
Benutzeravatar
snafu
User
Beiträge: 6862
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Schreib es lieber so:

Code: Alles auswählen

if not all(entry.get() for entry in {self.name, self.alte_id, self.neue_id}):
    tkinter.messagebox.showerror('Fehler', 'Daten wurden nicht vollständig angeben')
Bei deiner `or`-Variante ist das Verhalten nämlich ganz anders als du es vermutlich erwartest.
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

danke snafu
und ja is richtig, hab es anders erwartet und war überfragt was schief läuft
Sirius3
User
Beiträge: 18265
Registriert: Sonntag 21. Oktober 2012, 17:20

@Kalli87: "or" hat eine niedrigere Priorität als ==, und "a or b" liefert als Ergebnis a wenn a sich nicht zu False evaluiert sonst b.

Also bei Deiner ersten Variante ist die if-Bedingung erfüllt wenn entweder self.name nicht leer ist, self.alte_id nicht leer ist oder self.neue_id leer ist.

Mit Klammern wird zuerst die or evaluiert, also wenn self.name nicht leer ist, wird self.name mit dem leeren String verglichen, wenn self.alte_id, dann self.alte_id, sonst self.neue_id. Die if-Bedingung wird also nur erfüllt, wenn alle Felder leer sind.

@snafu: wenn man drei Elemente linear durchgeht, ist ein Set die falsche Datenstruktur, ein Tuple wäre wohl geeigneter.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Sirius3 hat geschrieben: @snafu: wenn man drei Elemente linear durchgeht, ist ein Set die falsche Datenstruktur, ein Tuple wäre wohl geeigneter.
Stilistisch ja, aber rational sehe ich keinen Unterschied, wenn die Reihenfolge egal ist... :K (Bei einer Liste bliebe sogar die Reihenfolge gleich) Ob man "dann" von falsch sprechen kann, bezweifel ich aber doch.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Sirius3
User
Beiträge: 18265
Registriert: Sonntag 21. Oktober 2012, 17:20

@Hyperion: falsch in dem Sinne, dass die Eigenschaften eines Sets gar nicht benutzt wird.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Kalli87 hat geschrieben:und ja is richtig, hab es anders erwartet und war überfragt was schief läuft
Bei Bedingungen wird nur überprüft, ob der Ausdruck an sich wahr ist. In der Dokumentation findest du unter Boolean Operations eine Aufzählung der Ausdrücke die als wahr oder falsch betrachtet werden.

Code: Alles auswählen

>>> bool(0)
False
>>> bool(2)
True
>>> bool('')
False
>>> bool('x')
True
Wenn du eine Verkettung mit or hast, dann wird so lange überprüft, bis ein Ausdruck wahr ist. Bei and wird überprüft bis ein Ausdruck falsch ist. Der letzte überprüfte Ausdruck wird dann zurückgegeben.

Code: Alles auswählen

>>> print(1 or 2 or 3)
1
>>> print(1 and 2 and 3)
3
>>> print([] or 2)
2
>>> print([] and 2)
[]
>>> print([1] or 2)
[1]
>>> print([1] and 2)
2
Benutzeravatar
snafu
User
Beiträge: 6862
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Sirius3 hat geschrieben:@snafu: wenn man drei Elemente linear durchgeht, ist ein Set die falsche Datenstruktur, ein Tuple wäre wohl geeigneter.
Hatte ich dann auch gedacht. Aber ich musste weg. Daher gab's auch keine vernünftige Erklärung, warum die andere Variante nicht funktioniert hat.
Benutzeravatar
snafu
User
Beiträge: 6862
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Hyperion hat geschrieben:
Sirius3 hat geschrieben: @snafu: wenn man drei Elemente linear durchgeht, ist ein Set die falsche Datenstruktur, ein Tuple wäre wohl geeigneter.
Stilistisch ja, aber rational sehe ich keinen Unterschied, wenn die Reihenfolge egal ist... :K (Bei einer Liste bliebe sogar die Reihenfolge gleich) Ob man "dann" von falsch sprechen kann, bezweifel ich aber doch.
Naja, es mag bei drei Elementen recht egal sein, aber z.B. das Hashen der Elemente ist ja völlig unnötig, wenn man sie linear durchlaufen will. Ich stimme da schon zu, dass ein Tupel sinnvoller wäre. Wobei ich dann eher eine Liste genommen hätte.
Antworten