Python传递函数参数作为列表标识符

2024-06-26 14:39:03 发布

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

我创建了一个函数,它可以接受一个参数,该参数定义了另一个调用来操作列表。例如,如果我直接调用sliprotor(Rotorid1,1),那么Rotorid1列表将根据需要进行操作。功能如下:

def sliprotor(rotorid,offset_qty):                          
    for movers in range(26,0,-1):
         rotorid[movers-1+offset_qty]=rotorid[movers-1]     
    for movers_refill in range(offset_qty):
         rotorid[movers_refill]=rotorid[movers_refill+26]   

但是,如果我试图通过构建列表名并执行它来“间接”调用它,则不会像直接调用时那样将“rotorid”转换为值。你知道吗

我做这件事的方式是

def set_curr_rotor(XX): 
    rotorid = "Rotorid"+str(XX)             
    return rotorid  

rid1 = input("First rotor slip : ")         
if(rid1): 
    sliprotor(set_curr_rotor(rid1),1)

因此,“间接”调用不会将set\u curr\u rotor函数创建的值传递给sliprotor函数。直接调用不使用传入的值。你知道吗

如果我查看debug,您可以看到它直接调用rotorid[]作为列表,而不是Rotorid1或其他Rotoridx,因此我得到了一个索引错误。你知道吗

。。。。 文件“”,第3行,在sliprotor中 rotorid[movers-1+offset\ U qty]=转子ID[movers-1] 索引器错误:字符串索引超出范围

我可以重组我的代码,但我不想。我是否缺少某些方法/范围问题?这只是Python的固有属性吗?我对Python非常陌生,所以我只是在做一个模拟谜机器的练习。你知道吗

谢谢你的帮助。 埃德


Tags: 函数列表参数defoffsetqtysetrotor
1条回答
网友
1楼 · 发布于 2024-06-26 14:39:03

我假设你已经定义了你的转子,像这样:

Rotorid1 = list('abcdefghijklmnopqrstuvwxyz')
Rotorid2 = list('abcdefghijklmnopqrstuvwxyz')

现在你不愿意改变这个,因为。。。原因。你知道吗

那很好。但你还是错了。您需要做的是创建一个更大的数据结构。你可以这样做:

Rotors = [ Rotorid1, Rotorid2, ... ]

现在你有了一个列表。Rotors变量现在包含所有各种Rotorid变量。(好吧,它引用了他们。但那就行了。)

不需要将变量名作为句柄传递给rotor,只需传入一个索引号:

def set_rotor(id):
    global Current_rotor
    Current_rotor = id

def slip_rotor(amount):
    global Current_rotor
    global Rotors

    rotor = Rotors[Current_rotor]

    for movers in range(26,0,-1):
        rotor[movers-1+offset_qty]=rotor[movers-1]      
    # etc...

另外,确保在Python中查找slicings——通过使用切片操作子列表和子字符串,您可以做很多事情。你知道吗

相关问题 更多 >