Bin ich zu dumm zum programmieren?

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.
hannibalbarkas
User
Beiträge: 2
Registriert: Montag 20. August 2007, 14:53

Bin ich zu dumm zum programmieren?

Beitragvon hannibalbarkas » Montag 20. August 2007, 15:51

Hallo Leute!
Schon seit langer Zeit versuche ich das programmieren zu erlernen. Seit einigen Monaten habe ich jetzt Python entdeckt und versuche es zu erlernen.

Ich habe bereits einige Tutorials durchgearbeitet, am besten davon fand ich noch "A byte of Python".

Jetzt weiss ich zwar wie man Module importiert, was Schleifen sind. Dictionaries, Tubel und Listen sind mir auch ein Begriff genauso wie all die anderen Grundlegenden Sachen die in den Tutorials behandelt werden.

Aber programmieren kann ich immer noch nicht!

Woran liegt das aber? Nun, ich habe bemerkt, dass die meisten Turotials zwar alle diese Dinge wie Schleifen usw gut erklären aber kein Tutorial bringt einem wirklich programmieren bei.

Ich saß also lange Zeit herum und überlegte wie ich mein erlerntes Wissen nun anwenden kann und dabei bin ich dann auf ein Forum mit Programmieraufgaben gestoßen:

http://www.hackerboard.de/board.php?boardid=46

Ich habe mir dort eine Aufgabe für Anfänger raussucht die folgendermaßen lautet:

Zwei Spieler sitzen sich gegenüber, in diesem Fall ist einer der PC. Es gibt einen Revolver mit sechs Kugelschächten (ich weiß nicht wie man das wirklich nennt). In einem der sechs Schächte befindet sich eine Kugel. Der Revolver wird nun immer ausgetauscht. Wenn man den Revolver bekommt, kann man entweder sofort schießen (natürlich auf sich selbst *g*) oder man dreht das Magazin einmal durch und schießt dann. Natürlich weiß man im Moment des "Abdrückens" nicht, ob sich im aktuellen Schacht nun eine Kugel befindet oder nicht. Das geht dann also solang bis einer nicht mehr lebt. Der hat dann auch verloren.

Daraufhin habe ich überlegt und überlegt aber bis auf die Idee, dass man dort das Modul random importieren muss ist mir nicht mal die Lösung dieser total simplen Aufgabe gelungen.

Daraufhin habe ich mal geschaut wie man das den mit Python lösen könnte und habe folgendes gefunden:

Code: Alles auswählen

import random
def play(kugelnr,wer,start):
   if wer:
        print "abdruecken a neudrehen d "
        auswahl=raw_input()
        if auswahl=="d":
            print "du drehst neu"
            start=1
            kugelnr=random.randint(1, 6)
        print "du drueckst ab"
        if kugelnr == 6:
            print "dumm gelaufen, du hast dein Kopf verloren\n"
        else:
            print "glueckspilz, computer du bist dran\n"
            play(kugelnr+1,0,start+1)
   else:
        if start > 4:
            print "der Computer kann zaehlen er dreht neu"
            start=1
            kugelnr=random.randint(1, 6)
        print "der Computer drueckt ab"
        if kugelnr==6:
            print "dumm gelaufen fuer den Computer\n"
        else:
            print "glueck gehabt, du bist dran\n"
            play(kugelnr+1,1,start+1)


if __name__ == '__main__':
    print "wer faengt an Computer 0 oder du 1"
    wer=raw_input()
    play(random.randint(1, 6),int(wer),1)


Und da frage ich mich: Wie kann man auf sowas kommen? Gibt es da irgeneine Methode?

Ihr merkt also mein Problem ist nicht gerade die Syntax oder ähnliches sondern das logische Denken mit dem man an solche Probleme herangeht.

Übrigens: dieses

Code: Alles auswählen

 
if __name__ == '__main__':
...

sehe ich in fast jedem Python-Code aber was beudeutet das genau?

Und kann es tatsächlich sein, dass ich einfach zu dumm bin zum progranmieren oder irgendwas einfach nicht richtig durchblicke?

Gruß
hannibalbarkas
Benutzeravatar
penguin-p
User
Beiträge: 22
Registriert: Sonntag 19. August 2007, 13:47

Beitragvon penguin-p » Montag 20. August 2007, 16:13

Da gibt es keine generelle Methode, aber ich denke es würde dir helfen, dich ein wenig mit Algorithmen zu befassen.
Sieh dich mal auf der Wikipedia zu dem Thema um und implementiere beispielsweise Bubblesort (http://de.wikipedia.org/wiki/Bubblesort) in Python. Dann denk dich Stück für Stück hinein und versuch zu verstehen, was genau passiert.
Das ist natürlich keine Erfolgsgarantie, aber mit der Zeit dürfte dir der umgekehrte Schritt, also aus einer Aufgabenstellung einen Algorithmus auszudenken, immer leichter fallen.

Die von dir angesprochene if-Anweisung

Code: Alles auswählen

if __name__ == '__main__':

schließt aus, dass der dazugehörige Code ausgeführt wird, wenn die Datei als Modul importiert wird.


Wow, mein erster Beitrag ... und gleich was sinnvolles ;)
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Beitragvon Costi » Montag 20. August 2007, 16:30

alles braucht seine zeit....
der gitarrist von aehh, sagen wir rolling stones, war auch nicht nach 3 monaten guitarre unterrricht ein super-star :lol:

was bei mir geholfen hatt war interesse und spass; wenn ich mir zwinge etwas zu erlerenen klappt das nie so gut
cp != mv
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Re: Bin ich zu dumm zum programmieren?

Beitragvon veers » Montag 20. August 2007, 16:35

Abstraktes denken soll nicht Jedermanns Sache sein. Aber nun gut, zu deinen Fragen:
hannibalbarkas hat geschrieben:Und da frage ich mich: Wie kann man auf sowas kommen? Gibt es da irgeneine Methode?

Ihr merkt also mein Problem ist nicht gerade die Syntax oder ähnliches sondern das logische Denken mit dem man an solche Probleme herangeht.
Grundsätzlich musst du die Aufgabe mal im Kopf lösen/verstehen können. Daraus dann Code zu machen ist vor allem noch Arbeit. Wie du darauf kommst ist schwer zu erklären. Versuch mal dir im Kopf das ganze Schritt für Schritt durch zu denken. Wenn es dir hilft kannst du es auch aufschreiben. Versuch dich dabei möglichst nur Konstrukte zu verwenden die du direkt in Programmcode abbilden kannst.

Zu der Lösung die du gepostet hast, das ganze ist ja rekursiv und vermutlich nicht der einfachste Weg für einen Anfänger. Versuch das ganze doch einfach mit einer Schleife zu lösen.

Noch ein Beispiel für ein Konstrukt wie du es im Kopf haben solltest:
Solange noch beide leben... lass den Spieler wählen ob er die Trommel drehen lassen will. Usw ;)

hannibalbarkas hat geschrieben:Übrigens: dieses

Code: Alles auswählen

 
if __name__ == '__main__':
...

sehe ich in fast jedem Python-Code aber was beudeutet das genau?

Das überprüft ob das Modul ausgeführt oder importiert wird ;) Wenn ein Modul ausgeführt wird entspricht __name__ '__main__' ansonsten dem Modulnamen.
hannibalbarkas hat geschrieben:Und kann es tatsächlich sein, dass ich einfach zu dumm bin zum progranmieren oder irgendwas einfach nicht richtig durchblicke?
Möglich wäre es schon. Dann hättest du aber auch grosse Probleme mit Mathematik und ähnlichem ;) Ich würde auf jeden Fall nicht vorschnell aufgeben.
caba
User
Beiträge: 5
Registriert: Freitag 27. Juli 2007, 14:14
Wohnort: Bühl
Kontaktdaten:

Beitragvon caba » Montag 20. August 2007, 16:38

Vll willst du ja mal ein paar Aufgaben um dich zu probieren.
Da kann ich dir http://www.jobsnake.com/seek/articles/i ... ticle&8533
empfehlen.

Kannst ja mal versuchen die Aufgaben in Python zu lösen/verstehen.

MFG manuel
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Re: Bin ich zu dumm zum programmieren?

Beitragvon CM » Montag 20. August 2007, 17:28

Hoi und willkommen im Forum,

hannibalbarkas hat geschrieben:Schon seit langer Zeit versuche ich das programmieren zu erlernen.

Hast Du denn mit irgendeinem Menschen beim Thema Programmierung Gelegeheit zum Austausch? Irgendeiner, mit dem Du Dich verstehst? Muß nicht unbedingt ein Informatiklehrer sein, sondern ruhig jemand, der / die blutiger Anfänger ist und auch einfach nur Interesse hat.

Je nachdem wo Du sitzt gibt es vielleicht für Dich eine Python User Group oder vielleicht kann auch der CCC helfen in Deiner Nähe Ansprechpartner zu finden. Oder Du fragst einfach Deine Freunde ...

Ich bin hier unter meinen Kollegen (fast) der Einzige, der programmiert und mißbrauche meine Kollegen völlig hemmungslos als Gedankenkatalysatoren ... ;-)

Gruß,
Christian

PS @penguin-p: Auch Dir ein herzliches Willkommen - schöner Einstand ;-)
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Beitragvon EnTeQuAk » Montag 20. August 2007, 17:50

Also meinen Vorrednern kann ich mich eigentlich nur anschließen.

Man kann nichts von heute auf morgen perfekt oder nur ansatzweise.

Und ich bin der Auffassung, das Programmieren eine Kunst ist, die man nicht erlesen kann. Genau wie du sicherlich keinen Goldring schmieden kannst, durch schlichtes Buchlesen. Du musst es einfach anwenden, ausprobieren und einfach nur machen.


Du kannst ein dreihundertseitiges Buch lesen. Und glaub mir, wenn ich dich dannach frage, was genau ist eine Liste und wofür kann man es verwenden. Vor/Nachteile/Sinn etc. Du wirst mir sicherlich nicht alles sagen können.


Das hört sich so einfach an, ist es aber nicht. Aber grundlegend hilft es einfach die Ohren zu spitzen, was Verwandte/Bekannte so für Alltagsprobleme haben, und einfach, wenn es sich einfach anhört das versuchen umzusetzen. So absurrd es ist, so lehrreich ist es ebenso.

Natürlich bringt all dies nichts, wenn du nicht dahinter stehst, was du tust. Wie in allen Dingen im Leben wirst du kein Meister werden, wenn du keinen Bock auf das hast, was du machst.

So ich denke, das war jetzt erstmal genug geschwafelt xD


MfG EnTeQuAk
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Beitragvon BlackVivi » Montag 20. August 2007, 18:04

caba hat geschrieben:Da kann ich dir http://www.jobsnake.com/seek/articles/i ... ticle&8533
Ich krieg fast alles hin, nur beim ersten scheiter ich. Irgendwie abstrakt.

Zum Thema:
Ich habe fast 1 Jahr gebraucht (Schule und sowas war halt im Wege) um überhaupt irgendetwas auf die Beine zu kriegen. Ich habe viele verschiedene Programmiersprachen versucht und habe unendlich oft versagt. Programmieren ist ungefähr 1% Begabung und 99% Fleiß, nicht stupides Auswendiglernen sondern eher ein Gefühl dafür kriegen.

Überhaupt dieses abstrakte Programmierdenken in'n Schädel zu bekommen dauert ewig, erst dann kann man was.
BlackJack

Beitragvon BlackJack » Montag 20. August 2007, 18:18

Wie schon erwähnt wurde sieht die Lösung, die Du da gefunden hast, recht funktional aus mit der Rekursion. Ob das einfacher oder schwerer für Anfänger ist als eine eher prozedurale Lösung ist wahrscheinlich Geschmackssache und hängt vom Lernenden ab, aber es ist auf jeden Fall keine besonders "pythonische" Lösung.

Neben den Abläufen, wie veers das schon ausgeführt hat, macht es auch immer Sinn sich über die benötigten Daten Gedanken zu machen und in welchen Strukturen man diese ablegt.

Den Revolver kann man zum Beispiel ganz gut als Objekt modellieren. Objekte bestehen aus einem Zustand = Daten und Verhalten = Methoden, die in den meisten Fällen den Zustand verändern. Was uns an dem Revolver interessiert sind die Anzahl der Kammern (6), wie oft man noch abdrücken muss, bis es knallt und dem Computergegner ist es noch wichtig, wie oft der Abzug seit dem letzten drehen betätigt wurde. Womit wir auch schon die beiden Methoden eines Revolvers haben: Drehen und abdrücken.

Beim Drehen ändert sich die Anzahl der Betätigungen bis es knallt zwischen 1 und der Anzahl der Kammern. Ausserdem muss der Zähler zurückgesetzt werden.

Wenn man den Abzug betätigt, verringert sich der Abstand der Kammer mit der Patrone zum Schlagbolzen(?) und der Zähler muss eins hochgezählt werden. Ausserdem kann man in der Methode zurückgeben ob sich bei dieser Betätigung der Schuss gelöst hat, oder noch nicht. Damit hätte man diese kleine Klasse:

Code: Alles auswählen

from random import randint

class Revolver(object):
    def __init__(self, chambers=6):
        self.chambers = chambers
        self.pulls_till_bang = None
        self.pulls_since_last_spin = None
        self.spin()
   
    def spin(self):
        self.pulls_till_bang = randint(1, self.chambers)
        self.pulls_since_last_spin = 0
   
    def pull_trigger(self):
        self.pulls_till_bang -= 1
        self.pulls_since_last_spin += 1
        return self.pulls_till_bang == 0


Für das Spiel reicht eine Funktion. Als Daten brauchen wir einen Revolver und wir müssen uns merken wer gerade an der Reihe ist. Da sich hier ein Vorgang öfter wiederholt, brauchen wir eine Schleife. ``for``-Schleifen sind für Wiederholungen wo man vorher weiss, wieviele Wiederholungen es sind. Das wissen wir nicht, also eine ``while``-Schleife. Wenn sich ein Schuss löst, soll die Funktion zurück geben ob er sich beim Spieler oder beim Computergegner gelöst hat. Dass heisst es kann eine "Endlosschleife" sein, die im Todefall mit dieser Information durch ein ``return`` verlassen wird.

In der Schleife gibt es Aktionen die für beide Spieler unterschiedlich sind, wie Ausgabe von Texten und wie die Entscheidung zum drehen zustandekommt und solche, die für beide Spieler gleich sind, wie das Drehen, falls der Spieler sich dafür entschieden hat und das Abdrücken in jedem Fall. Am Ende der Schleife wird das wechseln des Spielers vorgenommen und der Spass geht von Vorne los.

Code: Alles auswählen

def play(computer_starts=False):
    humans_turn = not computer_starts
    revolver = Revolver()
    while True:
        print '-' * 30
        if humans_turn:
            print 'Spieler am Zug'
            spin = raw_input('Trommel drehen? ').lower().startswith('j')
        else:
            print 'Computer am Zug'
            spin = revolver.pulls_since_last_spin >= revolver.chambers * 0.66
       
        if spin:
            print 'Die Trommel dreht sich...'
            revolver.spin()
       
        if revolver.pull_trigger():
            print 'PENG!!!'
            return humans_turn
       
        print '*klick*'
        humans_turn = not humans_turn


Das Hauptprogramm muss jetzt nur noch Fragen wer anfangen soll und eine entsprechende Todesmeldung ausgeben.

Code: Alles auswählen

def main():
    human_starts = raw_input('Soll der Computer anfangen? ')
    human_is_dead = play(human_starts.lower().startswith('j'))
    print '=' * 30
    if human_is_dead:
        print 'Du bist tot.  :-('
    else:
        print 'Der Computer ist tot.  :-)'


if __name__ == '__main__':
    main()
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 21. August 2007, 00:24

BlackVivi hat geschrieben:
caba hat geschrieben:Da kann ich dir http://www.jobsnake.com/seek/articles/i ... ticle&8533
Ich krieg fast alles hin, nur beim ersten scheiter ich. Irgendwie abstrakt.

Hab mir jetzt nur das erste angeschaut: #2706 und der Großteil des Codes emuliert nur ``getch()`` (und das auch nur schlecht - ha!). Muss zugeben, das war eine hübsche Übung. Mal sehen ob ich vielleicht die libc dazu verwenden kann.

Was das programmieren angeht: mehr als 1% Begabung sind es meiner Meinung durchaus. Klar, man programmiert eben viel, oft sinnloses, dysfunktionales oder abstraktes. Aber man kann sich ja auch austauschen - genau dazu bin ich ja im Forum, der Mailingliste, der Newsgroup, im Channel, am [wiki]Stammtisch[/wiki]. Wobei ich zugeben muss, dass Python zum lernen ziemlich ideal ist. Wenn in C etwas kracht, dann gibt es keine so hübschen Exceptions.

Die letzten Tage habe ich mich hauptsächlich mit SQLAlchemy beschäftigt, eigentlich immer wenn ich Zeit hatte und es mir nicht zum Hals raushing. Aber inzwischen glaube ich die Konzepte zu verstehen, da ich viel probiert habe und auch einiges gelesen habe.

Aber zum Programmieren zählt auch das Weglegen von Computer und rausgehen. Nach Stunden tippen fallen mir oft Sachen die blöd gelöst sind erst dann ein wenn ich etwas Abstand bekomme.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Beitragvon BlackVivi » Dienstag 21. August 2007, 01:07

Leonidas hat geschrieben:
BlackVivi hat geschrieben:
caba hat geschrieben:Da kann ich dir http://www.jobsnake.com/seek/articles/i ... ticle&8533
Ich krieg fast alles hin, nur beim ersten scheiter ich. Irgendwie abstrakt.

Hab mir jetzt nur das erste angeschaut: #2706 und der Großteil des Codes emuliert nur ``getch()`` (und das auch nur schlecht - ha!). Muss zugeben, das war eine hübsche Übung. Mal sehen ob ich vielleicht die libc dazu verwenden kann.
Weißt du, Leonidas, (und das betrifft auch BlackJack) ihr macht mir Angst. Auf eine postive Art und Weise. Egal was ich schreib an Code, ich weiß das ihr's besser könnt. Und das mein ich nicht im negaitve "IHR SEID JA SOO DOOFE KLUGSCHEISSER" Art und Weise, sondern eher in einer Art "Ich achte euch für euer Wissen" Art und Weise.

Besonders bei BlackJack fällt mir das oft oft auf. Ich hoffe ich kann irgendwann auch'n bissel was...
Benutzeravatar
Kuttengeier
User
Beiträge: 27
Registriert: Freitag 17. August 2007, 07:04

Beitragvon Kuttengeier » Dienstag 21. August 2007, 06:36

Hi BlackVivi,

ich helfe mir immer, indem ich den Ablauf der Lösung eines Problems im Kopf durchgehe. Immer Schritt für Schritt. Daraus programmiere ich dann ein Programm, was ohne selbstgeschriebene Objekte arbeitet (mir fällt der Name gerade nich ein). Wenn ich das fertig hab, dann verwerfe ich es und schreibe daraus in Objekt orientiertes Programm.

Als Beispiel:

Problem: Addiere 5 zu 35
Überlegung: Ich muss 5 zu 35 hinzufügen
Lösung: 3+35

Das Beispiel ist vielleicht nicht ganz so gut, weil es einfach zu simpel ist, aber was besseres fällt mir gerade nicht ein, was man auf die schnelle beschreiben könnte. Dein Beispiel wurde oben schon oft genug durchgekaut.

Vielleicht hilft dir ja meine herrangehensweise ein bisschen weiter. Und ich glaube, du solltest dich am Anfang nicht mit schweren Sachen beschäftigen und mit jeder Übung eine neue Funktion von Python hinzufügen. So oder so ähnlich mache ich es und bin bisher ganz gut damit gefahren. ;)

Also, in diesem Sinne,
Kuttengeier
Bruno Schäfer
User
Beiträge: 9
Registriert: Freitag 27. September 2002, 12:34
Kontaktdaten:

Alles wird gut !

Beitragvon Bruno Schäfer » Dienstag 21. August 2007, 06:56

Eigentlich geht es jedem mehr oder weniger so, wenn man mit dem Programmieren beginnt. Das hat nichts mit Dummheit zu tun, sondern liegt daran, dass uns niemand beigebracht hat, logisch unhd systemeatisch an eine Problemlösung heranzugehen.

Fange mit einfachen Sachen an, damit Du lernst, wie Du Probleme em besten anpackst. Suche Dir Aufgaben aus einem Mathe- oder Physikbuch und versuche daraus ein kleines Programm zu schreiben. Irgendwann macht es "Klick"!
Versuche Probleme aus deinem Alltag als Programm zu schreiben, zum Beispiel den Verbrauch von Deinem Moped/Auto, Dein Kalorienverbrauch beim Joggen oder so etwas ähnliches.
Du wirst merken, mit der Zeit wird es immer einfacher und dann kannst Du Dich auch schon an schwierigere Probleme herantrauen !

Vor allem lass Dich nicht entmutigen und Dir dadurch nicht den Spaß am Programmieren nehmen!

Gruß
BS
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Beitragvon Imperator » Dienstag 21. August 2007, 09:30

Ich kann jetzt nicht direkt sagen wie es ist mit Python programmieren zu lernen, da ich es mit Delphi gelernt habe. Aber eigentlich dürfte das egal sein. Für ein kleines einfaches projekt am Anfang würde ich dir ein kleines Quiz vorschlagen. Etwas einfacheres gibt es fast nicht. Und du hättest mich am Anfang sehen sollen. Ich hatte sogar Probleme ein Rechenprogramm zu machen (in Delphi das leichteste was es gibt). Sogar Bill Gates hat mal so wie wir alle angefangen.
BlackJack

Beitragvon BlackJack » Dienstag 21. August 2007, 10:33

Ich glaube Bill Gates' erste Programmiererfahrungen unterscheiden sich schon recht deutlich von "unseren". Der hat angefangen als man noch mehr über die Hardware wissen musste und Lochtreifen und Lochkarten das Medium der Wahl waren und man sich keine Rechner zuhause hingestellt hat, sondern per Terminal an einen Grossrechner ging, wo man sich Rechenzeit gemietet hat.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder