Функция next_c
продолжает работать после достижения return True
, а затем возвращает none
позже.
Я поместил операторы печати повсюду, чтобы узнать, что работает.«Отметьте 1» в операторе if непосредственно перед печатью оператора return, тогда оператор else выполняется сразу после.Если я поставлю return True
непосредственно перед оператором if if, я получу ожидаемые результаты для остальной части программы.
import numpy as np
A=[ ["I","L","A","W"],
["B","N","G","E"],
["I","U","A","O"],
["A","S","R","L"] ]
def next_c(atemp, x, y, word): #make a subarray from atemp and check to next c
suba = atemp[x-1:x+2:,y-1:y+2:]
for n in range(3):
for m in range(3):
if word[0] == suba[n][m]:
#here is the problem
if len(word) == 1:
print("Check1")
return True
else:
#change temp array char to 0 then get new sub array coords
atemp[x][y] = 0
x = x + n -1
y = y + m -1
next_c(atemp, x, y, word[1:])
def look(atemp, word, size):#look for 1st c in temp array
for x in range(size+1):
for y in range(size+1):
if atemp[x][y]==word[0]:
atemp[x][y] = 0 #replace letter with a 0
#this should return True but always gets None
if next_c(atemp, x, y, word[1:]):
print("Check2")
return True
def find_word(board, word):
a = np.array(board)
a = np.pad(a, 1, "constant")
if look(a, word, len(board)):
return True
return False
print(find_word(A, "BINGO")) #this should be True
После print('Check1')
Я ожидаю, что возвращаемый параметр True
перейдет к if next_c(atemp, x, y, word[1:]):
, так что будет выполнено print('Check2')
, за которым следует окончательный возврат True
из find_word
.