Hi,
ich habe mir als erstes "kleines" GUI Programm "Drei in einer Reihe" ausgesucht.
https://pastebin.com/WC0rzRfF
Hat mir auch sehr viel Spass gemacht, vor allem den Code von knapp über
500 Zeilen auf die jetzt aktuellen ca. 200 zu reduzieren.
Eine Sache nervt mich allerdings noch, und ich habe irgendwie eine Blockade den richtigen
Ansatz zu finden ohne alles komplett umschreiben zu müssen.
Worum es mir geht ist die Abfrage der Gewinner, genauer gesagt des unentschieden.
Es sieht so schön nach einer in Schleife abfragbaren Codepassage aus,
aber es will mir einfach nicht gelingen.
Ich möchte die Aufgabe nicht von euch gelöst bekommen, aber vielleicht kann mir ja
jemand einen Denkanstoß geben.
Vielen Dank schonmal im voraus
Drei in einer Reihe
"""
Code by: erynur
Contact: erynur0@gmail.com
Feel free to use this code for personal or educational purpose
"""
Code by: erynur
Contact: erynur0@gmail.com
Feel free to use this code for personal or educational purpose
"""
@erynur: __init__ ist dazu da, eine Instanz zu initialisieren, nicht um darin die ganze Arbeit zu machen, denn so arbeitest Du die ganze Zeit mit einem nicht vollständig initialisierten Objekt: das mainloop gehört nicht in __init__.
`quit_application` ruft eine nicht vorhandene Funktion `quit` auf.
In `create_grid` gibt es viele `pass` die völlig überflüssig sind. `i` kann man auch einfach aus j und k berechnen. Obwohl, die erste Schleife und damit `i`ist eigentlich auch nicht nötig.
Genauso in `create_label` ist der Index unnötig:
Die for-Schleifen in den anderen Funktionen umzuschreiben, überlasse ich Dir.
In `is_won` verwendest Du & falsch. Boolsches und ist `and`.
Die viele Code-Dopplunge vermeidet man, indem man die Unterschiede in den gleich Aussehenden Zeilen durch Variablen ersetzt und den eigentlichen Code in eine Funktion auslagert.
`quit_application` ruft eine nicht vorhandene Funktion `quit` auf.
In `create_grid` gibt es viele `pass` die völlig überflüssig sind. `i` kann man auch einfach aus j und k berechnen. Obwohl, die erste Schleife und damit `i`ist eigentlich auch nicht nötig.
Code: Alles auswählen
def create_grid(self):
for j in range(3):
for k in range(3):
frame = Frame(self.root)
frame.grid(row=j, column=k, padx=2, ipadx=19, ipady=25)
frame.propagate(False)
self.frame_list.append(frame)
Code: Alles auswählen
def create_label(self):
for frame in self.frame_list:
var = StringVar()
var.set('?')
label = Label(frame, textvariable=var)
label.pack(side='top')
self.label_text_list.append(var)
self.label_list.append(label)
In `is_won` verwendest Du & falsch. Boolsches und ist `and`.
Die viele Code-Dopplunge vermeidet man, indem man die Unterschiede in den gleich Aussehenden Zeilen durch Variablen ersetzt und den eigentlichen Code in eine Funktion auslagert.
Wow, vielen Dank.
Da hab ich wohl noch viel zu verbessern :/
Vieles davon habe ich direkt verstanden, über einiges muss ich noch nachdenken, aber eine Frage hätte ich direkt noch:
Anstatt "quit" zu benutzen, wie schließt man denn ein Programm "ordentlich"?
"quit" tut nämlich genau was es soll?!
Da hab ich wohl noch viel zu verbessern :/
Vieles davon habe ich direkt verstanden, über einiges muss ich noch nachdenken, aber eine Frage hätte ich direkt noch:
Anstatt "quit" zu benutzen, wie schließt man denn ein Programm "ordentlich"?
"quit" tut nämlich genau was es soll?!
"""
Code by: erynur
Contact: erynur0@gmail.com
Feel free to use this code for personal or educational purpose
"""
Code by: erynur
Contact: erynur0@gmail.com
Feel free to use this code for personal or educational purpose
"""
- __blackjack__
- User
- Beiträge: 14042
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@erynur: Man ruft die `quit()`-Methode auf einem Tk-Widget auf. Die `quit()`-Funktion die Du da aufrufst mag genau das tun was sie soll, nur gibt es sie nicht offiziell, das ist also Zufall.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Ah okay, vielen Dank.
"""
Code by: erynur
Contact: erynur0@gmail.com
Feel free to use this code for personal or educational purpose
"""
Code by: erynur
Contact: erynur0@gmail.com
Feel free to use this code for personal or educational purpose
"""