Как выполнить матрицу в виде случайных чисел?

ttd2001

Новичок
Пользователь
Мар 17, 2022
12
1
3
Я создала таблицу, и думала заполнить её случайными числами, но что- то мне подсказывает, что это не то, что нужно. Смертно прошу помощи:cry: Задание указала в коде.

Python:
"""На пространстве формы изображена матрица случайных чисел от 0 до 99 размером
7х7. Метка в виде овала исходно находится в начале четвертой строки, а после
запуска циклически движется сначала против часовой стрелки, потом по часовой, по
траектории вида с дискретом времени 0.6 сек. Запуск/остановка движения –
кнопка Checkbutton. Остановка приводит к установке рамки в исходное положение."""

# Начальные координаты для построения интерфейса
from telnetlib import AYT
from tkinter import *
import time

SX = 10
SY = 10

# Создает контейнер Canvas
def elementСanvasMatrix():

    global elСanvasMatrix

    elСanvasMatrix = Canvas(width=500, height=510, bg="white")
    elСanvasMatrix.place(x=SX, y=SY)

# Создает матрицу
def elementRectangeofMatrix():

    # Координаты первого квадрата матрицы
    # UpLtCr - UpperLeftCorner; LrRtCr - LowerRightCorner
    UpLtCRectangleX = SX
    UpLtCRectangleY = SY * 2
    LrRtCrRectangleX = SX * 7
    LrRtCrRectangleY = SY * 8

    # Координаты смещения для построения таблицы из квадратов. "X" - столбец, "Y" - строка.
    DeltaX = SX * 7
    DeltaY = SY * 7

    # Множитель координат для построения строки
    Row1 = 0
    Row2 = 1
    Row3 = 2
    Row4 = 3
    Row5 = 4
    Row6 = 5
    Row7 = 6

    # Множитель координат для построения столбца
    Column1 = 0
    Column2 = 1
    Column3 = 2
    Column4 = 3
    Column5 = 4
    Column6 = 5
    Column7 = 6

    def ColumnOne():

        global Col1Row1X1, Col1Row1Y1, Col1Row1X2, Col1Row1Y2
        global Col1Row2X1, Col1Row2Y1, Col1Row2X2, Col1Row2Y2
        global Col1Row3X1, Col1Row3Y1, Col1Row3X2, Col1Row3Y2
        global Col1Row4X1, Col1Row4Y1, Col1Row4X2, Col1Row4Y2
        global Col1Row5X1, Col1Row5Y1, Col1Row5X2, Col1Row5Y2
        global Col1Row6X1, Col1Row6Y1, Col1Row6X2, Col1Row6Y2
        global Col1Row7X1, Col1Row7Y1, Col1Row7X2, Col1Row7Y2

        # Формулы расчета координат для создания квадратов матрицы
        # Col № - Column; Row № - Row

        # Столбец 1 Ячейка 1;
        # Координаты квадрата
        Col1Row1X1 = UpLtCRectangleX + (DeltaX * Column1)
        Col1Row1Y1 = UpLtCRectangleY + (DeltaY * Row1)
        Col1Row1X2 = LrRtCrRectangleX + (DeltaX * Column1)
        Col1Row1Y2 = LrRtCrRectangleY + (DeltaY * Row1)
        # Координаты текста в квадрате
        Col1Row1TextX = Col1Row1X1 + ((Col1Row1X2 - Col1Row1X1) / 2)
        Col1Row1TextY = Col1Row1Y1 + ((Col1Row1Y2 - Col1Row1Y1) / 2)

        # Столбец 1 Ячейка 2
        Col1Row2X1 = UpLtCRectangleX + (DeltaX * Column1)
        Col1Row2Y1 = UpLtCRectangleY + (DeltaY * Row2)
        Col1Row2X2 = LrRtCrRectangleX + (DeltaX * Column1)
        Col1Row2Y2 = LrRtCrRectangleY + (DeltaY * Row2)
        # Координаты текста в квадрате
        Col1Row2TextX = Col1Row2X1 + ((Col1Row2X2 - Col1Row2X1) / 2)
        Col1Row2TextY = Col1Row2Y1 + ((Col1Row2Y2 - Col1Row2Y1) / 2)

        # Столбец 1 Ячейка 3
        Col1Row3X1 = UpLtCRectangleX + (DeltaX * Column1)
        Col1Row3Y1 = UpLtCRectangleY + (DeltaY * Row3)
        Col1Row3X2 = LrRtCrRectangleX + (DeltaX * Column1)
        Col1Row3Y2 = LrRtCrRectangleY + (DeltaY * Row3)
        # Координаты текста в квадрате
        Col1Row3TextX = Col1Row3X1 + ((Col1Row3X2 - Col1Row3X1) / 2)
        Col1Row3TextY = Col1Row3Y1 + ((Col1Row3Y2 - Col1Row3Y1) / 2)

        # Столбец 1 Ячейка 4
        Col1Row4X1 = UpLtCRectangleX + (DeltaX * Column1)
        Col1Row4Y1 = UpLtCRectangleY + (DeltaY * Row4)
        Col1Row4X2 = LrRtCrRectangleX + (DeltaX * Column1)
        Col1Row4Y2 = LrRtCrRectangleY + (DeltaY * Row4)
        # Координаты текста в квадрате
        Col1Row4TextX = Col1Row4X1 + ((Col1Row4X2 - Col1Row4X1) / 2)
        Col1Row4TextY = Col1Row4Y1 + ((Col1Row4Y2 - Col1Row4Y1) / 2)

        # Столбец 1 Ячейка 5
        Col1Row5X1 = UpLtCRectangleX + (DeltaX * Column1)
        Col1Row5Y1 = UpLtCRectangleY + (DeltaY * Row5)
        Col1Row5X2 = LrRtCrRectangleX + (DeltaX * Column1)
        Col1Row5Y2 = LrRtCrRectangleY + (DeltaY * Row5)
        # Координаты текста в квадрате
        Col1Row5TextX = Col1Row5X1 + ((Col1Row5X2 - Col1Row5X1) / 2)
        Col1Row5TextY = Col1Row5Y1 + ((Col1Row5Y2 - Col1Row5Y1) / 2)

        # Столбец 1 Ячейка 6
        Col1Row6X1 = UpLtCRectangleX + (DeltaX * Column1)
        Col1Row6Y1 = UpLtCRectangleY + (DeltaY * Row6)
        Col1Row6X2 = LrRtCrRectangleX + (DeltaX * Column1)
        Col1Row6Y2 = LrRtCrRectangleY + (DeltaY * Row6)
        # Координаты текста в квадрате
        Col1Row6TextX = Col1Row6X1 + ((Col1Row6X2 - Col1Row6X1) / 2)
        Col1Row6TextY = Col1Row6Y1 + ((Col1Row6Y2 - Col1Row6Y1) / 2)

        # Столбец 1 Ячейка 7
        Col1Row7X1 = UpLtCRectangleX + (DeltaX * Column1)
        Col1Row7Y1 = UpLtCRectangleY + (DeltaY * Row7)
        Col1Row7X2 = LrRtCrRectangleX + (DeltaX * Column1)
        Col1Row7Y2 = LrRtCrRectangleY + (DeltaY * Row7)
        # Координаты текста в квадрате
        Col1Row6TextX = Col1Row7X1 + ((Col1Row7X2 - Col1Row7X1) / 2)
        Col1Row6TextY = Col1Row7Y1 + ((Col1Row7Y2 - Col1Row7Y1) / 2)

    
        # 1 ячейка
        elСanvasMatrix.create_rectangle(Col1Row1X1, Col1Row1Y1, Col1Row1X2,
                                          Col1Row1Y2)

        # 2 Ячейка
        elСanvasMatrix.create_rectangle(Col1Row2X1, Col1Row2Y1, Col1Row2X2,
                                          Col1Row2Y2)

        # 3 Ячейка
        elСanvasMatrix.create_rectangle(Col1Row3X1, Col1Row3Y1, Col1Row3X2,
                                          Col1Row3Y2)

        # 4 Ячейка
        elСanvasMatrix.create_rectangle(Col1Row4X1, Col1Row4Y1, Col1Row4X2,
                                          Col1Row4Y2)

        # 5 Ячейка
        elСanvasMatrix.create_rectangle(Col1Row5X1, Col1Row5Y1, Col1Row5X2,
                                          Col1Row5Y2)

        # 6 Ячейка
        elСanvasMatrix.create_rectangle(Col1Row6X1, Col1Row6Y1, Col1Row6X2,
                                          Col1Row6Y2)

        # 7 Ячейка
        elСanvasMatrix.create_rectangle(Col1Row7X1, Col1Row7Y1, Col1Row7X2,
                                          Col1Row7Y2)

    # Вызов вложенной функции по построению Столбца "One"
    ColumnOne()
    # (Я так выполняю все столбцы, а форум не позволяет больше 1000 символов)

# Создает интерфейс программы
def mainWindowProgram():
    elementСanvasMatrix()
    elementRectangeofMatrix()
# Задает параметры окна программы
def application():
    global root
    root = Tk()
    root.title("20-ЗИЭ КР №2. Задание №4. Вариант 2-26. Трофимова Татьяна Дмитриевна")
    root.geometry("520x570")
    root.resizable(0, 0)
    mainWindowProgram()
    root.mainloop()
application()
 
Последнее редактирование модератором:

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Это не ответ, но все таки, веришь-ли ты в циклы?
Python:
from tkinter import *
import time
SX = 10
SY = 10
# Пояснение к функции должно писаться в функции

def elementСanvasMatrix():
    """
    Создает контейнер Canvas
    """
    global elСanvasMatrix
    elСanvasMatrix = Canvas(width=500, height=510, bg="white")
    elСanvasMatrix.place(x=SX, y=SY)


def elementRectangeofMatrix():
    """
    Создает матрицу
    """
    # Координаты первого квадрата матрицы
    # UpLtCr - UpperLeftCorner; LrRtCr - LowerRightCorner
    UpLtCRectangleX = SX
    UpLtCRectangleY = SY * 2
    # Координаты смещения для построения таблицы из квадратов. "X" - столбец, "Y" - строка.
    DeltaX = SX * 7
    DeltaY = SY * 7
     
    for x in range(7):
        x = UpLtCRectangleX + (DeltaX * x)
        for y in range(7):
            y = UpLtCRectangleY + (DeltaY * y)
            elСanvasMatrix.create_rectangle(x, y, x+70, y+70)


def mainWindowProgram():
    """
    Создает интерфейс программы
    """
    elementСanvasMatrix()
    elementRectangeofMatrix()
 

def application():
    """
    Задает параметры окна программы
    """
    global root
    root = Tk()
    root.title(
        "20-ЗИЭ КР №2. Задание №4. Вариант 2-26. Трофимова Татьяна Дмитриевна")
    root.geometry("520x570")
    root.resizable(0, 0)
    mainWindowProgram()
    root.mainloop()

application()

P.s. не стоит генерить таблицы вручную
 
  • Мне нравится
Реакции: ttd2001

ttd2001

Новичок
Пользователь
Мар 17, 2022
12
1
3
Это не ответ, но все таки, веришь-ли ты в циклы?
Python:
from tkinter import *
import time
SX = 10
SY = 10
# Пояснение к функции должно писаться в функции

def elementСanvasMatrix():
    """
    Создает контейнер Canvas
    """
    global elСanvasMatrix
    elСanvasMatrix = Canvas(width=500, height=510, bg="white")
    elСanvasMatrix.place(x=SX, y=SY)


def elementRectangeofMatrix():
    """
    Создает матрицу
    """
    # Координаты первого квадрата матрицы
    # UpLtCr - UpperLeftCorner; LrRtCr - LowerRightCorner
    UpLtCRectangleX = SX
    UpLtCRectangleY = SY * 2
    # Координаты смещения для построения таблицы из квадратов. "X" - столбец, "Y" - строка.
    DeltaX = SX * 7
    DeltaY = SY * 7
    
    for x in range(7):
        x = UpLtCRectangleX + (DeltaX * x)
        for y in range(7):
            y = UpLtCRectangleY + (DeltaY * y)
            elСanvasMatrix.create_rectangle(x, y, x+70, y+70)


def mainWindowProgram():
    """
    Создает интерфейс программы
    """
    elementСanvasMatrix()
    elementRectangeofMatrix()
 

def application():
    """
    Задает параметры окна программы
    """
    global root
    root = Tk()
    root.title(
        "20-ЗИЭ КР №2. Задание №4. Вариант 2-26. Трофимова Татьяна Дмитриевна")
    root.geometry("520x570")
    root.resizable(0, 0)
    mainWindowProgram()
    root.mainloop()

application()

P.s. не стоит генерить таблицы вручную
ххаха,да,я знаю что это было очень тупо, и программист из меня такой себе, но как теперь заполнить эту таблицу масивом?
Ну и всё таки это лучше чем ничего)))
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Заполнить можно в этом же цикле, прописывая текст по координатам, середина клетки x+35; y+35. Случайные числа - random.randint()

В цикл добавь строку
elСanvasMatrix.create_text(x+35, y+35, text=randint(0, 100))
а в начало кода
from random import randint
 
  • Мне нравится
Реакции: ttd2001

ttd2001

Новичок
Пользователь
Мар 17, 2022
12
1
3
Заполнить можно в этом же цикле, прописывая текст по координатам, середина клетки x+35; y+35. Случайные числа - random.randint()

В цикл добавь строку
elСanvasMatrix.create_text(x+35, y+35, text=randint(0, 100))
а в начало кода
from random import randint
аааа,что за конфетка! Боже, мне ещё у вас учиться и учиться сенсей)
 

ttd2001

Новичок
Пользователь
Мар 17, 2022
12
1
3
Заполнить можно в этом же цикле, прописывая текст по координатам, середина клетки x+35; y+35. Случайные числа - random.randint()

В цикл добавь строку
elСanvasMatrix.create_text(x+35, y+35, text=randint(0, 100))
а в начало кода
from random import randint
Ну и остается самое сложное, это анимация:cry: Буду пытаться творить, так как пока слабо представляю как это
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
А по какой траектории должен двигаться овал?

pixil-frame-0 (1).png

По периметру? Или как? И как часто менять направление?
 
  • Мне нравится
Реакции: ttd2001

ttd2001

Новичок
Пользователь
Мар 17, 2022
12
1
3
А по какой траектории должен двигаться овал?

Посмотреть вложение 1714

По периметру? Или как? И как часто менять направление?
По заданию, при нажатие на кнопку Запуск/Остановка он должен циклически двигаться сначала против часовой стрелки, потом по часовой, по траектории вида с дискретом времени 0.6. По идее как я понимаю, сначала круг движется по датам как стрелки на часах, но может я ошибаюсь.
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Просто такое ощущение что не хватает слова, "по траектории вида (круга) с дискретом времени 0,6" например. Под дискретом я так понял подразумевается частота перемещений (каждые 0,6 секунды).
Общая логика такая:
1) Хранишь где-то положение овала
2) В функции вычисляешь новую позицию и перемещаешь овал
3) Задаешь новый запуск функции через 0.6 сек

Пример программы с анимацией:
Python:
from tkinter import *

def motion():
    c.move(ball, 1, 0)
    if c.coords(ball)[2] < 300:
        # Запускаем эту же функцию через 10 милисекунд
        root.after(10, motion)

root = Tk()
c = Canvas(root, width=300, height=200,
           bg="white")
c.pack()
ball = c.create_oval(0, 100, 40, 140,
                     fill='green')
motion()
root.mainloop()
 
  • Мне нравится
Реакции: ttd2001

ttd2001

Новичок
Пользователь
Мар 17, 2022
12
1
3
Просто такое ощущение что не хватает слова, "по траектории вида (круга) с дискретом времени 0,6" например. Под дискретом я так понял подразумевается частота перемещений (каждые 0,6 секунды).
Общая логика такая:
1) Хранишь где-то положение овала
2) В функции вычисляешь новую позицию и перемещаешь овал
3) Задаешь новый запуск функции через 0.6 сек

Пример программы с анимацией:
Python:
from tkinter import *

def motion():
    c.move(ball, 1, 0)
    if c.coords(ball)[2] < 300:
        # Запускаем эту же функцию через 10 милисекунд
        root.after(10, motion)

root = Tk()
c = Canvas(root, width=300, height=200,
           bg="white")
c.pack()
ball = c.create_oval(0, 100, 40, 140,
                     fill='green')
motion()
root.mainloop()
Вы совершенно правы, задание в вордовском документе, а там просто стрелки, сейчас вышлю изображение)
 

Вложения

  • Задача 4.JPG
    Задача 4.JPG
    39,6 КБ · Просмотры: 3

Форум IT Специалистов