对不起,代码太长了,但我想这是你理解我问题的唯一方法。我写了这个代码:
def key_gen1(l):
''' function that receives a tuple of 25 letters
and then returns a tuple of tuples with 5 letters each
example: letters = ('A','B','C','D','E','F',\
'G','H','I','J', ' ', 'L', 'M', 'N', 'O', 'P',\
'Q', 'R', 'S', 'T', 'U', 'V', 'X', 'Z', '.')
key_gen1(letters) = (('A', 'B', 'C', 'D', 'E'),\
('F', 'G', 'H', 'I', 'J'), (' ', 'L', 'M', 'N', 'O'),\
('P', 'Q', 'R', 'S', 'T'), ('U', 'V', 'X', 'Z', '.')) '''
key = tuple(letters[i:i+5] for i in range(0, len(letters), 5))
return key
因此,假设上一个函数返回的内容形成一个矩阵形状键,每个字符都有一个坐标(行、列),例如:“H”=(1,2)。 例如:
0 1 2 3 4
0 ((‘A’, ‘B’, ‘C’, ‘D’, ‘E’),
1 (‘F’, ‘G’, ‘H’, ‘I’, ‘J’),
2 (‘ ’, ‘L’, ‘M’, ‘N’, ‘O’),
3 (‘P’, ‘Q’, ‘R’, ‘S’, ‘T’),
4 (‘U’, ‘V’, ‘X’, ‘Z’, ‘.’))
a接下来做的是一个函数,它接受上一个函数返回的键,然后返回属于给定键的任何字符的坐标。你知道吗
def obtain_code1(car, key):
key = key_gen(letters)
if car in range(key(0, 4)):
lin = '0'
if car in range(key(5, 9)):
lin = '1'
if car in range(key(10, 14)):
lin = '2'
if car in range(key(15, 19)):
lin = '3'
if car in range(key(20, 24)):
lin = '4'
if car in range(key(0, 4, 5)):
col = '0'
if car in range(key(5, 9, 5)):
col = '1'
if car in range(key(10, 14, 5)):
col = '2'
if car in range(key(15, 19, 5)):
col = '3'
if car in range(key(20, 24, 5)):
col = '4'
codcar = lin + col
return codcar
python shell中的结果应该是:
>>>obtain_code1('Q', key)
'31'
但我得到:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'key' is not defined
我不明白它为什么这么说。也许这是个愚蠢的错误,但我是python的初学者。再次抱歉的长代码,但我真的在这里挣扎。请帮忙。你知道吗
要完成您想要完成的任务,暴力方法是简单地迭代每一行:
这里的性能与搜索空间的大小有关。但是如果你改变了你的数据结构,你可以改善这一点。你知道吗
相关问题 更多 >
编程相关推荐