如何定义一个函数,将元组元素的位置返回为我定义的引用的坐标?

2024-09-28 23:26:27 发布

您现在位置:Python中文网/ 问答频道 /正文

对不起,代码太长了,但我想这是你理解我问题的唯一方法。我写了这个代码:

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的初学者。再次抱歉的长代码,但我真的在这里挣扎。请帮忙。你知道吗


Tags: ofkey函数代码inreturnifdef
1条回答
网友
1楼 · 发布于 2024-09-28 23:26:27

要完成您想要完成的任务,暴力方法是简单地迭代每一行:

In [2]: key
Out[2]: 
(('A', 'B', 'C', 'D', 'E'),
 ('F', 'G', 'H', 'I', 'J'),
 (' ', 'L', 'M', 'N', 'O'),
 ('P', 'Q', 'R', 'S', 'T'),
 ('U', 'V', 'X', 'Z', '.'))

In [3]: idx = None

In [4]: for i,row in enumerate(key):
    ...:     for j, letter in enumerate(row):
    ...:         if letter == 'Q':
    ...:             idx = (i,j)
    ...:             
    ...:             
    ...:             

In [5]: idx
Out[5]: (3, 1)

这里的性能与搜索空间的大小有关。但是如果你改变了你的数据结构,你可以改善这一点。你知道吗

相关问题 更多 >