Turtle in Pycharm

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
Nahuta
User
Beiträge: 6
Registriert: Samstag 18. Juni 2022, 00:33

Moin zusammen,

ich bin neu in dem Forum und auch noch recht neu in der Programmierung, was Python angeht, Hobbyist, kein Student in dem Bereich.
Ich nutze Linux Mint.

Ich habe gleich 2 Anliegen:
1. Was könnt ihr als Programmierumgebung empfehlen?
Ich hatte zu Anfang Atom probiert, hatte aber das Problem, dass der Befehl input da nicht funktionierte und habe mich anderweitig umgesehen. Nun nutze ich Pycharm, bin soweit damit zufrieden. Allerdings habe ich damit den Fehler bei 2.

2. Ich habe einen simplen Code bei Pycharm eingegeben:

Code: Alles auswählen

import turtle
t = turtle.pen()
t.forward(200)
Darauf bekomme ich folgende Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "/mnt/Sophie/tools/Python/Malen/main.py", line 19, in <module>
    t = turtle.pen()
AttributeError: module 'turtle' has no attribute 'pen'
Ich habe schon nach Ursachen gesucht. Meist soll die Lösung sein, die Datei von turtle.py in einen anderen Namen umzunennen. Das bringt bei mir aber nichts.
Um turtle in Pycharm zu nutzen, musste ich es erst über "Python Packages" im Programm installieren. Das finde ich etwas umständlich.
Hat jemand eine Idee, was ich falsch mache?
Es müsste eigentlich ein Fehler von Pycharm sein. Denn wenn ich die Befehle über die IDLE shell nacheinander eingebe, funktioniert es.

(Übrigens: Der Link zu den Regeln unter dem Thread "Vor dem Posten lesen" ist übrigens tot. Die alte Regelversion funzt aber noch.)
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Was ist denn das Ergebnis von

import turtle
print(turtle)

?
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

und t.forward(200) wird nicht funktionieren

https://docs.python.org/3/library/turtle.html
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Nahuta: Ergänzend zu ThomasL: Gross-/Kleinschreibung spielt in Python eine Rolle.

Wofür steht denn eigentlich das `t`? Ist eine komische Abkürzung für ein `Pen`-Objekt. Insgesamt sollte man sich kryptische Abkürzungen bei Namen gar nicht erst angewöhnen. Einbuchstabige Namen gehen für ganze Zahlen bei Laufvariablen, wie `i`, `j` und `k`; oder bei Koordinaten `x`, `y`, und `z`, aber ansonsten reicht ein Buchstabe nur sehr selten aus um dem Leser zu vermitteln was der Wert dahinter bedeutet.

Also im vorliegenden Fall wäre ein passender Name `pen` statt `t`.

Das `turtle`-Modul gehört zur Standardbibliothek von Python, das muss man nicht über `pip` installieren. Es kann sein, dass die Linux-Distribution das einzeln paketiert, dann sollte man das aber darüber installieren und nicht aus dem Python Package Index. *Das* könnte vielleicht sogar das Problem sein, weil es dort ein Turtle-Package gibt das überhaupt nichts mit Turtle-Grafik zu tun hat, sondern mit Netzwerkprogrammierung.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Nahuta
User
Beiträge: 6
Registriert: Samstag 18. Juni 2022, 00:33

Was ist denn das Ergebnis von
import turtle
print(turtle)

Code: Alles auswählen

<module 'turtle' from '/mnt/Sophie/tools/Python/neues/venv/lib/python3.9/site-packages/turtle/__init__.py'>
und t.forward(200) wird nicht funktionieren
Das habe ich auch gemerkt. Aber auch turtle.pen() funktioniert nicht, turtle.forward(...) auch nicht, wenigstens nicht in Pycharm.

In IDLE funktioniert das Belegen einer Variable mit z.B. stift=turtle.pen().
Wen ich danach stift.forward (100) usw. probiere bekomme ich nur:

Code: Alles auswählen

Traceback (most recent call last):
  File "/usr/lib/python3.9/idlelib/run.py", line 559, in runcode
    exec(code, self.locals)
  File "<pyshell#7>", line 1, in <module>
AttributeError: 'dict' object has no attribute 'forward'
Wenn ich in IDLE erst import turtle und dann turtle.forward(100) eingebe, funktioniert das. Danach wiederum ein turtle.right() ergibt einen Fehler:

Code: Alles auswählen

Traceback (most recent call last):
  File "/usr/lib/python3.9/idlelib/run.py", line 559, in runcode
    exec(code, self.locals)
  File "<pyshell#2>", line 1, in <module>
  File "<string>", line 5, in right
In Pycharm funktioniert das Belegen einer Variable mit z.B. stift=turtle.pen() nicht (-> AttributeError: module 'turtle' has no attribute 'pen').
Auch ein
import turtle
turtle.forward(200)
, was in IDLE funktionierte, funktioniert hier nicht, sondern ergibt folgenden Fehler:

Code: Alles auswählen

Traceback (most recent call last):
  File "/mnt/Sophie/tools/Python/neues/main.py", line 20, in <module>
    turtle.forward(200)
AttributeError: module 'turtle' has no attribute 'forward'
Generell arbeite ich schon mit nachvollziebaren Namen als Variablen. Aktuell versuche ich einem Buch (Python kinderleicht! - von Jason Briggs) zu folgen. In dem stehen die Befehle aus meinem 1. Posting so drin. So wird beschrieben, dass man quasi den Stiften eine Variable gibt, mit denen man arbeitet, ggf. auch mehreren. Hier war es dann das etwas kryptische t.
Mache ich etwas grundliegend falsch? Ist das Buch ggf. auf ein eine alte Pythonversion bezogen und die Befehle haben sich geändert? Das Buch ist von 2013.
Aber auch die Alternativen von Anleitungen aus dem Netz, die eine Variable mit stift=turtle.Turtle() belegen oder eben einfach mit turtle.right() arbeiten, ohne spezifische Variablen als Stifte zu definieren, funktionieren nicht. Ich bin etwas ratlos.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Dass `turtle.pen` ein Wörterbuch zurückliefert und dass Wörterbücher keine Methode `forward` steht alles so in der Dokumentation: https://docs.python.org/3/library/turtl ... turtle.pen

Und unter PyCharm hast Du irgendein `turtle`-Paket installiert, warum auch immer das so heißt wie etwas aus der Standardbibliothek. Einfach nicht in Deinem venv installieren.
Nahuta
User
Beiträge: 6
Registriert: Samstag 18. Juni 2022, 00:33

Also, wenn ich unter pycharm nichts weiter installiere, bekomme ich schon eine Fehlermeldung, wenn ich import turtle schreibe. Also einfach lassen scheint keine Alternative.

Ich habe jetzt pycharm auch einmal auf einem Windowssystem installiert. Da funktionierte folgendes Programm auf Anhieb:

Code: Alles auswählen

from turtle import *

fd(150)
bk(150)
lt(10)
fd(150)
bk(150)
Auf meinem Linuxsystem funktioniert es aber nicht. Also irgendetwas scheint hier falsch zu sein, nicht komplett installiert oder was auch immer.
In IDLE funktioniert es aber in meinem System.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn es in IDLE unter Linux funktioniert, dann ist das ein Problem von Pycharm. Das legt AFAIK ein virtuellen Environment fuer dein Projekt an. Das musst du ggf. wegwerfen und neu machen, so dass es auch die sogenannten "site-packages" enthaelt. Das ist fuer Pycharm bestimmt alles ergoogelbar.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Das Problem mit solchen Monster-IDEs wie PyCharm ist, dass sie sehr viel im Hintergrund machen, so dass man eine lange Einarbeitungszeit allein für die IDE braucht. Da hast Du beim Einrichten Deines Projekts aus irgendeinem Grund ein Paket installiert, das auch `turtle` heißt, aber nichts mit dem `turtle` aus der Standardbibliothek zu tun hat. Deswegen mein Hinweis, ein neues Projekt zu starten und einfach kein `turtle`-Paket installieren.

Ich persönlich halte nichts von großen IDEs und auch IDLE ist für Anfänger nicht wirklich geeignet und Fortgeschrittene nervt es einfach nur. Schreibe Deine Programme mit einem guten einfachen Editor und führe Programme auf der Konsole aus.
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Eine weitere Vermutung wäre noch, dass es sich ursprünglich gar nicht um eine Fehlermeldung von Python handelte, sondern das PyCharm einfach nur behauptet bestimmte Sachen aus dem `turtle`-Modul gäbe es nicht. Macht `pylint` nämlich auch, weil `turtle` beim Importieren so einiges an ”Funktionen” dynamisch definiert, und eine statische Codeanalyse das natürlich nicht sieht.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@__blackjack__: der entscheidende Hinweis ist hier:
Nahuta hat geschrieben: Dienstag 21. Juni 2022, 12:54
Was ist denn das Ergebnis von
import turtle
print(turtle)

Code: Alles auswählen

<module 'turtle' from '/mnt/Sophie/tools/Python/neues/venv/lib/python3.9/site-packages/turtle/__init__.py'>
Es existiert also ein Paket `turtle` unter site-packages, wäre es das turtle aus der Standardbibliothek, würde es nicht unter site-packages liegen und wäre ein `turtle.py`.
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Sirius3: Ich weiss aber die ursprüngliche Beschreibung war ja PyCharm hat Fehler gezeigt und *dann* wurde das `turtle`-HTTP-Proxy-Modul installiert. Ich bezog mich auf die Fehlermeldungen vor dem installieren vom falschen `turtle`-Modul, von denen wir nicht wissen wie die genau lauteten und ob das nicht einfach nur das „statische Analyse von dynamischen Programmiersprachen hat Grenzen“-Problem war.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Nahuta
User
Beiträge: 6
Registriert: Samstag 18. Juni 2022, 00:33

Ein neues Projekt in Pycharm hatte ich auch schon einmal angelegt, hatte nicht wirklich geholfen.
Ich habe jetzt noch einmal ein neues angelegt und
import turtle
print(turtle)
eingegeben:

Code: Alles auswählen

Traceback (most recent call last):
  File "/mnt/Sophie/tools/Python/undwiederneu/main.py", line 18, in <module>
    import turtle
ModuleNotFoundError: No module named 'turtle'
Ich komme so also nicht einmal zu print(turtle). Aber ihr habt wohl Recht, das interne Installieren in Pycharm unter python packages ist wohl auch nicht die Lösung.
Eine weitere Vermutung wäre noch, dass es sich ursprünglich gar nicht um eine Fehlermeldung von Python handelte, sondern das PyCharm einfach nur behauptet bestimmte Sachen aus dem `turtle`-Modul gäbe es nicht. Macht `pylint` nämlich auch, weil `turtle` beim Importieren so einiges an ”Funktionen” dynamisch definiert, und eine statische Codeanalyse das natürlich nicht sieht.
Das nehme ich auch langsam an oder mindestens, dass Pycharm scheinbar nicht auf alle Funktionen Zugriff hat. Das ist für so ein Programm schon etwas peinlich, finde ich.
Das Problem mit solchen Monster-IDEs wie PyCharm ist, dass sie sehr viel im Hintergrund machen, so dass man eine lange Einarbeitungszeit allein für die IDE braucht. Da hast Du beim Einrichten Deines Projekts aus irgendeinem Grund ein Paket installiert, das auch `turtle` heißt, aber nichts mit dem `turtle` aus der Standardbibliothek zu tun hat. Deswegen mein Hinweis, ein neues Projekt zu starten und einfach kein `turtle`-Paket installieren.

Ich persönlich halte nichts von großen IDEs und auch IDLE ist für Anfänger nicht wirklich geeignet und Fortgeschrittene nervt es einfach nur. Schreibe Deine Programme mit einem guten einfachen Editor und führe Programme auf der Konsole aus.
Das werde ich mir glaube ich mal durch den Kopf gehen lassen.
Ich verstehe immer noch nicht, was ich in PyCharm ändern kann, um das zu ändern.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich hab’s schonmal vorgeschlagen: PyCharm benutzt ein virtualenv. Und die kann man (inzwischen ist das AFAIK der default) OHNE Site-packages anlegen. Wenn das der Fall ist, musst du rausfinden, wie du das mit den site packages anlegst.

https://www.jetbrains.com/help/pycharm/ ... nment.html
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@__deets__: Aber `turtle` hat doch nix mit site-packages zu tun, das ist Teil der Standardbibliothek‽

Code: Alles auswählen

In [41]: import turtle                                                          

In [42]: turtle                                                                 
Out[42]: <module 'turtle' from '/usr/lib/python3.7/turtle.py'>
Wenn das nicht da ist, dann ist fällt das IMHO in die Verantwortung der Linux-Distribution, oder wo auch immer das Python her kommt, das in dem Projekt verwendet wird.

@Nahuta: Was daran peinlich das statische Analysen von Quelltext von dynamischen Programmiersprachen Grenzen haben? Das ist normal und erwartbar. Insbesondere wenn Funktionen zur Laufzeit erst erzeugt werden und es keinen Quelltext dafür gibt. Siehe die „File:“-Angabe:

Code: Alles auswählen

In [44]: turtle.forward?                                                        
Signature: turtle.forward(distance)
Docstring:
Move the turtle forward by the specified distance.

Aliases: forward | fd

Argument:
distance -- a number (integer or float)

Move the turtle forward by the specified distance, in the direction
the turtle is headed.

Example:
>>> position()
(0.00, 0.00)
>>> forward(25)
>>> position()
(25.00,0.00)
>>> forward(-75)
>>> position()
(-50.00,0.00)
File:      Dynamically generated function. No source code available.
Type:      function
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

@__blackjack__: wo du recht hast.. ich habe da wohl etwas den Überblick verloren, was darin genau lebt 🤦‍♂️
Antworten