An alle Schüler und Studenten mit Informatikproblemen

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.
nezzcarth
User
Beiträge: 1631
Registriert: Samstag 16. April 2011, 12:47

RIN67630 hat geschrieben: Sonntag 13. Mai 2018, 03:35 Dafür ist aber Python denkbar ungeignet!
Ich finde es interessant, dass du das so siehst, denn Python ist, soweit ich weiß, ja ursprünglich als Lehrsprache gedacht gewesen, bzw.aus einer solche Sprache (ABC) hervorgegangen. Das muss jetzt zugegebenermaßen nicht heißen, dass dieses Ziel erfüllt wurde -- viele Menschen scheinen das aber schon so zu sehen. Was schon stimmt, ist, dass Python einige Dinge anders macht, als "traditionellere" Sprachen; und wenn man über viele Jahre hinweg eine bestimmte Art zu Programmieren praktiziert hat, fällt es vielleicht schwer, sich auf Python einzulassen, oder anzuerkennen, dass es anders auch geht (oder vielleicht sogar besser). Mich würde zum Beispiel (ernst gemeinte Frage) interessieren, ob du Pascal für eine bessere Lehrsprache als Python hältst; das könnte aufschlussreich sein.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

RIN67630 hat geschrieben: Montag 14. Mai 2018, 16:06 Dass Python die Daten ohne Deklaration nutzt und gar im Programmablauf verändert, macht es unglaublich schwer den Ablauf zu verstehen, da man nicht vom Code aus wissen kann, welche Struktur die Variable gerade vorweist.
Damit haben viele Probleme, die neu zu einer dynamischen Programmiersprache hinkommen; die vielen Vorteile erschließen sich zumeist langsam – und für manche sogar gar nicht. Anhand Deiner Beschreibung wage ich zu behaupten, dass das Problem nicht bei Python liegt, sondern sich vielmehr im Designentwurf des von Dir zu erweiternden Programms befindet.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

RIN67630 hat geschrieben: Montag 14. Mai 2018, 12:08 Selbst der Datentyp einer Variable ist nicht stabil.
Sobald dass man an Schnittstellen kommt, die klar definierte Inhalten verlangen, ist der Spuk vorbei.
Ja, irgendwann kracht es wenn ein falscher Typ vorliegt. Das hast du selbst bei der Standardbibliothek von Python, dass da *nicht* alles Duck-Typing-gerecht programmiert ist und stattdessen ein bestimmter Datentyp verlangt wird. Das ist unsauber, weil inkonsequent, stellt jedoch kein riesiges Problem dar.

Falls dir Typchecks sehr wichtig sind, dann könntest du dir mal das typing-Modul anschauen. Einige Anwendungsbeispiele und wie das ganze dann in der Praxis mit einem Type-Checker aussehen kann, findest du hier:
https://medium.com/@ageitgey/learn-how- ... c86d72677b

Ich würde das bei Python aber nur empfehlen, wenn mit fremden APIs kommuniziert werden muss und diese statische Typen verlangen. Man hat dann den Vorteil, dass es noch auf Python-Ebene kracht, falls kein korrekter Typ vorliegt. Und das würde ich dann auch als gesondertes Modul auslagern. Allgemein sollte man nicht dazu übergehen, alle seine Python-Programme so zu schreiben, denn dann arbeitet man gegen ein fundamentales Konzept der Sprache an.
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

RIN67630 hat geschrieben: Montag 14. Mai 2018, 12:08 Selbst der Datentyp einer Variable ist nicht stabil.
Sobald dass man an Schnittstellen kommt, die klar definierte Inhalten verlangen, ist der Spuk vorbei.
Die Aussage ist ja falsch. Jede Variable hat einen stabilen Datentyp (Python ist stark typisiert). Es kann einem also nicht wie bei PHP oder Javascript passieren, dass man plötzlich eine Zahl hat, obwohl man einen String erwartet. Was Du meinst, ist, dass nicht der Compiler sofort meckert, wenn irgendeine Vorgabe, die ein Programmierer für nötig befunden hatte, nicht eingehalten wurde. Wenn man aber nur nach Compilermeldungen programmiert, hat man zwar ein formal korrektes Programm, das aber trotzdem voller Bugs ist. Das richtige vorgehen ist so oder so, Funktionen zu schreiben, die per (Unit-)Test auf Korrektheit geprüft sind und daraus ein komplexeres Programm zusammenzusetzen. Dann ist es auch egal, ob oder wie typisiert wird, denn die gefährlichen Fehler sind nicht Typfehler sondern logische Fehler, die kein Compiler erkennen kann. Daher sind die ganzen Typangaben, die jetzt immer häufiger in Pythonprogrammen auftauchen, nur unnützer Balast, der das Lesen und Schreiben verkompliziert, ohne in realen Szenarien irgendeinen Nutzen zu haben.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Sirius3 hat geschrieben: Dienstag 15. Mai 2018, 07:22Dann ist es auch egal, ob oder wie typisiert wird, denn die gefährlichen Fehler sind nicht Typfehler sondern logische Fehler, die kein Compiler erkennen kann. Daher sind die ganzen Typangaben, die jetzt immer häufiger in Pythonprogrammen auftauchen, nur unnützer Balast, der das Lesen und Schreiben verkompliziert, ohne in realen Szenarien irgendeinen Nutzen zu haben.
Die Typangaben die man in Python jetzt haben kann oder die es in C, Java o.ä. Sprachen gibt sind größtenteils unnütz. Grundsätzlich erlauben dir aber Typsysteme eine ganze Reihe von Fehlern auszuschliessen, was dir erlaubt dich wirklich aufs wesentliche zu konzentrieren. Außerdem erlauben dir Typsysteme Dinge zu tun die sonst gar nicht möglich wären, z.b. erlaubt dir Rust durch Substructural Typing Programme zu schreiben die schnell, sparsam, fehlerfrei und sicher mit Memory umgehen, etwas dass du sobald Concurrency hinzukommt mit einem GC nicht hinbekommst.
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Meiner Meinung nach kommen wir zu einer Art Annaeherung der verschiedenen Ansaetze: dynamisch typisierte Sprachen wie Python versuchen sich die Vorteile von Typen zu eigen zu machen, und statisch typisierte Sprachen erweitern ihre Typsysteme in einer Art, dass die Benutzung einfacher und der Code generischer wird. Dinge wie concept-based polymorphy in C++ sind nix anderes als das gute alte Duck-Typing, aber schon zur compile-zeit angewandt. Ob das zum Erfolg fuehrt, wenn die Sprache nicht mit solchen Typsystemen von Beginn an entworfen wurden, ist sicherlich fraglich. Da bin ich durchaus skeptisch. Sprachen wie Rust oder Kotlin, die von vorneherein mit solchen Typsystemen entworfen werden, haben da ggf. die Nase vorn. So sei es dann halt.

Der praktischen und theoretischen (im Sinne von Wissensvermittlung) Nuetzlichkeit von Python hier und heute in Abrede zu stellen ist davon aber unabhaengig, und schlicht falsch. Aber das aus einem "es gefaellt mir nicht" ein "das ist grundsaetzlich nicht geeignet" wird, ist ja nun nix neues. Wie sollen die Kinder von heute denn gutes rumschleppen lernen, wenn ihnen das Rad die Arbeit abnimmt?
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

@DasIch: das ist dann mehr eine Frage der Implementierung. Moderne JIT-Compiler übersetzen Dir ja das dynamische Typing in ein statisches und können auch die Lebenszeit von Objekten genauer bestimmen, so dass ein GC an diesen Stellen gar nicht nötig ist (solange man keine Ringstrukturen hat, kommt ja CPython auch ohne GC aus und macht alles über Reference-Counting).
An ein paar Stellen ist Python auch zu dynamisch. Wäre der globale Namespace WORM, könnte man viele Optimierungen zur Compilezeit machen, ohne wesentliche Einschränkungen bei den Programmen zu haben (globale Variablen dieser Art gäbe es dann nicht mehr, was ein zusätzlicher Vorteil wäre)
RIN67630
User
Beiträge: 91
Registriert: Sonntag 29. April 2018, 08:07

snafu hat geschrieben: Dienstag 15. Mai 2018, 06:14 Falls dir Typchecks sehr wichtig sind, dann könntest du dir mal das typing-Modul anschauen. Einige Anwendungsbeispiele und wie das ganze dann in der Praxis mit einem Type-Checker aussehen kann, findest du hier:
https://medium.com/@ageitgey/learn-how- ... c86d72677b
Ich würde das bei Python aber nur empfehlen, wenn mit fremden APIs kommuniziert werden muss und diese statische Typen verlangen.
Das ist ja gerade mein Pech: dass ich ein fremd geschriebenes Python code, das mit allgemeine APIs kommuniziert, aber ein undokumentiertes Protokoll nutzt, erweitern will.
In so einer Situation, is es kaum möglich vom code aus, auf die Einzelheiten des Protokolls zurückzuschließen. Es ist mit dem knappen Python code beinahe unmöglich herauszufinden, was in welche Variable erwartet wird.
Hätte der Programmierer noch mindestens Kommentare hinterlassen! Das wird zu oft vernachlässigt.
Hier komme ich wieder zu meiner Mantra:
Kommentieren was man macht ist gut, dokumentieren warum man das gerade so gemacht hat ist viel besser.
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

@RIN67630: was Du hier aber brauchst, ist einfach eine API-Dokumentation. Solang Du nicht weißt, was eine Funktion macht, hilft Dir halt auch nicht viel weiter, wenn Du weißt, dass da jetzt ein String erwartet wird.
RIN67630
User
Beiträge: 91
Registriert: Sonntag 29. April 2018, 08:07

Sirius3 hat geschrieben: Dienstag 15. Mai 2018, 13:20 @RIN67630: was Du hier aber brauchst, ist einfach eine API-Dokumentation. Solang Du nicht weißt, was eine Funktion macht, hilft Dir halt auch nicht viel weiter, wenn Du weißt, dass da jetzt ein String erwartet wird.
Die gibbet es nicht öffentlich. Aber ich habe angefangen, den Spieß umzudrehen und vorerst ein Datalogger zu schreiben.
Anscheinend haben auch anderen das Problem, so dass Scapy entwickelt wurde.
Kennt jemand die Software?
https://scapy.readthedocs.io/en/latest/
Ist wiederum ein völlig neues Konzept zu lernen...
Eros
User
Beiträge: 9
Registriert: Montag 15. Februar 2021, 11:01

Leonidas hat geschrieben: Freitag 9. Juli 2004, 11:44 Ach, nutzen die Informatikstudenten Python? Ich dachte die Unis legen mehr Wert auf Java.
Moin, bin Lernender in der Schweiz. Lerne Informatik /Systemtechnik. Zu unser Ausbildung gehört nun seit neuestem auch Python. ich bin btw im 1 Lehrjahr, also noch nicht sehr erfahren. Ich kann nur sagen, wir machen schon an den Aufgaben, aber oft sind (meine) resultate halt falsch, und dann denke ich, "Nehmen wir doch gleich einen ganz neuen Code" anstelle an dem Falschen ewig lang rumzu arbeiten, bis er funktionsfähig ist.
hororizon
User
Beiträge: 1
Registriert: Samstag 17. April 2021, 12:02

Hi Neu hier. Derzeit am Python lernen. (Abgebrochener Bauingenieur)
Irgendwo am Anfang des Threads hieß es das Python nicht an Unis nicht gelehrt wird. Dazu nur Folgendes, an unserer Uni gab es einen Nebenkurs: "Python für Bauingenieure."
An diesem habe ich teilgenommen. Arbeite zurzeit, zur übung an einem Programm in Python was aus Textdateien Wörter suchen soll und daraus systematisch die wörter davor und danach in verschiedene Textdateien schreiben soll. Welche dann auch später verwendet werden. Ziel des Ganzen u.a. Orte aus einem literarischen Text (Wobei hier je nach Kontext auch Wasserfall oder Baum) ein Wort sein kann. Herausziehen und letztendlich in eine grobe Grafik eintragen. Zurzeit versuche ich aus dem Handbuch (Python von Peter Kaiser, Johannes Ernesti Das umfassende Handbuch - Aktuell zu Python 2.5) ,
auch wenn das wohl veraltet ist, das Kapitel/Modul threading zu nutzen. Hierbei wurde mir aber gesagt das Threading in Python eher ungeeignet ist. Stimmt das? Wenn ja warum? Was ist besser geeignet? (Ich wollte je Buch was durchsucht wird, einen eigenen Thread starten.)

PS: sry wegen dem Offtopic. Es ging mir eigentlich nur um die Aussage das in Unis sehr wohl Python benutzt wird.

Im Kurs damals Python 3.7 genutzt
Jetzt 3.9
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Der Thread ist von 2004. Seitdem ist Python stark gewachsen. Solche alten Aussagen sollte man also nicht all zu sehr auf die Goldwaage legen.

Und bitte eroeffne fuer deine eigentliche Frage ein neues Thema.
Benutzeravatar
__blackjack__
User
Beiträge: 12984
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@hororizon: Ein Buch zu Python 2.5 sollte man echt nicht mehr verwenden. Und auch bei neueren Ausgaben von diesem Buch, solltest Du etwas vorsichtig sein, denn das behandelt zum Beispiel die 3. Ausgabe von dem Buch, die bereits für Python 3 ist, zum Thema „Threads“ erst mal in einem eigenen Kapitel das `_thread`-Modul, Das Modul hiess in Python 2 noch `thread` und dort wurde schon seit Ewigkeiten in der Dokumentation auf das `threading`-Modul verwiesen. Der führende Unterstrich kennzeichnet das in Python 3 dann auch als Implementierungsdetail, welches man nicht verwenden sollte. Ich vermute der Verlag wollte die Seiten einfach ungern wegwerfen, was aber IMHO eine recht fragwürdige Entscheidung ist/war. Also nicht das `thread`/`_thread`-Modul verwenden, auch wenn das in einem Buch beschrieben wird!

In CPython gibt ein „global interpreter lock“ (GIL), welches dafür sorgt, dass immer nur ein Thead zur gleichen Zeit Python-Bytecode ausführen kann. Wenn ein Thread in einem blockierenden Systemaufruf steckt, oder Code einer in C geschriebenen Erweiterung ausgeführt wird, die das GIL freigibt, kann aber durchaus auch Code parallel ausgeführt werden.

Wenn man tatsächliche Paralellität braucht, dann geht das mit mehreren Prozessen. Dafür gibt es das `multiprozessing`-Modul. Ich würde aber erst schauen ob man mit `concurrent.futures` etwas anfangen kann. Die API ist auf höherer Ebene und man kann sich da zwischen Threads und Prozessen entscheiden.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
kalenderfamily
User
Beiträge: 23
Registriert: Freitag 18. Juni 2021, 12:30

Eros hat geschrieben: Montag 15. Februar 2021, 11:44
Leonidas hat geschrieben: Freitag 9. Juli 2004, 11:44 Ach, nutzen die Informatikstudenten Python? Ich dachte die Unis legen mehr Wert auf Java.
Moin, bin Lernender in der Schweiz. Lerne Informatik /Systemtechnik. Zu unser Ausbildung gehört nun seit neuestem auch Python. ich bin btw im 1 Lehrjahr, also noch nicht sehr erfahren. Ich kann nur sagen, wir machen schon an den Aufgaben, aber oft sind (meine) resultate halt falsch, und dann denke ich, "Nehmen wir doch gleich einen ganz neuen Code" anstelle an dem Falschen ewig lang rumzu arbeiten, bis er funktionsfähig ist.
Grüzi, ich bin Lehrender in D, darf ich mal fragen, mit was ihr arbeitet? Ich habe gesehen, dass die Schweiz und Österreich in vielen Dingen schon sehr weit sind, es gibt gutes Onlinematerial, manchmal auch echt viel! Gerne PM, Grüße
Vadym
User
Beiträge: 7
Registriert: Sonntag 30. Mai 2021, 18:53

Guten Tag, ich habe eine Aufgabe bekommen, aber alleine leider schaffe ich nicht. Kann mir jemand Helfen bitte.

Erstellen Sie eine Funktion, die eine ganze Zahl als Eingabeparameter bekommt und feststellt, ob

die Zahl kleiner Null ist (Rückgabewert 0)
einstellig ist (Rückgabewert 1)
zweistellig ist (Rückgabewert 2)
dreistellig ist (Rückgabewerte 3)
vierstellig und größer ist (Rückgabewerte 99)

Verwenden Sie keine Schleife in Ihrem Programm und nur eine return-Anweisung.

def klassen(zahl):

return n
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bitte stell deine Frage nicht in einem Thema, das sich der Diskussion *wie* hier mit Hausaufgaben umgegangen wird. Sonder stell die Frage bitte in einem eigenen Thema.
narpfel
User
Beiträge: 643
Registriert: Freitag 20. Oktober 2017, 16:10

@Vadym:

Code: Alles auswählen

λ» let
 | klassen n
 |   | n < 0 = 0
 |   | n < 10 = 1
 |   | n < 100 = 2
 |   | n < 1000 = 3
 |   | otherwise = return 99 !! 0
 |
klassen :: (Ord a, Num a, Num p) => a -> p
λ» klassen 42
2
λ» klassen (-123)
0
λ» klassen 1337
99
Und lies am besten nochmal den ersten Beitrag hier im Thread. :)

Und wenn du deine Frage in einem eigenen Thread stellst, dann schreibe bitte auch deinen Ansatz und wo konkret du Probleme mit der Aufgabenstellung hast.
Vadym
User
Beiträge: 7
Registriert: Sonntag 30. Mai 2021, 18:53

Ok.Danke.Die Aufgabe habe ich auch so wie Sie gelöst.
Vadym
User
Beiträge: 7
Registriert: Sonntag 30. Mai 2021, 18:53

Jetzt habe ich wieder Schwierigkeiten :shock:
Antworten