如何更改此代码以检查输入的单词是否会与另一个单词(填字游戏)相交?
How to change this code to check if the input word will intersect with another word(crossword)?
所以我有两个函数的代码。第一个打印一个空的 20x20 板,第二个打印中间的一个字。现在我正在尝试编写一个函数来检查输入的单词是否会与同一字母的另一个单词(如填字游戏)相交。
这是前两个函数的代码(这里不需要修改就可以工作):
blank = ' '
board = [[' '] * 20 for i in range(20)]
def printboard(board):
columns = '01234567890123456789'
rows = '_' * 20
print(' ' + columns)
print(' ' + rows)
for i in range(20):
s = ''.join(board[i])
print('|' + s +'|' + str(i))
print(' ' + rows)
print(' ' + columns)
def addFirstWord(board, word):
n = len(word)
if n > 20:
return False
row = 10
col = (20 - n) // 2
board[row][col:col+n] = word
return True
addFirstWord(board, 'hippopotamus')
这是我到目前为止尝试过的方法,但它只检查第一个位置和第一个字母等。
def checkvertical(board, word, row, col):
n = len(word)
if n > 20: #checks if word is larger than board
return False
for i in range (len(word)):
if board[row+i][col] == word[i]:
return True
else:
return False
print(checkvertical(board, 'horse', 10, 15))
printboard(board)
我想要的是一个函数,用于检查垂直打印的单词在从特定行和列开始向下打印时是否会与板上的现有单词正确相交。
这应该有效:
def checkvertical(board, word, row, col):
intersects = False
n = len(word)
if n > 20: #checks if word is larger than board
return False
for i, c in enumerate(word):
if board[row+i][col] not in [' ', word[i]]:
return False
elif board[row+i][col] == word[i]:
intersects = True
return intersects
给出:
>>> print(checkvertical(board, 'horse', 7, 14))
False
>>> print(checkvertical(board, 'horse', 7, 15))
True
>>> print(checkvertical(board, 'horse', 10, 4))
True
基本上,我们使用 enumerate 遍历单词并检查我们要放置该部分的位置是否包含相同的字母或为空白。如果我们永远找不到这样的地方,我们 return 正确。
所以我有两个函数的代码。第一个打印一个空的 20x20 板,第二个打印中间的一个字。现在我正在尝试编写一个函数来检查输入的单词是否会与同一字母的另一个单词(如填字游戏)相交。 这是前两个函数的代码(这里不需要修改就可以工作):
blank = ' '
board = [[' '] * 20 for i in range(20)]
def printboard(board):
columns = '01234567890123456789'
rows = '_' * 20
print(' ' + columns)
print(' ' + rows)
for i in range(20):
s = ''.join(board[i])
print('|' + s +'|' + str(i))
print(' ' + rows)
print(' ' + columns)
def addFirstWord(board, word):
n = len(word)
if n > 20:
return False
row = 10
col = (20 - n) // 2
board[row][col:col+n] = word
return True
addFirstWord(board, 'hippopotamus')
这是我到目前为止尝试过的方法,但它只检查第一个位置和第一个字母等。
def checkvertical(board, word, row, col):
n = len(word)
if n > 20: #checks if word is larger than board
return False
for i in range (len(word)):
if board[row+i][col] == word[i]:
return True
else:
return False
print(checkvertical(board, 'horse', 10, 15))
printboard(board)
我想要的是一个函数,用于检查垂直打印的单词在从特定行和列开始向下打印时是否会与板上的现有单词正确相交。
这应该有效:
def checkvertical(board, word, row, col):
intersects = False
n = len(word)
if n > 20: #checks if word is larger than board
return False
for i, c in enumerate(word):
if board[row+i][col] not in [' ', word[i]]:
return False
elif board[row+i][col] == word[i]:
intersects = True
return intersects
给出:
>>> print(checkvertical(board, 'horse', 7, 14))
False
>>> print(checkvertical(board, 'horse', 7, 15))
True
>>> print(checkvertical(board, 'horse', 10, 4))
True
基本上,我们使用 enumerate 遍历单词并检查我们要放置该部分的位置是否包含相同的字母或为空白。如果我们永远找不到这样的地方,我们 return 正确。