Wo liegt der Fehler?

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
Nicoqoeslove
User
Beiträge: 16
Registriert: Donnerstag 7. März 2013, 11:03
Wohnort: Essen

Guten Tag,
ich wollte eine simple *Reihenfolge* erstellen und habe mich an ein Paar Tuturiols gerichtet, die ich mir vorher durchgelesen habe.
Ich möchte eine Variable die wenn a kleiner ist wie c , er es mir ausrechnet und wenn das nicht der Fall sein sollte er mir den Taschenrechner(calc) öffnet.
Möchte ein wenig in Python reinschnuppern da ich sehr unerfahren in diesem Thema allgemein bin und in meiner Ausbildung damit noch zutun haben werde.

Code: Alles auswählen

a = 1
b = 2
c = 3
d = 15
# Vergleiche das Maximum (c) von a und b
if a < b:
    b = c

else c > d
import os;
os.system('"%windir%\system32\calc.exe"');
    
print a
print b
print c
Als Fehler wird mir folgendes angezeigt:
Es liegt ein Fehler im Programm vor
Invalid Syntax
Zuletzt geändert von Anonymous am Montag 11. März 2013, 10:34, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Jeder ist seines glückes Schmied
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Nicoqoeslove hat geschrieben:Invalid Syntax
Bitte benutze die Python-Tags wenn du Code einstellst da sonst die Einrückungen verloren gehen.

Kommen wir zu deinem Problem. Wenn ich das Programm laufen lasse, dann wird mir auch noch die genaue Stelle des Fehlers angezeigt.

Code: Alles auswählen

  File "/home/matthias/pyjects/test/zeuch.py", line 274
    else c > d
         ^
SyntaxError: invalid syntax
Was soll das da darstellen?

Code: Alles auswählen

else c > d
Entweder hast du ein elif mit Bedingung oder ein else ohne Bedingung.
Nicoqoeslove
User
Beiträge: 16
Registriert: Donnerstag 7. März 2013, 11:03
Wohnort: Essen

Code: Alles auswählen

else c > d
Das soll die Bedingung sein, wenn das halt nicht der Fall ist, soll er mir c zu d machen und den Rechner öffnen einfach nur damit er es mir darstellt.
Doch leider tut er nichts, ausser mir die Fehlermeldung anzuzeigen.

Soll halt sehr einfach sein aber komme damit noch nicht so ganz klar. Also bitte noch nicht so weit denken und dich mehr in meine Lage verfassen ^^. Danke schon mal :)
Jeder ist seines glückes Schmied
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Wenn du eine konkrete Vorstellung davon hast wie der Code aussehen soll, ist es deine Aufgabe als Programmierer ihn in korrekte Form (aka Syntax) zu bringen. Die Form deines Codes passt nicht, daher kriegst du einen Syntax-Error, zusammen mit einem Hinweis an welcher Stelle[1] es hapert. Hier ein kurzes Codebeispiel wie es aussehen sollte.

[1]: Dies muss nicht zwangsläufig die Stelle sein wo du einen Fehler gemacht hast, es zeigt nur wo der Python-Interpreter hängenbleibt.
Benutzeravatar
kevind
User
Beiträge: 71
Registriert: Montag 22. Oktober 2012, 20:23
Wohnort: /dev/null

Nicoqoeslove hat geschrieben:

Code: Alles auswählen

else c > d
Das soll die Bedingung sein, wenn das halt nicht der Fall ist, soll er mir c zu d machen und den Rechner öffnen einfach nur damit er es mir darstellt.
Doch leider tut er nichts, ausser mir die Fehlermeldung anzuzeigen.
Du kannst mit `` if `` oder `` elif `` bedingungen stellen, mit else gibst du an, was passieren soll wenn keine der Bedingung eintrifft.

Und "c zu d" machen würdest du ungefähr so:

Code: Alles auswählen

c = d
Grob gesagt hat damit die Variable "c" nun den Wert der variable "d".
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Nicoqoeslove hat geschrieben:

Code: Alles auswählen

else c > d
Das soll die Bedingung sein, wenn das halt nicht der Fall ist, soll er mir c zu d machen und den Rechner öffnen einfach nur damit er es mir darstellt.
Schau dir noch mal das offizielle Tutorial zu if an.

Die Frage ist jetzt, wie deine Bedingungen verknüpft sein sollen. So wie ich deine Beschreibung bisher verstanden habe soll die Bedingung c > d nur geprüft werden wenn a < b nicht zutrifft.

Das wäre dann etwa

Code: Alles auswählen

if a < b:
    pass
else:
    if c > d:
        pass
Das lässt sich jetzt verkürzt mit einem elif ausdrücken.

Code: Alles auswählen

if a < b:
    pass
elif c > d:
    pass
Beachte bitte die Einrückungen. Die eingerückten Codeteile werden dann ausgeführt wenn die Bedingung auf der davor liegenden nicht so weit eingerückten Ebene zutrifft.

Dein Code ist insofern schwierig zu durchschauen weil er
  • rein experimentell ist und die Werte keine wirkliche Bedeutung haben
  • die Syntax falsch ist und daraus deine Absicht nicht erkennbar wird
  • deine Beschreibung nicht zu dem passt was du als Code geschrieben hast
Im Zweifelsfall frag weiter und beschreibe den Ablauf genauer. Wir werden das schon in den Griff bekommen.


Schau dir bitte mal in deinem Code Folgendes an:

Code: Alles auswählen

# Vergleiche das Maximum (c) von a und b
if a < b:
    b = c
Kommentare sind gut. Kommentare zu selbsterklärendem Code stören. Falsche Kommentare sind eine Katastrophe.
Hier passt die Beschreibung überhaupt nicht zu dem was da passiert. Dort wird kein Maximum von a und b verglichen. Dort wird überprüft ob der Wert von a kleiner ist als der Wert von b und in dem Fall erhält dann b den Wert von c.
Nicoqoeslove
User
Beiträge: 16
Registriert: Donnerstag 7. März 2013, 11:03
Wohnort: Essen

Vielen Vielen Dank /me , das erste mal das ich auch durch eine Antwort weiter kam :)

Im großen und ganzen klappt die Syntax schonmal

Code: Alles auswählen

a = 1
b = 2
c = 3
d = 15
# Vergleiche das Maximum (c) von a und b
if a < b:
    pass
else:
    if c > d:
        import os;
        os.system('"%windir%\system32\calc.exe"');
Jeder ist seines glückes Schmied
BlackJack

@Nicoqoeslove: Aber bei der Semantik sind immer noch die bereits angesprochenen Probleme.

Wenn ein ``if`` oder ein ``else``-Zweig nur aus ``pass`` besteht, dann hat man etwas falsch gemacht. Bei ``else`` und ``if``\s ohne ``else`` ist das einfach nur sinnfrei. Bei ``if`` mit ``else`` will man das ``else`` durch ``if`` mit der umgekehrten Bedingung verwenden.

Importe gehören an den Anfang des Moduls und ich sagte ja schon mal das man `os.system()` meiden sollte.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Code: Alles auswählen

if a < b:
    pass
else:
    if c > d:
->

Code: Alles auswählen

if a >= b and c > d:
Und dann solltest du dir noch die Semikola abgewoehnen. In Python ist der Zeilenumbruch Trenner zwischen Anweisungen. Ein Semkolon kann das innerhalb einer auch uebernehmen, aber wenn du nicht gerade Code Golf betreibst, solltest du das vergessen.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Nicoqoeslove hat geschrieben:

Code: Alles auswählen

[...]
if a < b:
    pass
pass bedeutet das gleiche wie: "Tue nichts". In deinem Original hattest du dort noch b = c stehen.

Für den Codeablauf ist es egal, da der Wert in deinem Beispiel ohnehin nie wieder gebraucht wird, aber wenn du die Zuweisung haben willst, dann solltest du sie auch durchführen. Wenn nicht, dann wähle die Variante von cofi (und schau dir die Hinweise von BlackJack an).
Nicoqoeslove
User
Beiträge: 16
Registriert: Donnerstag 7. März 2013, 11:03
Wohnort: Essen

Die Schritte sind bis jetzt zum Glück soweit klar :).
Nur wenn ich die Syntax verändere, damit die bedingung nicht aktzeptierd wird , öffnet er mir trotzdem nicht den Taschenrechner, obwohl er es durch den Befehl eigentlich machen müsste.
Jeder ist seines glückes Schmied
BlackJack

@Nicoqoeslove: Dann stimmt etwas an der Formulierung der Bedingungen nicht, oder Du hast noch nicht verstanden wie Bedingungen ausgewertet werden und/oder wie ``if`` funktioniert. Da wir nicht wissen was Du geänderst und wie, kann man schlecht etwas zu sagen.

Du hast übrigens ganz bestimmt nicht die Syntax geändert. Die ist von Python fest vorgegeben.
Nicoqoeslove
User
Beiträge: 16
Registriert: Donnerstag 7. März 2013, 11:03
Wohnort: Essen

Code: Alles auswählen

a = 1
b = 2
c = 3
d = 15
e = 0.5
# Vergleiche das Maximum (c) von a und b
if a < b:
     pass
else:
    if c > d:
     import os
     os.system('"%windir%\system32\calc.exe"')

print a
print b
print d
So sieht es im Moment aus
Zuletzt geändert von Anonymous am Montag 11. März 2013, 16:12, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Jeder ist seines glückes Schmied
BlackJack

@Nicoqoeslove: Wenn Du Dich wunderst warum der Taschenrechner nicht geöffnet wird, dann hast Du ``if``(/``else``) noch nicht verstanden. Warum denkst Du denn der sollte sich hier öffnen? Erklär mal den Programmablauf Zeile für Zeile, welche wird ausgeführt, was bewirkt sie, und warum.
Nicoqoeslove
User
Beiträge: 16
Registriert: Donnerstag 7. März 2013, 11:03
Wohnort: Essen

a bis e sind den jeweiligen Zahlen zugewiesen(1-0.5).
Danach kommt die If-Bedingung die Aussagt wenn a größer ist wie b, tue nichts.
Nächster Schritt.
Else -> sonst, falls c größer ist wie d, Importiere mir die calc.exe und Öffne sie.
Jeder ist seines glückes Schmied
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Nicoqoeslove hat geschrieben:Danach kommt die If-Bedingung die Aussagt wenn a größer ist wie b, tue nichts.
das Zeichen für "kleiner": <
das Zeichen für "größer": >
Antworten