Seite 1 von 2
array inhalt bearbeitung
Verfasst: Freitag 6. November 2009, 17:20
von Infrared
codefolge:
Code: Alles auswählen
global feld
feld=[9,9,9,9,9,9]
def verteilen():
L1.configure (text=feld[1]+1)
Der Inhalt der array ("felder") wird in Button angezeigt. Ich möchte das wenn man darauf klickt, der Inhalt (der text (arrays/felder)) bearbeitet wird. Z.B soll dann statt 9, eine 10 dort stehen. (9+1=10 ^^)
Bekomme keine vernünftige Funktion hin. Helft mir bitte

Re: array inhalt bearbeitung
Verfasst: Freitag 6. November 2009, 18:07
von numerix
Infrared hat geschrieben:Bekomme keine vernümpftige Funktion hin. Helft mir bitte

Es heißt "vernünftige" ...
1. global nach Möglichkeit vermeiden.
2. global ist hier komplett überflüssig.
3. PEP 8 beachten: Bezeichner klein schreiben
4. Aussagekräftige Bezeichner wählen ("L1")
5. Präziser beschreiben, was du erreichen willst: Welche der 9en soll denn geändert werden? Alle? Gar keine?
Verfasst: Freitag 6. November 2009, 18:51
von cofi
Ausserdem ist das kein `array`, sondern eine Liste.
Verfasst: Freitag 6. November 2009, 23:05
von Infrared
Ne das ist keine Liste ^^ Von mir aus nennt das auch array[...] ist das gleiche wie mit feld !?!
Aber kann mir jemand vielleicht so eine funktion schreiben? Sind doch max. 2 Zeilen.
Verfasst: Freitag 6. November 2009, 23:07
von Leonidas
Infrared hat geschrieben:Ne das ist keine Liste ^^ Von mir aus nennt das auch array[...] ist das gleiche wie mit feld !?!
Doch, das ist eine Liste. Ein Array ist ein Datentyp der eine feste Anzahl von Elementen gleichen Typs speichert. Weder das eine noch das andere trifft bei Pythons Listen zu.
Verfasst: Freitag 6. November 2009, 23:24
von numerix
Infrared hat geschrieben:Aber kann mir jemand vielleicht so eine funktion schreiben? Sind doch max. 2 Zeilen.
Na dann, mach's doch schnell selber. Ist doch kein Ding.
Falls du es dann doch nicht selbst machen willst:
numerix hat geschrieben:5. Präziser beschreiben, was du erreichen willst: Welche der 9en soll denn geändert werden? Alle? Gar keine?
Verfasst: Freitag 6. November 2009, 23:57
von Infrared
ok, da ich den code einfach nicht gebacken bekomme:
Code: Alles auswählen
#Zahlenangaben
feld=[9,0,0,0]
#Buttons
L1 = Button(QD1, text=feld[0],command=setzeneu)
L1.pack(side=LEFT)
L2 = Button(QD1, text=feld[1],command=setzeneu)
L2.pack(side=LEFT)
L3 = Button(QD1, text=feld[2],,command=setzeneu)
L3.pack(side=LEFT)
L4 = Button(QD1, text=feld[3],,command=setzeneu)
L4.pack(side=LEFT)
So jetzt brauch ich also die Funktion "setzeneu" und zwar:
Wenn man auf Button L1 klickt sollen da 9 abgezogen werden und auf die nächsten 9 Felder verteilt werden (habe nur 3 weitere angegeben).
Also: Klick L1 : L1 = 0
Alle 9 Buttons nach L1: +1
Am besten wäre natürlich noch, das wenn man dann auf L2 klickt (wo dann ja 1 drin stände), der L2 auf 0 setzt und L3 +1.
Also das man das ganze nicht speziell für jeden Button einzeln machen muss, da es da etliche Möglichkeiten gibt. Wenn das nicht zu viel verlangt ist

Re: array inhalt bearbeitung
Verfasst: Samstag 7. November 2009, 09:22
von numerix
Ich sehe von deiner Seite kein ernsthaftes Bemühen, die dir angebotenen Ratschläge und Hilfen umzusetzen.
numerix hat geschrieben:3. PEP 8 beachten: Bezeichner klein schreiben
4. Aussagekräftige Bezeichner wählen ("L1")
Das sieht immer noch genauso aus wie vorher.
Und: Das, was du als (letzten) Code zeigst, ist noch nicht einmal lauffähig.
Verfasst: Samstag 7. November 2009, 10:12
von BlackJack
Interessant bei solchen Fragen ist ja auch immer das Raten, welches zugrundelegende, grössere Problem *eigentlich* gelöst werden soll. Meine Kristallkugel behauptet es geht um
Kalaha!? Und hat sie recht, oder war's doch nicht so gut, dass sie neulich mal runtergefallen ist?

Verfasst: Samstag 7. November 2009, 12:51
von yipyip
Dann scheint das Tic-Tac-Toe Spiel also schon fertig zu sein!?
(SCNR)
yipyip
Verfasst: Samstag 7. November 2009, 13:18
von HWK
Dies soll nur mal das Prinzip verdeutlichen:
Code: Alles auswählen
button_list = []
for i, item in enumerate(feld):
button = tk.Button(master, text=str(item),
command=lambda arg=i: change(arg))
button_list.append(button)
button.pack(side=tk.LEFT)
def change(i):
# Mach hier, was Du willst
Der Code ist natürlich nicht lauffähig und damit auch ungetestet.
MfG
HWK
Re: array inhalt bearbeitung
Verfasst: Samstag 7. November 2009, 14:42
von Infrared
numerix hat geschrieben:Ich sehe von deiner Seite kein ernsthaftes Bemühen, die dir angebotenen Ratschläge und Hilfen umzusetzen.
Und: Das, was du als (letzten) Code zeigst, ist noch nicht einmal lauffähig.
Ich bin ein Anfänger ^^
Und natürlich ist der Code nicht lauffähig. Er ist ja auch normal ca. 3x so lang. Aber um zu verstehen was ich möchte braucht man doch kein tkinter import oder das den ganzen Rest vom Standartgerüst.
HWK: Danke für deine Mühe, hat mir ein Stück weit weiter geholfen, aber ich komm damit nicht ganz klar.
yipyip: War das mit dem tic tac toe an mich gerichtet?

Keine Ahnung wo von du sprichst
Dann stell ich meine Frage mal neu:
In einzelnen Buttons wird der Inhalt von "feld=[..]" angezeigt.
Also z.B text=feld[1]
Ich möchte jetzt eine definition erstellen, dass wenn ich auf den Button klicke er z.B bei feld[2] einen Abzieht
Ich stell mir das so vor:
text=feld[2]-1
Aber das klappt nicht, ich finde nichts bei google und vielleicht mach mir das Leben auf einfach gerade schwer?
Er soll also den Inhalt von feld2 auslesen und einen davon abziehen.
Sagen wir feld[2] ist 9.
Wenn ich auf einen Button klicke, dann soll feld[2]-1 (Also dann 8 )
Ich bin hier auch kurz vor dem verzweifeln
Verfasst: Samstag 7. November 2009, 15:08
von BlackJack
@Infrared: Das Du Anfänger bist, kann doch kein Grund sein Ratschläge wie vernünftige Namensgebung zu verwenden, zu ignorieren. Im Gegenteil, wenn man dass nicht am Anfang lernt, wann dann?
Ohne lauffähige, möglichst minimale Beispiele, ist es schwer Deine Fragen überhaupt zu verstehen, denn drumherum beschreibst Du das in Sätzen die zum Teil ziemlich unverständlich sind. So etwas wie `Wenn ich auf einen Button klicke, dann soll feld[2]-1 (Also dann 8 )` ist einfach kein vollständiger Satz. Und wenn Du das umgangssprachlich nicht präzise, oder zumindest verständlich beschreiben kannst, geht das bei Programmiersprachen genauso daneben. Wir können ja noch raten was Du vielleicht meinen könntest, wozu aber wohl auch nicht alle hier unbegrenzt Lust haben werden, aber der Python-Interpreter rät nicht, sondern macht exakt das was Du ihm in einer formal recht präzisen Sprache sagst.
Was auch immer das *wirkliche* Problem ist, was Du lösen möchtest, solltest Du es vielleicht erst einmal ohne GUI lösen.
Und bevor Du an die GUI gehst, musst Du die Grundlagen von Python verstanden haben, am besten bis einschliesslich Objektorientierung, oder alternativ funktionale Programmierung bis ``lambda`` oder `functools.partial()` bzw. Closures.
Re: array inhalt bearbeitung
Verfasst: Samstag 7. November 2009, 17:20
von pillmuncher
Infrared hat geschrieben:HWK: Danke für deine Mühe, hat mir ein Stück weit weiter geholfen, aber ich komm damit nicht ganz klar.
...
Dann stell ich meine Frage mal neu:
In einzelnen Buttons wird der Inhalt von "feld=[..]" angezeigt.
Also z.B text=feld[1]
Ich möchte jetzt eine definition erstellen, dass wenn ich auf den Button klicke er z.B bei feld[2] einen Abzieht
Ich stell mir das so vor:
text=feld[2]-1
Aber das klappt nicht, ich finde nichts bei google und vielleicht mach mir das Leben auf einfach gerade schwer?
Er soll also den Inhalt von feld2 auslesen und einen davon abziehen.
Sagen wir feld[2] ist 9.
Wenn ich auf einen Button klicke, dann soll feld[2]-1 (Also dann 8 )
Da meine Kristallkugel grade frisch von der Inspektion zurück ist, werd ich sie mal anwerfen.
Soweit ich dich verstehe, möchtest du entweder, 1) dass
auf dem Button eine Zahl steht, die jedesmal um eins kleiner wird, wenn du draufdrückst. Ja? Oder, du möchtest, 2) dass der Button, nachdem du ihn drückst, die Zahl Null anzeigt und die auf den nachfolgenden Buttons stehenden Zahlen jeweils um eins erhöht werden. Ja? Egal ob 1) oder 2), soll deine zugrunde liegende Datenstuktur ge-updatet werden, also die zu den Buttons korrespondierenden Felder sollen ebenfalls die entsprechenden Werte annehmen. Ja? In jedem Fall ist HWKs Vorschlag ein guter Ausgangspunkt, du musst nur irgendwas in dieser Art in change(i) machen:
Code: Alles auswählen
def change(i):
...
n = ...feld[i]... # <-- hier neuen Wert berechnen
feld[i] = n
button_list[i]["text"] = str(n)
...
BlackJack hat übrigens recht, und wenn du HWKs oder meinen Code nicht verstehst, dann musst du leider vorerst kleinere Brötchen backen und dir die Grundlagen draufschaffen.
Gruß,
Mick.
Verfasst: Samstag 7. November 2009, 19:25
von wuf
Hallo Infrared
Bezugnehmend auf deine erste Frage. Hier eine von vielen Lösungen:
Code: Alles auswählen
import Tkinter as tk
def update_feld(index, feld, button):
number = feld[index] + 1
feld[index] = number
button.config(text=number)
print 'feld =',feld
app_win = tk.Tk()
app_win.geometry('100x200')
app_win.config(bg='steelblue')
feld=[9,9,9,9,9,9]
for index, data in enumerate(feld):
button = tk.Button(app_win, text=data, width=3)
button.pack(side='top', expand='yes')
button.config(command=lambda id=index, data=feld, obj=button:\
update_feld(id, data, obj))
app_win.mainloop()
Gruss wuf

Verfasst: Samstag 7. November 2009, 20:00
von Infrared
Ja genauso mein ich das, pillmuncher.
Gibt es für Python nicht die Möglichkeit einfach eine If Funktion zu erstellen?
In Actionscript würde es heißen
Und das versuch ich in Python zu erstellen! Auf jeden Fall habt ihr mich bis hier hin schon ein ganzes Stück klüger gemacht was Python angeht

Verfasst: Samstag 7. November 2009, 21:11
von BlackJack
@Infrared: Irgendwie mag ich nicht glauben, dass das in den geschweiften Klammern in ActionScript das macht, was Du haben willst. Und nein -- so kann man das auch in Python nicht schreiben.
Verfasst: Samstag 7. November 2009, 23:14
von Leonidas
Was soll denn eine if-Funktion sein? Ich kann mir if-Funktionen nur in Sprachen mit nicht-Strikter Parameterverarbeitung vorstellen, in allen anderen kann man ``if`` entweder nicht einfach so implementieren sondern benötigt Proxy-Objekte oder benutzt Makros.
Verfasst: Samstag 7. November 2009, 23:51
von Infrared
was für proxy-dinger? ^^
Bleiben wir bei Python
Gibt es dazu also keine einfache variante?[/u]
Verfasst: Sonntag 8. November 2009, 00:06
von yipyip
@Infrared:
Ich spreche von
http://www.python-forum.de/topic-20078.html
oder verwechsle ich da irgendwen?
yipyip