Seite 1 von 1
Wo liegt der Fehler?
Verfasst: Montag 11. März 2013, 08:26
von Nicoqoeslove
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
Re: Wo liegt der Fehler?
Verfasst: Montag 11. März 2013, 09:10
von /me
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?
Entweder hast du ein
elif mit Bedingung oder ein
else ohne Bedingung.
Re: Wo liegt der Fehler?
Verfasst: Montag 11. März 2013, 09:41
von Nicoqoeslove
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

Re: Wo liegt der Fehler?
Verfasst: Montag 11. März 2013, 11:00
von webspider
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.
Re: Wo liegt der Fehler?
Verfasst: Montag 11. März 2013, 11:35
von kevind
Nicoqoeslove hat geschrieben:
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:
Grob gesagt hat damit die Variable "c" nun den Wert der variable "d".
Re: Wo liegt der Fehler?
Verfasst: Montag 11. März 2013, 12:11
von /me
Nicoqoeslove hat geschrieben:
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
Das lässt sich jetzt verkürzt mit einem
elif ausdrücken.
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.
Re: Wo liegt der Fehler?
Verfasst: Montag 11. März 2013, 13:27
von Nicoqoeslove
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"');
Re: Wo liegt der Fehler?
Verfasst: Montag 11. März 2013, 13:33
von 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.
Re: Wo liegt der Fehler?
Verfasst: Montag 11. März 2013, 13:44
von cofi
->
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.
Re: Wo liegt der Fehler?
Verfasst: Montag 11. März 2013, 14:15
von /me
Nicoqoeslove hat geschrieben:
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).
Re: Wo liegt der Fehler?
Verfasst: Montag 11. März 2013, 15:46
von Nicoqoeslove
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.
Re: Wo liegt der Fehler?
Verfasst: Montag 11. März 2013, 15:50
von 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.
Re: Wo liegt der Fehler?
Verfasst: Montag 11. März 2013, 16:06
von Nicoqoeslove
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
Re: Wo liegt der Fehler?
Verfasst: Montag 11. März 2013, 16:15
von 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.
Re: Wo liegt der Fehler?
Verfasst: Montag 11. März 2013, 16:36
von Nicoqoeslove
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.
Re: Wo liegt der Fehler?
Verfasst: Montag 11. März 2013, 16:39
von /me
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": >