sprünge?

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.
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

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.
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

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()
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Dakre
User
Beiträge: 16
Registriert: Dienstag 13. Juni 2006, 22:40

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"
...
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

vielen Dank für die Hinweise,
das prinzip von if und else kenne ich.

ich werde mich nochmal mit
def my_funktion():

auseinandersetzen. :oops:
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

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?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Lies dir doch erst mal das Tutorial durch, da klärt sich die Frage.
Dakre
User
Beiträge: 16
Registriert: Dienstag 13. Juni 2006, 22:40

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...
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

vielen Dank damit komm ich jetzt weiter. :)
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.
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

ha, das ist super, da ich nur mit floats arbeite :-)
BlackJack

So wie CBM BASIC, dass im Grunde auch nur Fliesskommazahlen kennt? :-)
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

ja :lol:
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

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!
Zuletzt geändert von mathi am Mittwoch 28. November 2007, 09:19, insgesamt 1-mal geändert.
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

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?)
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

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.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
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.
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

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
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

@BlackJack:

die Site ist interessant :-)
Antworten