Von VS zu Python. Welche IDE ?

Gute Links und Tutorials könnt ihr hier posten.
aviable
User
Beiträge: 19
Registriert: Montag 16. März 2015, 18:41

Hallo liebes Forum.
2 Fragen am Anfang: Wie macht man einen Anhang.jpg ?
Lade das grad mal zu dropbox. Dauert bisschen. :D
Ist das hier der richtige Bereich ?

Zu meiner Person:
Mitte der 80-er lernte ich Basic auf einem Pet-2001
Dann kamen ein paar Assemblerkenntnisse dazu und etwas c/c++
Ich hatte mich einem Open-Source Project angeschlossen und meine Aufgabe bestand eigentlich nur darin
auch dem dusseligsten Anfänger zu erklären das Projekt mit VS zu kompilieren.
Nur wirklich einen Einstieg in C++ habe ich nie gefunden.
Eigentlich war ich mit GFA-Basic ja sehr zufrieden.
Doch bei VB !?! Was soll ich mit den ganzen Registry-Keys ? Mhhh, nicht so wirklich das wahre.
Doch dann erhielt ich den Tipp: Mensch, nimm doch Python.

Doch irgendwie hab ich wohl ein grundlegendes Verständnisproblem wie Python benutzt wird.
S. Anhang

Hier mal ein Beispiel. in GFA-Basic

Code: Alles auswählen

'
' benzol
'
x = 1
y = 1
num = 20000
zoom = 1
xver = 350
yver = 240
a = -100
b = 1
c = 100
'
For i = 1 To num
  Plot xver + x / zoom, yver + y / zoom
  xx = y - Sgn(x) * (b + x - c) ^ 1 / 8 + (b + x + c)
  yy = a - x
  x = xx
  y = yy
Next i
Bin wohl zu alt. :shame:
Beim Lesen der sources kann ich mehr lernen, als mich durch die Tutorials durchzukämpfen.
Gibt es für ( aktuell 3.4 ) eine Seite, wo ich einfach nur eine schöne Sammlung von Anfänger.py's finde ?
Jetzt hab ich grad gesehen: Es gibt ja auch .pyw's
Was hat es damit auf sich ?

Ach so, meine Frage wegen einer Umsteigertauglichen IDE von VS:
PYVS-Tools, PyCharm, Ninja, WingIDE und Komodo ( das beschwert sich immer, ich hätte kein brauchbares Python installiert. 3.1 3.3 und 3.4 sind aber installiert )
eric6 erscheint mir SEHR brauchbar. Erschlägt mich aber i.e.M.mit seinen Funktionen.
Vor allem vermisse ich die Funktion: Leeres Projekt erstellen.

Nochmal zum Umsteigen: Was ist an dem Print-Befehl falsch ?
Zeit ist zwar relativ. Trotzdem dauert es.
Es ist wesentlich einfacher, die Sachen zu machen, die man kann, als die die Sachen zu tun, die man lernt.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Hallo und Willkommen hier im Forum!

Also zu alt kann man gar nicht sein - wenn Du motiviert bist und Dich ein wenig durchbeißt, wirst Du bestimmt schnell Freude an Python finden! :-)

Welcher ``print`` Befehl denn?

Grundsätzlich haben wir einige Threads (angepinnt?), die sich mit IDEs vs Editoren und Tutorials und Büchern befassen. Einfach mal gucken und ggf. die Suchfunktion anwerfen ;-)

In Kurz: Man braucht bei Python nicht unbedingt eine IDE - ein guter Editor tut es auch. Ansonsten ist eine offene und stets bereite Python-Shell ein Muss. Viele nutzen statt der mitgelieferten iPython. Die bietet einige Dinge mehr, wie Autocompletion, Syntax Highlighting und ich mag insbesondere die verschiedenen Möglichkeiten Code in die Shell zu "pasten".

Du wirst um das Durcharbeiten von Tutorials nicht herumkommen fürchte ich. Natürlich lernt man viel durch das Angucken und verstehen von Code, aber die Grundlagen (Kontrollstrukturen und elementare Datenstrukturen) muss man sich schon mal erarbeiten. Denn das obige Beispiel ist eigentlich etwas total triviales. Eigentlich muss man dafür nur die ``for``-Schleife kennen und ein paar mathematische Funktionen nachschlagen. Also wirklich nichts dramatisches und etwas, was man am ersten Tag schon umsetzen können sollte.

Also schnapp Dir das offizielle Tutorial und leg einfach los :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
aviable
User
Beiträge: 19
Registriert: Montag 16. März 2015, 18:41

Zeit ist zwar relativ. Trotzdem dauert es.
Es ist wesentlich einfacher, die Sachen zu machen, die man kann, als die die Sachen zu tun, die man lernt.
DaftWullie
User
Beiträge: 37
Registriert: Donnerstag 17. Mai 2012, 21:28

Python unterscheidet Groß- und Kleinschreibung ;-)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo und willkommen im Forum!
aviable hat geschrieben:Beim Lesen der sources kann ich mehr lernen, als mich durch die Tutorials durchzukämpfen.
Das zweifle ich mal an. Du schreibst doch selbst, dass du ein grundlegendes Verständnisproblem hast. Wenn du nicht mindestens das Grundlagentutorial durcharbeitest, dann wird das schwierig. Ohne die Grundlagen wirst du nur probieren dich durchzuraten und dich immer wieder über Dinge wundern. Probieren kannst du, wenn du die Basics drauf hast.

Was die IDE angeht: Da reicht ein normaler Texteditor mit Syntaxhighlighting, mehr braucht es eigentlich nicht.
Das Leben ist wie ein Tennisball.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Also Du kannst Fehlermeldungen einfach *direkt* hier ins Forum posten. Dazu gibt es spezielle Tags, die Du ja im obigen Beitrag schon gefunden hast. Einfach die Standard-Sprache bei Python belassen und die Ausgabe der Shell hier posten.

Mal als Beispiel:

Code: Alles auswählen

In [1]: print "hello"
  File "<ipython-input-1-8d90ecae1fe0>", line 1
    print "hello"
                ^
SyntaxError: Missing parentheses in call to 'print'
Die Meldung gibt ja auch schon einen Hinweis auf die Lösung: ``print`` ist in Python 3 eine *Funktion* und muss daher auch so aufgerufen werden, also mit runden "Klammern drum herum":

Code: Alles auswählen

In [2]: print("hello")
hello
So etwas solltest Du aber auch im offiziellen Tutorial ganz am Anfang finden - und wenn es daran schon hapert sagt Dir das ja ganz deutlich: "Arbeite mich durch" :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
aviable
User
Beiträge: 19
Registriert: Montag 16. März 2015, 18:41

Test

Code: Alles auswählen

Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> print "hello"
SyntaxError: Missing parentheses in call to 'print'
>>> print ("hello")
hello
>>> 
EyDu hat geschrieben:Das zweifle ich mal an.
Du vergisst, ich kann Basic, assembler und c++
50 gute programme in python gelesen geben mir mehr als 1000 Seiten Tutorial. :lol:
Zeit ist zwar relativ. Trotzdem dauert es.
Es ist wesentlich einfacher, die Sachen zu machen, die man kann, als die die Sachen zu tun, die man lernt.
BlackJack

@aviable: 50 Gute Python-Programme lesen sich komplett anders als BASIC, Assembler, oder C++.
aviable
User
Beiträge: 19
Registriert: Montag 16. März 2015, 18:41

@BlackJack funktioniert wohl hier im Forum noch nicht. Oder hast du eine PM erhalten ?
Ein Witz: ich kann den Hexcode vom 64 besser lesen, als mancher die Tageszeitung.
Hyperion hat geschrieben:...ein guter Editor tut es auch.
Jibt aber keen Editor mit Automaticeinrückung wie bei GFA, und Syntaxprüfung
Zeit ist zwar relativ. Trotzdem dauert es.
Es ist wesentlich einfacher, die Sachen zu machen, die man kann, als die die Sachen zu tun, die man lernt.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

aviable hat geschrieben: Jibt aber keen Editor mit Automaticeinrückung wie bei GFA, und Syntaxprüfung
Öh... gibt viele... hast Du Dir mal die Threads rausgesucht?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

aviable hat geschrieben:Du vergisst, ich kann Basic, assembler und c++
50 gute programme in python gelesen geben mir mehr als 1000 Seiten Tutorial. :lol:
Und du scheiterst an einem print, was jeder totale Anfänger nach 10 Minuten im Tutorial schafft. Das sagt doch einiges über die Effektivität deines Ansatzes aus.
Das Leben ist wie ein Tennisball.
BlackJack

@aviable: Was meinst Du mit funktionieren? Du wusstest das *Du* angesprochen warst ohne das ich etwas aus Deinem Beitrag zitieren musste. Also hat's funktioniert.

Die meisten Editoren die sich zum programmieren eignen kommen auch mit Einrückung gut zurecht. Rücken also zum Beispiel nach einem ``:`` das einen Block einleitet nach dem abschliessen der Zeile mit der Eingabetaste die nächste Zeile eine Ebene weiter ein.

Neben farbiger Syntaxhervorhebung, wo man ja auch schon den einen oder anderen Fehler sieht, kann man in die meisten Editoren auch externe Programme einbinden. Also zum Beispiel das bei jedem Speichern das aktuelle Modul kompiliert wird und dabei auftretende Fehler im Editor angezeigt werden, oder gleich ein Programm wie pylint oder pyflakes was noch mehr Sachen findet.
aviable
User
Beiträge: 19
Registriert: Montag 16. März 2015, 18:41

Ich bin ganz neu hier. Und sowas von ..... das ist mir alles zuviel
Sicherlich, ich bin am suchen und am ausprobieren.
Doch wenn ich nicht weis, wonach ich suchen soll ....
Such doch mal VirtualDub für Linux. Noch so ein Problem.
-----------------------
BlackJack hat geschrieben:@aviable: Was meinst Du mit funktionieren? Du wusstest das *Du* angesprochen warst ohne das ich etwas aus Deinem Beitrag zitieren musste. Also hat's funktioniert.
Na ja, nicht so ganz. Ich hab ja nur 1Thema hier. Hätte ich 20 oder 100
Das hätte ich nicht bemerkt.
Zeit ist zwar relativ. Trotzdem dauert es.
Es ist wesentlich einfacher, die Sachen zu machen, die man kann, als die die Sachen zu tun, die man lernt.
BlackJack

@aviable: Wonach denn Suchen? Der Link zum Tutorial in der Python-Dokumentation wurde doch schon verraten. Nicht planlos suchen sondern das einfach mal durcharbeiten.

Und was hat VirtualDub unter Linux jetzt damit zu tun? (Gibt's AFAIK nicht, muss man also entweder unter Wine oder in einer VM mit Windows laufen lassen, oder sich eine Alternative suchen.)
aviable
User
Beiträge: 19
Registriert: Montag 16. März 2015, 18:41

Hyperion hat geschrieben:
aviable hat geschrieben: Jibt aber keen Editor mit Automaticeinrückung wie bei GFA, und Syntaxprüfung
Öh... gibt viele... hast Du Dir mal die Threads rausgesucht?
Morgen.
aviable hat geschrieben: ....und Komodo ( das beschwert sich immer, ich hätte kein brauchbares Python installiert. 3.1 3.3 und 3.4 sind aber installiert )
BlackJack hat geschrieben:@aviable: Wonach denn Suchen? Der Link zum Tutorial in der Python-Dokumentation wurde doch schon verraten.
Der link zu den guten 50 .py-Programmen noch nicht. ( Gute programmierungen lassen mich die Fehler in den Tutorials/Büchern wesentlich leichter finden)
Und ich wollte nochmal nachfragen: Was sind .pyw Dateien ?
Zuletzt geändert von aviable am Montag 16. März 2015, 20:27, insgesamt 2-mal geändert.
Zeit ist zwar relativ. Trotzdem dauert es.
Es ist wesentlich einfacher, die Sachen zu machen, die man kann, als die die Sachen zu tun, die man lernt.
Benutzeravatar
pillmuncher
User
Beiträge: 1482
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

aviable hat geschrieben:Ein Witz: ich kann den Hexcode vom 64 besser lesen, als mancher die Tageszeitung.
Du kannst also besser Russisch lernen, indem du es nicht aus einem Lehrbuch lernst, weil du schon Französisch kannst?

Hier mal ein paar Beispiele, die zeigen, warum das die falsche Einstellung sein könnte:

Mein Lieblings-Prolog-Programm:

Code: Alles auswählen

append_dl(A - B, B - C, A - C).
Das verkettet zwei Listen. Ja, wirklich (sofern es Differenzlisten sind).

Und die zentrale Stelle in meinem in Python geschriebenen Prolog-Interpreter:

Code: Alles auswählen

    def _resolve(self, *, db, choice_points, yes, no, prune):

        choice_point = self.choice_point(db)
        choice_points.append(choice_point)
        here = len(choice_points)

        @tco
        def prune_here():
            while here <= len(choice_points):
                choice_points.pop().close()
            return no()

        @tco
        def try_next():
            for goal in choice_point:
                break
            else:
                return prune() if is_cut(self) else no()
            if goal is None:
                return yes(try_next)
            else:
                return goal.ref._resolve(
                    db=db,
                    choice_points=choice_points,
                    yes=yes,
                    no=try_next,
                    prune=prune_here,
                )

        return try_next()
Mit Continuation Passing und selbstgebastelter Tail Call Optimization.

Das Problem, siehst du, ist, dass Python-Code oft auf einem viel höheren Abstraktionsniveau lebt, als Assembler-, C- oder Basic-Code. EInige Abstraktionen sind in die Sprache schon einegebaut, wie zB. Iteratoren, Coroutinen, Dekoratoren (via First Class Functions) und Metaklassen, und man kann diese wiederum verwenden, um eigene Abstraktionen zu bauen. Python kennt keine Tail Calls? Kein Problem:

Code: Alles auswählen

import functools

def trampoline(bouncing, *args, **kwargs):
    while bouncing:
        bouncing, result, args, kwargs = bouncing(*args, **kwargs)
        yield from result

def land(*args, **kwargs):
    return None, (), args, kwargs

def throw(cont, *args, _=None, **kwargs):
    return cont, [_], args, kwargs

def bounce(cont, *args, **kwargs):
    return cont, (), args, kwargs

def tco(function):
    return functools.partial(bounce, function)
Jetzt kennt es sie.

Manche dieser Abstraktionen führen zu komplett unterschiedlichen Herangehensweisen an ein Problem. Bei deinem Beispielprogramm in Basic muss die For-Schleife wissen, bis zu welcher Zahl sie zählen muss. In Python würde man einen Generator schreiben:

Code: Alles auswählen

from itertools import islice
from somewhere import plot

def benzol(x, y, a, b, c):
    while True:
        yield x, y
        x, y = ... y ..., ... x ....  # aus den alten x und y neue x und y berechnen

def main():
    for x, y in islice(benzol(1, 1, -100, 1, 100), 20000):
        plot(350 + x, 240 + y)
yield liefert einen Wert zurück und unterbricht den Ablauf einer Funktion, bis der nächste Wert angefordert wird, woraufhin die Funktion von dort, wo sie unterbrochen wurde weiterläuft bis zum nächsten yield, oder bis zum Ende der Funktion, woraufhin der Ablauf beendet wird. Oder man fordert einfach irgendwann keinen nächsten Wert mehr an, dann wird die Generator-Funktion auch nicht mehr weiterlaufen. In dem Beispiel oben mache ich das mit islice(). Das saugt die erste 20000 Werte und liefert sie nacheinander. Würde in der for-Schleife irgendwann ein break stehen, würde auch islice() unterbrochen. Man kann so die Kontrolle, wieviele Werte erzeugt werden sollen, komplett an den Aufrufer übergeben.

Nebenbei, die Werte zweier Variablen swappen geht in Python so:

Code: Alles auswählen

x, y = y, x
Es wird keine temporäre Variable benötigt. Wie das genau funktioniert, und warum Python-Funktionen - auch wenn es anders aussieht - immer nur einen einzigen Rückgabewert haben, steht in jedem guten Tutorial.

Ansonsten empfehle ich Learn Python The Hard Way.
In specifications, Murphy's Law supersedes Ohm's.
aviable
User
Beiträge: 19
Registriert: Montag 16. März 2015, 18:41

Post #1
aviable hat geschrieben: Hier mal ein Beispiel. in GFA-Basic

Code: Alles auswählen

'
' benzol
'
x = 1
y = 1
num = 20000
zoom = 1
xver = 350
yver = 240
a = -100
b = 1
c = 100
'
For i = 1 To num
  Plot xver + x / zoom, yver + y / zoom
  xx = y - Sgn(x) * (b + x - c) ^ 1 / 8 + (b + x + c)
  yy = a - x
  x = xx
  y = yy
Next i
Mhh, falsches Beispiel
Zeit ist zwar relativ. Trotzdem dauert es.
Es ist wesentlich einfacher, die Sachen zu machen, die man kann, als die die Sachen zu tun, die man lernt.
BlackJack

@aviable: Wieso falsches Beispiel?
aviable
User
Beiträge: 19
Registriert: Montag 16. März 2015, 18:41

Nochmals: @ funktioniert nicht, weil das Forum völlig veraltet ist.
... und der vorherige post plottet mir nicht die Benzol-Kette als Graphik aus.
in python
pillmuncher hat geschrieben:Mein Lieblings-Prolog-Programm:
Hier mal ein paar Beispiele, die zeigen, warum das die falsche Einstellung sein könnte:
Was hat das denn nu mit python zu tun ?
Prolog ist auch eine Programmiersprache. Wie ada.

pillmuncher: Villeicht tu ich dir ja auch unrecht und du wolltest mir helfen.

P.S.: mit <print ("Hello World")> geht es in den IDE's
Zuletzt geändert von aviable am Montag 16. März 2015, 21:12, insgesamt 1-mal geändert.
Zeit ist zwar relativ. Trotzdem dauert es.
Es ist wesentlich einfacher, die Sachen zu machen, die man kann, als die die Sachen zu tun, die man lernt.
BlackJack

@aviable: Doch @ funktioniert. Es ist ein Hinweis für den Leser an wen der darauf folgende Text gerichtet ist. Und das funktioniert. Denn wenn man das weglassen würde kommt es schnell zu Missverständnissen weil sich falsche Gesprächsteilnehmer angesprochen fühlen können, insbesondere wenn es zwischendurch noch ein paar Beiträge gibt die entstanden sind während man seinen Beitrag geschrieben hat.

Der entsprechende Quelltext aus pillmuncher's letztem Beitrag plottet sehr wohl das was Dein BASIC-Programm plottet wenn man `somewhere.plot()` implementiert und die Ausdrücke für `x` und `y` in den Code einsetzt.
Antworten