[[0]*3]*3 versus [[0,0,0],[0,0,0],[0,0,0]]
Verfasst: Dienstag 22. Dezember 2020, 11:52
Hallo,
als Python-Neuling habe ich mir mal ein TicTacToe-Spiel von https://projectgurukul.org/python-tic-tac-toe-game/ mal angeschaut.
Warum kann ich aber in Zeile 21 grd bzw. curr nicht durch grd = [[0]*3]*3 bzw. curr = [[0]*3]*3 ersetzen?
Laut Variablen-Ansicht müsste dies doch das Gleiche bewirken???
import sys
import os.path
from tkinter import *
top_width = 580
top_hight = 400
top_title = 'mein Fenster'
x_btn = 8
y_btn = 10
def vp_start_gui():
'''Starting point when module is the main routine.'''
root = Tk()
root.title("ProjectGurukul Tic Tac Toe")
global usr, gamestatus, grd, curr
usr="O"
gamestatus=True
grd=[[0,0,0],
[0,0,0],
[0,0,0]]
curr=[[0,0,0],
[0,0,0],
[0,0,0]]
for i in range(3):
for j in range(3):
curr[j]=Button(font=('arial',30,'bold'),width=4,command=lambda r=i, c=j:click(r,c))
curr[j].grid(row=i,column=j)
root.mainloop()
def click(r,c):
global usr
global gamestatus
if(usr=='X' and grd[r][c]==0 and gamestatus==True):
grd[r][c]='X'
usr='O'
curr[r][c].configure(text='X',bg="white")
if(usr=='O' and grd[r][c]==0 and gamestatus==True):
grd[r][c]='O'
usr='X'
curr[r][c].configure(text='O',bg="gray")
checkWin()
def checkWin():
global gamestatus
for i in range(3):
if grd[0]==grd[1]==grd[2]!=0:
for j in range(3):
curr[j].config(bg="snow4",fg="white")
gamestatus=False
for i in range(3):
if grd[0]==grd[1]==grd[2]!=0:
for j in range(3):
curr[j].config(bg="snow4",fg="white")
gamestatus=False
if grd[0][2]==grd[1][1]==grd[2][0]!=0:
curr[0][2].config(bg="snow4",fg="white")
curr[1][1].config(bg="snow4",fg="white")
curr[2][0].config(bg="snow4",fg="white")
gamestatus=False
if grd[0][0]==grd[1][1]==grd[2][2]!=0:
for j in range(3):
curr[j][j].config(bg="snow4",fg="white")
gamestatus=False
if __name__ == '__main__':
vp_start_gui()
als Python-Neuling habe ich mir mal ein TicTacToe-Spiel von https://projectgurukul.org/python-tic-tac-toe-game/ mal angeschaut.
Warum kann ich aber in Zeile 21 grd bzw. curr nicht durch grd = [[0]*3]*3 bzw. curr = [[0]*3]*3 ersetzen?
Laut Variablen-Ansicht müsste dies doch das Gleiche bewirken???
import sys
import os.path
from tkinter import *
top_width = 580
top_hight = 400
top_title = 'mein Fenster'
x_btn = 8
y_btn = 10
def vp_start_gui():
'''Starting point when module is the main routine.'''
root = Tk()
root.title("ProjectGurukul Tic Tac Toe")
global usr, gamestatus, grd, curr
usr="O"
gamestatus=True
grd=[[0,0,0],
[0,0,0],
[0,0,0]]
curr=[[0,0,0],
[0,0,0],
[0,0,0]]
for i in range(3):
for j in range(3):
curr[j]=Button(font=('arial',30,'bold'),width=4,command=lambda r=i, c=j:click(r,c))
curr[j].grid(row=i,column=j)
root.mainloop()
def click(r,c):
global usr
global gamestatus
if(usr=='X' and grd[r][c]==0 and gamestatus==True):
grd[r][c]='X'
usr='O'
curr[r][c].configure(text='X',bg="white")
if(usr=='O' and grd[r][c]==0 and gamestatus==True):
grd[r][c]='O'
usr='X'
curr[r][c].configure(text='O',bg="gray")
checkWin()
def checkWin():
global gamestatus
for i in range(3):
if grd[0]==grd[1]==grd[2]!=0:
for j in range(3):
curr[j].config(bg="snow4",fg="white")
gamestatus=False
for i in range(3):
if grd[0]==grd[1]==grd[2]!=0:
for j in range(3):
curr[j].config(bg="snow4",fg="white")
gamestatus=False
if grd[0][2]==grd[1][1]==grd[2][0]!=0:
curr[0][2].config(bg="snow4",fg="white")
curr[1][1].config(bg="snow4",fg="white")
curr[2][0].config(bg="snow4",fg="white")
gamestatus=False
if grd[0][0]==grd[1][1]==grd[2][2]!=0:
for j in range(3):
curr[j][j].config(bg="snow4",fg="white")
gamestatus=False
if __name__ == '__main__':
vp_start_gui()