Problem beim Python lernen

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.
Mr.White
User
Beiträge: 46
Registriert: Samstag 7. März 2015, 20:03

Hey,

Ich habe bereits ein Thema erstellt.
Ich komme aber gar nicht auf den Inhalt von meinem scheiß Python Buch klar.
Ich verstehe NIX von dem was dort geschrieben steht und das macht mich einfach nur
kaputt im Kopf. Ich habe den willen und die English kentnisse die man für das Programmieren braucht,
aber dort steht einfach alles so, dass man nichts versteht.

Mir fallen keine Projekte zum üben ein, weil im Buch nur alle 20 Seiten vielleicht mal 2 Aufgaben sind.


Helft mir bitte...
BlackJack

@Mr.White: Was ist denn mit Learn Python The Hard Way? Das ist explizit für absolute Anfänger und besteht ja fast nur aus Übungen.
Mr.White
User
Beiträge: 46
Registriert: Samstag 7. März 2015, 20:03

Ja, aber ich will jetzt auch nicht wieder von vorne alles durchkauen..
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Ja schade, dann musst du wohl aufhören mit Python ;-) Mal ernsthaft: Wenn du mit dem Inhalt des anderen Buchs nicht zurechtkommst, dann wirst du schon nicht so viel doppelt lernen. Wahrscheinlich hast du die Hälfte davon auch schon wieder vergessen und ein Teil des neuen Buchs wird zusätzliche Informationen bieten. Steh das durch und gut ist. Du verlierst doch keine Jahre dadurch.
Das Leben ist wie ein Tennisball.
BlackJack

@Mr.White: Wie sieht es mit Seiten wie Project Euler, Sphere Online Judge (SPOJ), HP CodeWars, oder Reddit: Dailyprogrammer aus, für Übungen oder kleine Projekte?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

BlackJack hat geschrieben:@Mr.White: Was ist denn mit Learn Python The Hard Way? Das ist explizit für absolute Anfänger und besteht ja fast nur aus Übungen.
Das haben wir ihm doch schon unlängst empfohlen ;-)

@Mr.White: Du brauchst schon eine Menge Leidensfähigkeit beim Programmieren lernen - und das kann man nur ertragen, wenn man auch genügend Motivation mitbringt. Du hast doch offenbar den Antrieb, Programmieren zu lernen. Also, gib nicht nach so kurzer Zeit auf! Und kleinere Projekte gibt es doch zu Hauf: Die üblichen Verdächtigen sind so Dinge wie Zahlenraten, TicTacToe, Quizspiele a la Wer wird Millionär usw. Auch kleinere mathematische Dinge wie einen pq-Formel Löser o.ä. kann man mit recht einfachen Sprachmitteln schon selber machen.

Du kannst ja auch mal hier im Forum im Showcase und Snippet Forum mal suchen, was da andere Leute an Ideen hatten.

Ansonsten bleibt immer noch irgend etwas, was Du für ein anderes Hobby von Dir gebrauchen kannst. Wenn Du Sport betreibst, kannt Du versuchen, Deine Spielergebnisse zu verwalten und dann Dinge wie Sieg- und Niederlagequoten ausrechnen, Deine Lego-, Warhammer-, Comicbuch oder sonstige Sammlung zu verwalten, oder oder oder... man muss nur mit offenen Augen durch die Welt gehen :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
garreth
User
Beiträge: 41
Registriert: Donnerstag 23. Oktober 2014, 12:04

Hallo Mr. White,

ich habe das selbe Buch und bin jetzt irgendwo im hinteren Drittel und muss sagen, dass dein Problem wahrscheinlich nicht am Buch liegt. Die Kritik hier am Buch ist wohl berechtigt, manchmal findet man darin fehlerhafte Sachen. Ab und zu würde ich mir wünschen, dass auf Probleme genauer eingegangen wird und Feinheiten besser erklärt werden.
Am Buch alleine kann deine Misere nicht liegen. Eher kann ich mir vorstellen, dass dein Problem vielleicht Kapitel sein könnten, die du nur überflogen oder gar ganz ausgelassen hast. Das Buch baut Kapitel für Kapitel aufeinander auf und ohne den Inhalt des vorherigen Kapitel zu verstehen, wirst du dir im nächsten schwerer tun und so weiter.
Wenn man was nicht versteht, muss man sich fragen, was man nicht versteht und dann auch mal zurück blättern und das bereits erledigte Kapitel nochmals durcharbeiten.

Gruß
garreth
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

garreth hat geschrieben: ich habe dasselbe Buch...
Hui... und dann kommuniziert ihr lieber über das Forum statt am Küchentisch? :twisted:

SCNR
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@Hyperion: Ich glaube daran sieht man das wir keine so jungen Hüpfer mehr sind: Das selbe und das gleiche sind laut Duden jetzt schon eine ganze zeitlang das selbe. Oder das gleiche. Kann man sich aussuchen. Und da werde *ich* dann auch so ein bisschen zu so einem Sprachverfallsmeckerer, denn gerade beim Programmieren war dieser Unterschied so schön übertragbar auf ``is`` vs. ``==``. :-(
karolus
User
Beiträge: 144
Registriert: Samstag 22. August 2009, 22:34

Hyperion hat geschrieben:
garreth hat geschrieben: ich habe dasselbe Buch...
Hui... und dann kommuniziert ihr lieber über das Forum statt am Küchentisch? :twisted:

SCNR
@Mr White:
Überleg dir das nochmal mit dem Programmieren lernen, die Leute tendieren zur semantischen Haarspalterei ... :!:

Karolus
BlackJack

@karolus: Nicht zuletzt auch deswegen weil das beim Programmieren dann oft nicht mehr so nebensächlich ist ob man nur mit zwei wertgleichen Objekten etwas macht, oder ob man tatsächlich zwei Verweise auf das selbe Objekt hat. Wenn man über solche Sachen dann in Beiträgen diskutiert, zum Beispiel um über einen Fehler zu reden, zahlt sich sprachliche Präzision auch aus, sonst kann man zig Beiträge lang munter aneinander vorbeireden ohne das beide Seiten sich dessen bewusst sind. :-)
nezzcarth
User
Beiträge: 1734
Registriert: Samstag 16. April 2011, 12:47

BlackJack hat geschrieben:@Hyperion: Ich glaube daran sieht man das wir keine so jungen Hüpfer mehr sind: Das selbe und das gleiche sind laut Duden jetzt schon eine ganze zeitlang das selbe. Oder das gleiche. Kann man sich aussuchen. Und da werde *ich* dann auch so ein bisschen zu so einem Sprachverfallsmeckerer, denn gerade beim Programmieren war dieser Unterschied so schön übertragbar auf ``is`` vs. ``==``. :-(
Nach meiner Ansicht ist das allerdings kein Sprachwandelphänomen, sondern liegt in der Natur der Sache. Dass es sich semantisch um zwei verschiedene Dinge handelt, ist eher Ergebnis einer logischen Reflexion. Die Bedeutung sprachlicher Elemente entsteht aber nicht durch Reflexion, sondern durch Gebrauch. Für viele Leute sind dasselbe und das Gleiche nunmal dasselbe -- und das dürfte auch vor 100 Jahren nicht anders gewesen sein.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

nezzcarth hat geschrieben:sondern liegt in der Natur der Sache.
Quantenmechanisch gibt's den Unterschied auch gar nicht, wenn zwei Dinge ganz und gar gleich sind, dann sind sie das selbe Dinge, aber eben zwei mal.
a fool with a tool is still a fool, www.magben.de, YouTube
garreth
User
Beiträge: 41
Registriert: Donnerstag 23. Oktober 2014, 12:04

Wir haben natürlich das gleiche Buch. http://www.selbe-gleiche.de/
So langsam drängt sich mir das Gefühl auf, dass mein windiger Realschulabschluss mir nicht das nötige Wissen vermitteln konnte, um hier mitreden zu dürfen.

dasselbe wird übrigens zusammengeschrieben.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

garreth hat geschrieben:So langsam drängt sich mir das Gefühl auf, dass mein windiger Realschulabschluss mir nicht das nötige Wissen vermitteln konnte, um hier mitreden zu dürfen.
Das ist quatsch. Die Fähigkeit dem Problem mit einer Offtopic Diskussion auszuweichen wird zwar an der Uni geübt, ist aber sehr leicht erlernbar.
garreth hat geschrieben:dasselbe wird übrigens zusammengeschrieben.
Das ist doch schon ein vielversprechender Anfang.
a fool with a tool is still a fool, www.magben.de, YouTube
Benutzeravatar
noisefloor
User
Beiträge: 4149
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@Mr. White: nur die Praxis bringt's. Also: programmier' was. Irgendwas, was _du_ gebrauchen kannst - auch, wenn es niemand sonst auf der Welt braucht. Aber wenn _du_ es brauchst hast du (hoffentlich) die Motivation, das Projekt auch zum Laufen zu bringen. Mit reinem Lesen ohne in die Tasten zu hauen kommst du nicht weit.

Gruß, noisefloor

P.S.: Könnte man den eine Kopie desselben Buchs haben? Und was ist, wenn man eine Kopie des gleichen Buchs hat? Hat man dann 2x das gleiche Buch? Oder 1x dasselbe und 1x das gleiche? :twisted:
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

noisefloor hat geschrieben:P.S.: Könnte man den eine Kopie desselben Buchs haben? Und was ist, wenn man eine Kopie des gleichen Buchs hat? Hat man dann 2x das gleiche Buch? Oder 1x dasselbe und 1x das gleiche? :twisted:
Das kommt wohl auf den Kontext drauf an. Ich würde behaupten, dass zwei Personen eine Kopie desselben Buchs haben können, da "Buch" dann nicht mir als physisches Objekt verstanden wird, sondern als logische Einheit. Also dasselbe Buch, gedruckt in zwei gleichen Kopien.
Das Leben ist wie ein Tennisball.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Hach ja... wohl im Gegensatz zu manch anderem, *liebe* ich solche Offtopic Diskussionen :)

Und BlackJack hat ja auch schön die Brücke zur Präszision beim Programmieren geschlagen - weswegen es Relevanz hat! 8)

@Karolus: Es ist ja nicht so, als wären hier nich *vorher* schon gute Ideen und Hinweise gegeben worden :!:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
garreth
User
Beiträge: 41
Registriert: Donnerstag 23. Oktober 2014, 12:04

@MagBen: Danke für den guten Zuspruch.

Nur um kurz das Problem mit dem Unterschied zwischen "==" und einem "is" ausformuliert zu haben.
Der Ausdruck "==" prüft ob der Wert zweier Objekte gleich ist, während "is" prüft ob zwei Referenzen auf das selbe Objekt verweisen. Leider führen die Bücher für Anfänger, zumindest jene die ich gelesen habe, gar nicht genauer aus, was der Unterschied zwischen Referenzen und Objekten ist. Oftmals stoße ich auch hier auf Probleme die mit dieser Thematik zu tun haben.

Beispiel 1:

Code: Alles auswählen

a = 1
b = 1
print('a == b:', a == b) # True
print('a is b:', a is b) # True
Als Ausgabe erhalten wir ausschließlich "True". Man könnte nun ohne weiteres Wissen vermuten, dass "is" das Gleiche wie "==" ist.

Um nun den Unterschied zu verdeutlichen machen wir das selbe Spiel mit einer Liste: (Beispiel 2)

Code: Alles auswählen

a = [1]
b = [1]
print('a == b:', a == b) # True
print('a is b:', a is b) # False
Jetzt erhalten wir plötzlich bei "a is b" ein False obwohl beide Listen identisch erstellt wurden und auch den gleichen Wert besitzen("==" ist "True").

Was ist nun schief gelaufen? Die Antwort ist relativ einfach, wenn man das Prinzip einmal verstanden hat. Der Interpreter schreibt den gespeicherten Wert(im ersten Beispiel "1") in den Arbeitsspeicher. Dieser Wert heißt Objekt und wird komplett vom Python Interpreter verwaltet. Für uns erstellt der Interpreter eine Referenz auf die wir mit seinem Namen('a', 'b') in unserem Skript zugreifen können. In dieser Referenz wird aber lediglich die Adresse des, vom Interpreter im Arbeitsspeicher abgelegten, Objektes gespeichert.

So warum verweisen nun die beiden Referenzen "a" und "b" im ersten Beispiel auf das selbe Objekt und im zweiten nicht. Die Antwort liegt auch hier wieder beim Interpreter. Dieser entscheidet selber ob er ein neues Objekt in den Arbeitsspeicher schreibt oder ob er lediglich ein bestehendes Objekt neu referenziert. Einfache Datentypen wie Integer, Double oder auch Strings werden meistens nur neu referenziert. Für kompliziertere Datentypen wie Listen oder Dictionarys wird meines Wissens nach immer ein neues Objekt angelegt.

Übrigens bin ich hier auch schon über Fehler gestolpert, die ursprünglich auf dieser Thematik basieren. Hier ein kleines Beispiel:

Code: Alles auswählen

a = [1]
b = a
b.append(2)
print('a:', a)
print('b:', b)
print('a is b:', a is b)
Mit "b = a" wird keine Kopie der vorhanden Liste erstellt, sondern nur die die Liste a neu referenziert. Wenn man es darstellen müsste könnte man es "b = a = [1]" schreiben. Was so nicht korrekt wäre, weil man a neu referenzieren kann und "b=[1]" trotzdem noch gültig wäre und nicht das neue Objekt von a referenzieren würde. Faktisch ist dann "b.append(2)" gleich "b = a = [1].append(2)" mit der im Vorsatz beschriebenen Ausnahme. Um eine Kopie des Objektes zu erstellen, muss man die dazugehörige Funktion aufrufen. Erst dann kann man mit einer neuen Liste weiterarbeiten.

Um auch ein Beispiel aus den Lehrbüchern angebracht zu haben:

Code: Alles auswählen

a = 1
del(a)
print(a) # Exception NameError
Viele Lehrbücher tun so als ob man mit der Funktion "del()" das Objekt gelöscht hat. Dem ist aber nicht so, man hat lediglich die Referenz auf das Objekt gelöscht. Das Objekt kann weiterhin im Arbeitsspeicher liegen.

Als keines Beispiel für dieses Verhalten eine Neureferenzierung einer Liste:

Code: Alles auswählen

a = [1, 2, 3]
b = a
print('a is b:', a is b) # True
del(a)
print(b)
Hier sieht man "a" und "b" verweisen auf das selbe Objekt wir löschen mittels "del()" die Referenz "a". Das Objekt verbleibt aber weiterhin im Arbeitsspeicher.

Wer vielleicht schon etwas Python kann und sich mit diesem Thema intensiver auseinander setzen will, dem empfehle ich einen Ausflug in zu C da man sich hier um die Typen der Variablen und deren Speicherung größtenteils selber kümmern muss. Stichwort: Zeiger.

Somit ist "is" und "==" nicht das Gleiche. Mir war der Unterschied zwischen "dasselbe" und "das Gleiche" genauso unbewusst wie so manchem Anweder der Unterschied zwischen "==" und "is".
Wenigstens habe ich diesmal genügend Angriffsfläche in meinen Erörterungen zu Python geboten, so dass wir uns nicht weiter mit den Feinheiten der deutschen Sprache beschäftigen müssen, sondern das tun, was wir hier alle tun wollen. Etwas über Python lernen.
BlackJack

@garreth: Mit der Referenz so wie Du sie beschreibst bringst Du aber nun Interna mit ins Spiel die nicht Python als Sprache sondern die Implementierung von Python betreffen. Das eine Zuweisung wie ``a = 42`` die 42 im Speicher ablegt und für das `a` dann eine Adresse von dieser Speicherstelle vermerkt wird, stimmt zwar im groben bei CPython (im Moment), das ist so aber nicht garantiert. Ich würde an der Stelle mit einem abstrakteren Modell operieren und sagen das man ein Objekt mit dem Wert 42 hat und dort einen Zettel mit dem Namen `a` drauf klebt. Und man kann beliebig viele Zettelchen mit Namen auf das selbe Objekt kleben. ``b = a`` heisst dann „klebe einen Zettel mit `b` auf das selbe Objekt auf dem schon der Zettel mit `a` klebt.”

Beispiel für eine Alternative zu den Referenzen auf Speicherstellen wären Implementierungen die bestimmte Werte direkt im Zeiger speichern. Zum Beispiel ganze Zahlen um ein Bit nach links verschoben und mit dem niederwertigsten Bit gesetzt. Die kann man von echten Zeigern unterscheiden wenn diese auf gerade Adressen ausgerichtet sind weil dann eine Adresse immer ein gelöschtes niederwertigstes Bit hat. Das ausrichten von Adressen auf Zweierpotenzen ist bei vielen Plattformen üblich und bei einigen sogar von der Hardware vorgegeben. Ich glaube der Lua-Interpreter macht das oder hat das mal gemacht.

Ob Du beim ersten Beispiel `True` oder `False` erhältst ist ein Implementierungsdetail. Es kann also durchaus sein, dass dort jemand `False` als Ergebnis bekommt. Nehmen wir mal eine andere Zahl:

Code: Alles auswählen

In [14]: a = 4711

In [15]: b = 4711

In [16]: a is b
Out[16]: False
Wenn die beiden Zuweisungen in einem Skript stehen und beide sozusagen ”gleichzeitig” vom Compiler gesehen werden können, kann es dann allerdings auch wieder sein das `True` heraus kommt. Muss aber nicht.

Das was Du da ”einfach” und ”kompliziert” nennst ist eher ”unveränderbar” und ”veränderbar”. Denn eigentlich müsste der Interpreter immer neue Objekte anlegen, das heisst Programme müssen sich so verhalten als wenn immer neue angelegt würden. Bei unveränderbaren Objekten kann der Interpreter dann aber entscheiden ein wertgleiches, bereits vorhandenes Objekt wiederzuverwenden. Da man es nicht verändern kann, merkt keiner den Unterschied. Ausser er schaut mit ``is`` nach oder vergleicht `id()`-Werte.
Antworten