在 python 中构建一个单词搜索生成器
Posted
技术标签:
【中文标题】在 python 中构建一个单词搜索生成器【英文标题】:Building a wordsearch generator in python 【发布时间】:2021-12-11 06:38:01 【问题描述】:我正在 Python 中创建一个单词搜索生成器,但是我遇到了出现在网格中的单词的问题。制作网格时,其中一个字母的坐标在那里,但不是整个单词。我不确定哪些部分出了问题,任何帮助将不胜感激
import string
import random
width = 10
height = 10
def place_words(words, grid):
words = random.choice([words, words[::-1]])
direction = random.choice([[1,0], [0,1], [1,1]])
xstart = width if direction[0] == 0 else width - len(words)
ystart = height if direction[1] == 0 else height - len(words)
x = random.randrange(0, xstart)
y = random.randrange(0, ystart)
print([x, y])
for i in range(0, len(words)):
grid[y + direction[1]*i][x + direction[0]*i] = words[i]
return grid
grid = [[random.choice(string.ascii_uppercase) for i in range(0, width)]
for j in range(0, height)]
for words in ["HELLO"]:
place_words(words, grid)
print("\n".join(map(lambda row: " ".join(row), grid)))
这是它的结果,你可以看到这个词不存在!
[3, 0]
R J E O K S Y U Q F
T E P U N B Y Z I O
J A Y N F D S V T Y
H G A M R W O T I M
O W J Q R G Q E D Q
W D J R T N N N Q N
K Z B X H V U Y J X
J F P D W F I C W U
C Z V B Q C Z R K X
E J A K R N J V S Y
【问题讨论】:
这可能是巧合/很好,因为您的网格宽度和高度值是相同的;你能解释一下为什么xstart
和ystart
的值表达式是完全相同的表达式吗?
您能解释一下您希望words = random.choice([words, words[::-1]])
做什么吗?它采用列表words
和反向列表words[::-1]
;我怀疑您打算将words
列表和单独反转的单词元素列表 [word[::-1] for word in words]
@JoshuaVoskamp 是的,我刚刚意识到 x 和 y,我已经更改了 y,以便它改为 ystart = height if direction[1] == 0 else height - len(words)跨度>
@JoshuaVoskamp 是的,我不知道如何得到单词中的每个字母,我认为这可能与此有关,但我不确定如何更改它以更正它
【参考方案1】:
您需要的唯一主要更改是return
上的缩进;正如您所指出的,您的代码确实放置了第一个字母,但没有放置其他字母。这是因为return
在您的for
循环内,所以它在第一次迭代时返回(在放置第一个字母之后)。
我建议做一些工作来充实这个想法,因为两个词可以在同一个网格上重叠(例如,在下面的示例中,DOOR
中的D
替换了HELLO
中的O
)。此外,在所写的方向矩阵中,左上角到右下角的对角线方向是可能的,但右上角到左下角的对角线方向不是。也许这些想法有帮助。以下是一些调整后的代码:
import string
import random
width = 8
height = 10
def place_word(word, grid):
word = random.choice([word, word[::-1]])
direction = random.choice([[1,0], [0,1], [1,1]])
print(f'Placing word in direction direction...')
xstart = width if direction[0] == 0 else width - len(word) - 1
ystart = height if direction[1] == 0 else height - len(word) - 1
x = random.randrange(0, xstart)
y = random.randrange(0, ystart)
print([x, y])
for c in range(len(word)):
grid[x + direction[0]*c][y + direction[1]*c] = word[c]
return grid
grid = [[random.choice(string.ascii_uppercase) for i in range(width)]
for j in range(height)]
for word in ["HELLO","DOOR","NINE","EIGHT"]:
place_word(word, grid)
print("\n".join(map(lambda row: " ".join(row), grid)))
"""Example output:
Placing OLLEH in direction [1, 1]...
[0, 3]
Placing DOOR in direction [0, 1]...
[0, 3]
Placing ENIN in direction [1, 0]...
[0, 0]
Placing THGIE in direction [1, 1]...
[1, 2]
e N L d o o r N
n T t B l J U Q
i Z G h L l D Q
n K S Y g M e D
Q V O I H i C h
K U W H K L e X
A A V M K X W N
G X D Q U E S B
W C G R E P R J
N G P V Q X N W
"""
【讨论】:
谢谢约书亚!我真的很感激帮助我朝着正确的方向前进!以上是关于在 python 中构建一个单词搜索生成器的主要内容,如果未能解决你的问题,请参考以下文章