Почему в Block.parts иногда возвращает None?

Недавно начал заниматься программированием и решил самостоятельно написать игру Тетрис на Python. Написав этот небольшой код, я столкнулся с небольшой проблемой: по задумке в Block.parts всегда должен возвращаться список с начальными координатами фигуры, но иногда туда возвращается None, я долго думал над тем, почему так происходит, но ничего не получилось. Можете, пожалуйста, помочь с решением данной проблемы?

Мой код:

from tkinter import *
import random
import time

WIDTH = 480
HEIGHT = 720
PART_SIZE = 40
FIGURES = []
field = []

for i in range(int(HEIGHT/PART_SIZE)):
    field.append(['-'] * int(WIDTH/PART_SIZE))
field.append(['='] * int(WIDTH/PART_SIZE))

FIGURES.append([(0,0), (0,1), (0,2)])
FIGURES.append([(0,0), (0,1), (0,2), (0,2)])

class Block():
    def __init__(self):
        self.posX = None
        self.posY = 0
        self.parts = self.GenerateFigure()

    def GenerateFigure(self):
        TestFigure = FIGURES[0] #FIGURES[random.randint(0, (len(FIGURES)-1))]
        self.posX = random.randint(9, ((WIDTH/40)-1)) #random.randint(0, ((WIDTH/40)-1))
        TempBool = True

        for i in TestFigure:
            if (i[1] + self.posX) >= (WIDTH/40):
                print(False, self.posX)
                self.GenerateFigure()
                TempBool = False
        
        if TempBool:
            print(True, self.posX, TestFigure)
            return TestFigure
    
    def Update(self):
        for i in self.parts:
            print(i)

Block = Block()

print('(1) ', Block.parts)
print('(2) ', Block.posX)

Ответы (1 шт):

Автор решения: CrazyElf
        for i in TestFigure:
            if (i[1] + self.posX) >= (WIDTH/40):
                print(False, self.posX)
                self.GenerateFigure() # <-- ничего не возвращает!
                TempBool = False

        if TempBool:
            print(True, self.posX, TestFigure)
            return TestFigure

Я так понимаю если не выполняется какое-то условие, вы рекурсивно вызываете ту же функцию. Но вы не возвращаете то, что она вернула. Нужно возвращать:

        for i in TestFigure:
            if (i[1] + self.posX) >= (WIDTH/40):
                print(False, self.posX)
                return self.GenerateFigure() # <-- теперь возвращает
                TempBool = False
→ Ссылка