Python: как сохранить несколько координат (x, y) при изменении значений x и y?

#python-2.7 #tkinter

#python-2.7 #tkinter

Вопрос:

В игре, которую я создаю, мне нужно сохранить список координат x и y, но в списке хранится только последняя итерация. Как мне заставить его сохранять все итерации? Код, который я использовал, находится здесь:

 from Tkinter import *
import Tkinter as tk
import random
screen = tk.Tk(className = "Battle Ship Game" )
screen.geometry("300x300")
screen["bg"] = "white"

line1= list()
choosing = 0

def choice(x,y) :
    global choises
    choises = {}
    global list2
    list2 = []
    list2.append((x,y))
    print list2
    return list2

def buildaboard1(screen) :
    x = 20
    for n in range(0,10) :
        y = 20
        for i in range(0,10) :
            line1.append(tk.Button(screen ))
            line1[-1].place( x = x , y = y 20 , height = 20 , width = 20 )
            a = x
            b = y
            line1[-1]["command"] = (lambda a = x , b = y :choice (a , b))

            y = y 20
        x = x  20
choosing = choosing  1

while (choosing < 5) :
    buildaboard1(screen)
    choosing  = choosing  1
computer_choises
screen.mainloop()
  

Ответ №1:

Сделать list2 глобальным. Теперь вы очищаете list2 (создаете list2 = [] ), прежде чем добавлять новые (x,y)

Моя версия — я изменил имя list2 на interactions .

И я внес другие изменения.

 from Tkinter import *
import Tkinter as tk
import random
screen = tk.Tk(className = "Battle Ship Game" )

screen.geometry("300x300")
screen["bg"] = "white"

board= []
choises = {}
interactions = []

def choice(x,y) :
    global interactions

    interactions.append((x,y))
    print interactions

    return interactions # you don't have to return global variable

def build_board(screen) :
    size = 20
    x = 20
    for __ in range(10):
        y = 20
        for __ in range(10):
            bt = tk.Button(screen, command=lambda a=x,b=y:choice(a, b))
            bt.place( x=x, y=y size, height=size , width=size )
            board.append(bt)
            y  = size
        x  = size
    #print x, y

# I don't know why you create board many times - create once.
# Now you have buttons over buttons 
# because you don't remove old buttons before you create new board.
for choosing in range(1,5):
    build_board(screen)

#computer_choises

screen.mainloop()
  

РЕДАКТИРОВАТЬ: В текущей версии вам не нужно, choice() потому что вы могли бы использовать

 bt = tk.Button(screen, command=lambda a=x,b=y:interactions.append((a,b)))