Вкладені списки

Презентація 9 клас Урок 60

Вправа 35

Створити програму для виконання завдання.

Завдання. Територіальна громада ухвалила рішення про здавання в оренду частини території, що має форму прямокутника розміром 5 × 5 км. Вартість оренди кожної квадратної ділянки 1 × 1 км була визначена з урахуванням локальних умов і занесена в таблицю а. З метою організації відкритого тендеру на оренду на вебсайті громади оприлюднено карту території. Напишіть програму, що дозволяє розрахувати вартість оренди для довільної прямокутної групи сусідніх ділянок, якщо протилежні кути групи ділянок розташовані в елементах таблиці з індексами (і1, j1), (i2, j2).

1) Створіть Python file із назвою Оренда. Завантажте модулі tkinter, random. Створіть вікно програми tk із заголовком Вартість оренди. Заверште програму оператором tk.mainloop().

2) Створіть двовимірний масив об’єктів класу Label, який буде відображати карту території.

list_b=[[],[],[],[],[]]
for i in range (5):
for j in range (5):
list_b[i].append(Label(tk, bg = 'lightblue', width = 4))
list_b[i][j].grid(row = i, column = j, padx = 2, pady = 2)

3) Опишіть функцію output(), призначену для виведення значень елементів масиву а до елементів масиву list_b.

def output():
for i in range (5):
for j in range (5):
list_b[i][j].config(text = str(a[i][j]))

4) Заповніть масив а розміром 5 × 5 випадковими числами в діапазоні (1, 10) і запишіть оператор виклику функції output().

5) Додайте до вікна напис Координати верхнього лівого кута і створіть 2 об’єкти класу Entry для введення індексів ділянки, що знаходиться у лівому верхньому куті групи ділянок.

Label(tk, text = 'Координати верхнього лівого кута:').grid(row = 5, column = 0, columnspan = 5)
enx1 = Entry(tk, width = 3)
enx1.grid(row = 6, column = 1)
eny1=Entry(tk, width = 3)
eny1.grid(row = 6, column = 3)

Додайте до вікна напис Координати нижнього правого кута і створіть 2 об’єкти класу Entry для введення індексів ділянки, що знаходиться у правому нижньому куті групи ділянок. Додайте об’єкт envart класу Entry для виведення загальної вартості оренди визначеної групи ділянок.

envart = Entry(tk, width = 6)
envart.grid(row = 10, column = 2)

6) Створіть командну кнопку — об’єкт but класу Button:

but = Button(text = 'Обчислити', command = but_click, width =14).grid(row = 9, column = 0, columnspan = 5)

Опишіть функцію but_click() — обробник події Натискання на кнопку.

def but_click():
x1 = int(enx1.get())
y1 = int(eny1.get())
x2 = int(enx2.get())
y2 = int(eny2.get())
vart = 0
for i in range(x1, x2+1):
for j in range(y1, y2+1):
vart = vart+a[i][j]
envart.delete(0, END)
envart.insert(0, str(vart))

Випробуйте роботу програми.