Neuling sucht Rat

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.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Tengel hat geschrieben:Man wandelt das ja in einen String um - warum kann er das dann trotzdem berechnen?
Ich möchte hier sicherheitshalber noch eine Anmerkung machen.

str(a) wandelt nicht a in einen String um. a bleibt unverändert. str(a) liefert als Ergebnis die String-Darstellung von a zurück.
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Ok - nochmal zur Spielfelderzeugung, wie ich bereits festgestellt habe geht es mit Strings nicht da diese ja nicht verändert werden können/dürfen.

Nun bin ich bei Listen angekommen.

Ich möchte immer noch ein 3x3 Spielfeld das als
...
...
...
dargestellt wird.

Jetzt hab ich

Code: Alles auswählen

def spielfeld():
    #Spielfeld erzeugen
     
    spielfeld=[".",".",".",
               ".",".",".",
               ".",".","."]
versucht und gehe davon aus das es jeder Punkt einen [] Wert hat - also der erste Punkt=[0] der zweite [1] und so weiter - ist das soweit richtig?

Und falls ja wie mache ich
nach 3 Punkten einen Zeilenumbruch? Muss ich dafür eine Liste in der Liste erstellen?
das bei der Ausgabe nur . angezeigt wird und nicht '.'?
Benutzeravatar
kbr
User
Beiträge: 1506
Registriert: Mittwoch 15. Oktober 2008, 09:27

Tengel hat geschrieben:Und falls ja wie mache ich
nach 3 Punkten einen Zeilenumbruch? Muss ich dafür eine Liste in der Liste erstellen?
das bei der Ausgabe nur . angezeigt wird und nicht '.'?
Also, ich finde, das ist eine prima Übungsaufgabe. Also ran an die Konsole.
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Also ist Liste in der Liste richtig?
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@Tengel: Überleg Dir mal, wie Du an die einzelnen Werte in der Liste rankommst (Stichwort Indexzugriff). Mit ein bisschen Mathe bei der Betrachtung des Indexes klappts auf mit dem Zeilenumbruch. Alternativ könntest Du mit Sublisten arbeiten. Das würde einen x,y-Zugriff vereinfachen (Geht bei ersterem auch, nur müsstest Du x und y erst transformieren)

Update: Wo hast Du denn eine Liste in der Liste? Ich sehe im Code nur eine große Liste für alle Felder.
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Hab ich noch nicht :)
War ja meine Frage ob sich das durch Liste in Liste lösen lässt und nachdem dann die Antwort kam das es eine gute Übungsaufgabe ist war einfach die Frage ob meine Annahme:
Liste in Liste
richtig war
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Wenn Du einen 2-dimensionalen Zugriff haben willst, dann ja.
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Nein - eigentlich wär ein eindimensionaler Zugriff Eingabe freundlicher.
ich versuche gerade mit einem zusätzlichen Element + b\n einen Zeilenumbruch zu machen - aber irgendwie scheint das nicht zu gehen.
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Auch wenn ich mir dafür ordentlich flame einhandle .....

Code: Alles auswählen

#Versuch mit 3 Listen

spielfeld_y0 = [0,1,2]
spielfeld_y1 = [3,4,5]
spielfeld_y2 = [6,7,8]

spielfeld_y0[0] = "."
spielfeld_y0[1] = "."
spielfeld_y0[2] = "."

spielfeld_y1[0] = "."
spielfeld_y1[1] = "."
spielfeld_y1[2] = "."

spielfeld_y2[0] = "."
spielfeld_y2[1] = "."
spielfeld_y2[2] = "."

print(spielfeld_y0)
print(spielfeld_y1)
print(spielfeld_y2)

print("Bitte ein Zahl eingeben 1-9")
eingabe=int(input())

if eingabe==1:
    spielfeld_y0[0] = "X"



print(spielfeld_y0)
print(spielfeld_y1)
print(spielfeld_y2)

    

Aber! ...es hat den Zeilenumbruch und mit Eingabe - in diesem Fall geht nur 1 - kann ich auf die Tabelle zugreifen und verändern.
Ich hab auch festgestellt das durch
spielfeld_y0 = [0,1,2]
Das weglassen der " auch keine ' ausgegeben werden, nur leider funktioniert
spielfeld_y0[0] = X
nicht.

Hm - mir kommt gerade ich hätte anstatt 1,2,3 gleich . zuweisen können und mir dann das ewige
spielfeld_y0[0] = "."
sparen können....

irgendwie denk ich viel zu kompliziert....^

ich bin schon ewig am überlegen ob das nicht mit
for schleife die einfach nur einen enter macht
for schleife die 1-2-3 ausgibt
aber irgendwie komm ich da nicht weiter XD
BlackJack

@Tengel: Wenn man anfängt Namen durchzunummerieren, dann will man in aller Regel *einen* Namen und eine entsprechende Datenstruktur. Meistens eine Liste.

Verabschiede Dich mal von dem Gedanken, dass Du das einfach so mit *einem* `print()` ausgeben kannst und das bekommst was Du Dir vorstellst, statt der `repr()`-Form einer Liste.

Du kannst entweder *eine* Liste mit 9 Elementen nehmen. Dann kannst Du mit 0 bis 8 indexieren. Und musst bei der Ausgabe immer nach drei Zeichen einen Zeilenumbruch ausgeben. Oder mittels Slicing dafür sorgen, dass Du immer Dreiergruppen aus der Liste extrahierst und die Elemente dann mit einer leeren Zeichenkette zusammensetzt (`join()`-Methode) und `print()` aufrufst.

Oder Du steckst drei Listen mit jeweils drei Elementen in eine äussere Liste. Dann musst Du mit zwei Zahlen indexieren, also die eine Zahl vom Benutzer gegebenenfalls in die zwei Angaben umrechnen. Dafür ist das Gruppieren einfacher, denn jeweils drei Zeichen einer Reihe sind ja schon zu einer Liste zusammengefasst.
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

hmmmmmmmmmmmmmmmmm :shock:

zuviel Input

Primär geht es gerade ja darum einfach ein 3x3 Feld zu erstellen (sinnvoll erstell)
als Ausgabe kenne ich bisher nur print()


['.', '.', '.']
['.', '.', '.']
['.', '.', '.']
evtl. ist das sogar etwas übersichtlicher als
...
...
...

und evtl ist . schlecht und ich nehm gleich
1 2 3
4 5 6
...
um deutlich zu machen welche Eingabe welches Feld anspricht
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Tengel hat geschrieben:Primär geht es gerade ja darum einfach ein 3x3 Feld zu erstellen (sinnvoll erstell)
als Ausgabe kenne ich bisher nur print()
Es zwingt dich doch keiner dein Spielfeld direkt mit print auszugeben. Schreibe einfach eine Funktion, welche ein Spielfeld entgegennimmt und dies dann nach deinen Wünschen ausgibt.
Das Leben ist wie ein Tennisball.
BlackJack

@Tengel: Ich habe doch eigentlich auch nur beschrieben was man für ein 3×3-Spielfeld machen würde. Eine sinnvolle Datenstruktur und die Ausgabe wie Du sie haben möchtest sind nun mal nicht das selbe. Eine Datenstruktur wählt man nicht wegen des ”Aussehens” sondern passend zu den Operationen die man darauf ausführen möchte. Eine Operation ist in diesem Fall die Ausgabe der Daten in einer für den Benutzer sinnvollen Art. Die Art wie Listen in Zeichenketten umgewandelt werden ist das nicht so wirklich, also wird man selber die Ausgabe der einzelnen Elemente so gestalten müssen wenn man das gerne hätte. Wenn Du neben `print()` noch keine Schleifen kennst, wird das schwierig. Noch besser wäre es ein paar Grundoperationen auf Zeichenketten zu kennen, wie die `join()`-Methode.
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Naja - wie gesagt ich bin halt noch ganz neu und bin eh langsam am verzweifeln - wahrscheinlich bin ich einfach zu doof.
BlackJack

@Tengel: Den Eindruck hatte ich von Deinen Beiträgen bisher eigentlich nicht.
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Was kann man denn aus meinen bisherigen Beiträgen schließen?xD

Ka - ich oute mich jetzt einfach mal:
Ich hab vor 3-4 Jahren aus einer Laune heraus C angefangen .... dann wurde mir gesagt - C ist oldschool - ich bin auf
C++ gewechselt.
Dann kam irgendwann der Punkt wo ich
a
nicht so wirklich verstanden hab was die von mir wollen (Zeiger,etc)
b
ich dachte beim Objektorientiert Kapitel gehts endlich raus aus der Konsole .... zonk
c
ich mich fragte was ich mit dem wissen überhaupt anfangen kann
d
fehlte dann auch am Ende noch die Zeit

Jetzt hab ich wieder doch recht viel Freizeit - interessiere mich doch ordentlich dafür
Python soll ja auch leicht zu lernen sein, ist dann auch frustrierend wenn man bei 100 Quellen liest "sogar für Leute die zum ersten mal am Rechner sitzen leicht zu lernen" und dann sowas....

Seit 50 Seiten kam im Buch keine Übungsaufgabe mehr ...... - selbst welche einfallen lassen ist irgendwie nicht so toll da man ja irgendwie automatisch zu Aufgaben greift bei denen man "fit" ist

Hinzu kommt das ich eher beim hören+schreiben am besten lerne/verstehe.
Hören fällt flach da youtube tutorials alte Versionen nutzen
Fürs schreiben hab ich mir ein paar leere karierte Hefte besorg wo ich jetzt von anfang an zu allen Dingen Notizen/Definitionen/Beispiele geschrieben hab

Und zum Thema Spielfeld - ich hab damals in c++ ein X und O Spiel geschrieben - das fast fertig war als ich aufgehört hab, das wollte ich jetzt in Python machen.
Als Strings kamen - dacht ich "juhu - jetzt müsste das wissen reichen" = zonk - nicht veränderbar
jetzt kam Liste - müsste eigentlich gehen.

Ich mein - so ein X und O spiel ist ja wohl auch nix weltbewegendes, eher endlose Schreiberei für jeden möglichen Weg.
Aber es geht ja nicht darum das es möglichst schwer ist - sondern einfach das ich das gelernte wiederholt anwende um es zu verinnerlichen.

Ich hab auch nach Aufgaben gegoogelt - aber das ist eher suboptimal da jedes Buch /Lehrer eine andere Reihenfolge hat.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Na jetzt geh mal nicht so hart mit Dir ins Gericht. Das in meinen Augen Wichtigste - eine gewisses Interesse/Begeisterung - bringst Du mit.

Zum konkreten Problem:
Geh doch mal eine Stufe zurück und schildere uns, was das mit dem Spielfeld werden soll. Dann können wir Dir auch beim Modellieren helfen.

Übrigens - was ist so schlimm an der Konsole? :shock:
Und C old school - naja in die Jahre gekommen schon, aber eher wie ein Song von den Beatles, also ein evergreen. ;)
BlackJack

@Tengel: Zeiger sind in C auch wichtig, die sind nicht erst bei C++ neu dazu gekommen.

Python an sich ist verhältnismässig leicht zu lernen, weil die Syntax einfach ist, weil man sich nicht um die Speicherverwaltung kümmern muss, und auch nicht wie beispielsweise bei C oder C++ über Zeiger oder nicht initialisierte Speicherbereiche das Programm ohne ordentliche Fehlermeldung abschiessen kann, und weil man viel interaktiv in einer Python-Shell ausprobieren kann.

Was bleibt ist das Programmieren an sich. Das zu lernen kann man nicht beliebig leicht machen — mit keiner Programmiersprache.

Vielleicht ist ja Learn Python The Hard Way etwas für Dich. Das richtet sich zwar an absolute Anfänger, aber es besteht im Grunde fast ausschliesslich aus Übungen.

Ob in Hefte schreiben etwas bringt bezweifle ich ein wenig, denn das Heft gibt ja keine Rückmeldung ob das stimmt was man dort hinein schreibt. Ich hatte als ich angefing zwar auch viel BASIC-Code auf Papier aufgeschrieben, aber das auch nur weil ich nicht durchgehend Zugang zum einem Rechner hatte und die Ideen aufschreiben wollte. :-)

Ein X und O Spiel ist keine endlose Schreiberei sondern ein Programm mit Funktionen und Schleifen. Man kann da zwar eine endlose Schreiberei draus machen, aber *das* würde ich nicht einmal zur Übung machen, denn dabei lernt man nur wie man *nicht* programmieren sollte. Stupide Schreibarbeit mit leichten Variationen im Text ist nichts was ein Programmierer macht, denn genau *dafür*, Sachen nach einem bestimmten Muster zu wiederholen, schreibt man ja Programme, damit der Rechner das macht. Wenn man sich also dabei ertappt, dass man Quelltext wiederholt oder gar mit der entsprechenden Editorfunktion kopiert und dann leicht verändert (oder noch nicht einmal das tut), dann sollte man darüber Nachdenken die Unterschiede zu identifizieren und entweder die Gemeinsamkeiten der Quelltextabschnitte in Funktionen heraus ziehen, oder die Unterschiede in eine Datenstruktur und darüber eine Schleife schreiben. Eine Kombination aus beidem macht auch oft Sinn.
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Nein - ich habe mich da wohl etwas unklar ausgedrückt.

Ich schreibe keine "Programme" ins Heft sondern ganz allg. gelerntes - Funktionen und z. B. Erklärungen dazu
import
continue
for
if
elif
etc.

Ja auf das Buch bin ich jetzt auch schon gestoßen - momentan verwende ich -Einstieg in Python: Ideal für Programmieranfänger geeignet (Galileo Computing)
Aber wie gesagt - am Anfang gab es alle 2 Seiten eine Übung - und jetzt seit Ewigkeiten nichts mehr.

Grad bei den Letzten 3(Strings, Listen, Tupel) wär das evtl. schön weil das etwas "komplexer" ist wie das anfängliche a+b / if Zeugs.

Naja mal gucken evtl. besorg ich mir das Buch noch, das scheint was ich so gelesen hab besser zu sein wie mein aktuelles - wobei das frustrierende halt ist das es keine "sichtbaren" Erfolge gibt - und die bleiben noch mehr aus wenn ich ein neues Buch anfange.
BlackJack

@Tengel: Der Ansatz von „Learn Python The Hard Way” ist, dass man alle Beispiele eingeben und selbst ausprobieren sollte. Und es gibt viele Übungen. Das Buch ist auf der Webseite übrigens komplett als HTML zu lesen.
Antworten