Seite 1 von 2

sprünge?

Verfasst: Dienstag 27. November 2007, 15:20
von mathi
hallo,

mache meine ersten Schritte mit Python:

in BASIC hieß die Zeile:
30 .....
40 IF j = 1 THEN GOTO 50 ELSE GOTO 102
50 ....


wobei 40, 50 und 102 die Zeilennummern sind, wie kann ich das einfach in python machen, nach welchem Stichwort sollte ich suchen? Habe leider nix gefunden.

Verfasst: Dienstag 27. November 2007, 15:25
von Mad-Marty
Hallo,
sowas gibts nicht, und das ist gut so.
Das prinzipielle verhalten erreichst du mit if .. then .. else
Hier mal ein kleines beispiel mit 2 Funktionen.


Code: Alles auswählen

def my_function1():
    print "f1"

def my_function2():
    print "f2"


if j == 10:
    my_function1()
else:
    my_function2()

Verfasst: Dienstag 27. November 2007, 15:26
von gerold
Hallo mathi!

Willkommen im Python-Forum!

Python ist zum Glück nicht BASIC!!! :D Es gibt keine Zeilennummerierung.

Es ist wohl besser, du liest dir zuerst eines der vielen Python-Tutorials durch. Fange am Besten damit an: http://starship.python.net/crew/gherman ... -de-21.pdf

Und dann habe ich hier http://halvar.at/python/links/ noch ein paar Links zu Python-Seiten.

mfg
Gerold
:-)

Verfasst: Dienstag 27. November 2007, 15:27
von Dakre
goto gibt es zwar immernoch (zumindest in C), aber es ist eher üblich in Assembler...

in modernen Sprachen werden die Fälle in eigene Blöcke (in Python Einrückungen) gekapselt:

Code: Alles auswählen

...
if j = 1:
    # hier wird das behandelt, was passieren soll, wenn j = 1 ist
    print "j hat den Wert 1"
else:
    # hier passiert das, was bei dir in Zeile 102 stünde, sofern es ein echtes else ist
    print "j hat nicht den Wert 1"
...
falls du möchtest, dass der Code ab Zeile 102 in beiden Fällen ausgeführt wird, lässt du den else Block einfach weg:

Code: Alles auswählen

...
if j = 1:
    # hier wird das behandelt, was passieren soll, wenn j = 1 ist
    print "j hat den Wert 1"


# hier passiert das, was bei dir in Zeile 102 stünde, sofern dieser Code in beiden Fällen ausgeführt wird
print "j hat nicht den Wert 1"
...

Verfasst: Dienstag 27. November 2007, 15:37
von mathi
vielen Dank für die Hinweise,
das prinzip von if und else kenne ich.

ich werde mich nochmal mit
def my_funktion():

auseinandersetzen. :oops:

Verfasst: Dienstag 27. November 2007, 15:41
von mathi
letzte Frage: ich möchte eigendlich erstmal nur kleine rechenprogramme erstellen:

BASIC: f=x^(2/3)

Python: f=x**(2/3) gibt einen fehler, aber f=x**0.66667 ist mir zu ungenau, was ist mein denkfehler?

Verfasst: Dienstag 27. November 2007, 15:42
von EyDu
Mad-Marty hat geschrieben:sowas gibts nicht, und das ist gut so.
Sprünge oder gotos? Denn break, continue und Exceptions sind schon recht nützlich.

Verfasst: Dienstag 27. November 2007, 15:45
von EyDu
Lies dir doch erst mal das Tutorial durch, da klärt sich die Frage.

Verfasst: Dienstag 27. November 2007, 15:47
von Dakre
mathi hat geschrieben:letzte Frage: ich möchte eigendlich erstmal nur kleine rechenprogramme erstellen:

BASIC: f=x^(2/3)

Python: f=x**(2/3) gibt einen fehler, aber f=x**0.66667 ist mir zu ungenau, was ist mein denkfehler?
das gibt einen Fehler? bei mir kommt da 1 raus... denn 2/3 = 0.6667, aber als Integer ist es 0... und x**0 ist 1... versuch es mal mit f=x**(2/3.0) um Python zu sagen, dass es sich nicht um Integer, sondern um floats handelt...

Verfasst: Dienstag 27. November 2007, 15:53
von mathi
vielen Dank damit komm ich jetzt weiter. :)

Verfasst: Dienstag 27. November 2007, 16:08
von BlackJack
Oder am Anfang des Quelltextes ``from __future__ import division`` schreiben, dann ergibt ``2 / 3`` auch eine Flieskommazahlen. Für Ganzzahldivision muss man dann ``2 // 3`` schreiben.

Verfasst: Dienstag 27. November 2007, 16:12
von mathi
ha, das ist super, da ich nur mit floats arbeite :-)

Verfasst: Dienstag 27. November 2007, 16:20
von BlackJack
So wie CBM BASIC, dass im Grunde auch nur Fliesskommazahlen kennt? :-)

Verfasst: Dienstag 27. November 2007, 16:23
von mathi
ja :lol:

Verfasst: Mittwoch 28. November 2007, 08:57
von mathi
noch eine Frage:
ich habe einige if-else schleifen hintereinander,

jetzt möchte ich am Ende noch die Frage anfügen: nochmal rechnen? dafür brauche ich ja "for", aber muß ich jetzt wirklich die 30 Zeilen die ich schon geschrieben habe händisch einrücken um die blöcke zu definieren:

for i=1:
..if m=5:
............a=3
..else:
............a=4
for i=2:
..if m=5:
.
.
.
oder gibt es einen automatismus? ich stelle mir das beim nachträglichen einfügen in ein größeres programm mühselig vor!

Verfasst: Mittwoch 28. November 2007, 09:14
von BlackVivi
Ist nicht gerade Pythonspezifisch, eher Editorspezifisch. Bei IDLE muss man bspw. nur einen Block markieren und auf Tabulator drücken, schon wird der Block eingerückt.

(Für deinen Fall brauchst du übrigens eher eine while schleife, in solchem Stil:

Code: Alles auswählen

while True:
    <operationen>
    foo = raw_input("Weiterrechnen[J/n]? ")
    if foo.lower() == "n":
        break
Oder hab ich dich falsch verstanden?)

Verfasst: Mittwoch 28. November 2007, 09:19
von Rebecca
mathi hat geschrieben:muß ich jetzt wirklich die 30 Zeilen die ich schon geschrieben habe händisch einrücken um die blöcke zu definieren [...] oder gibt es einen automatismus?
Das haengt von deinem Editor ab. In Emacs kann man einen ausgewaehlten Bereich nach links/rechts verschieben: py-shift-region-right bzw. C-c > (und entsprechend fuer die andere Richtung).

Ganz automatisch kann so etwas natuerlich nicht gehen, da Bloecke ja ein wichtiges Syntax-Element darstellen.

Verfasst: Mittwoch 28. November 2007, 09:26
von BlackJack
Und ich kann mir diesen Link nicht verkneifen: http://if-schleife.de/

Das scheint jemandem sehr wichtig zu sein. :-)

@mathi: Das sieht nach einer "Übersetzung" eines BASIC-Programms nach Python aus. Wenn Du damit fertig bist, solltest Du Python etwas intensiver lernen und es dann noch einmal überarbeiten. Was bei einer 1:1 Umsetzung heraus kommt dürfte nämlich kein schöner Python-Code werden.

Verfasst: Mittwoch 28. November 2007, 09:33
von mathi
vielen Dank für die Hinweise, Ratschläge.

Ich wollte halt damit anfangen und mich so langsam in Python einarbeiten. Icch freue mich aber, dass die kleinen Anfangsschwiegigkeiten (bin kein Informatiker sondern Bau-Ing.) trotzdem Beantwortung finden.

:D

Verfasst: Mittwoch 28. November 2007, 09:34
von mathi
@BlackJack:

die Site ist interessant :-)