将变量从循环传递给条件语句

时间:2011-08-11 18:32:13

标签: python

我的程序中有这个功能。

def time(transcriptionFile) :
    ''' This function changes the time values in secs from the transcription file and keeps a list of start time and duration for each phoneme.'''
    with open("transcriptions.txt", "r") as tFile :
        timeList = []
        parameterList = []
        frame = 0.04
        lines = 0
        for line in tFile :
            lines += 1
            for i in range(lines) : 
                i = i * frame
            timeList.append(i)
            li = line.split()
            if li :
                start_time = (int(li[0]) / 10000000.)
                end_time = (int(li[1]) / 10000000.) 
                duration = ((int(li[1]) -int(li[0]))/10000000.)

                poly = poly_coeff(start_time, end_time, i)
                Newton(poly, parameterList) 

我想在i中使用poly_coeff作为参数。调用此函数的次数是文件中的行数。 i每行都在增加。因此,当第一次调用函数时,应该将第一个i值作为参数传递,然后第二次传递第二个i值,依此类推。

我肯定在这里做错了我能看到,却无法弄清楚如何以正确的方式做到这一点。另外我想在单个函数内部进行的操作太多了。拆分它会更好吗?但一切都与打开同一个文件有关。

3 个答案:

答案 0 :(得分:1)

如果您想要行号,那么您应该

poly = poly_coeff(start_time, end_time, lines)

如果您想使用行号*框架 然后做

poly = poly_coeff(start_time, end_time, lines * frame)

我不知道你要做什么

for i in range(lines) : 
    i = i * frame

答案 1 :(得分:0)

i仅在for循环中的范围内。在它之前添加一个声明,以便您以后可以访问它。

<snip>
for line in tFile :
            lines += 1
            i = 0
            for i in range(lines) : 
                i = i * frame
<snip>

...是的,我投票支持更多功能性编程;分解一下,使其更具可读性。

答案 2 :(得分:0)

编辑:看起来您实际上可能会出现缩进错误,您是否打算在timelist.append(i)的循环内部以i开头的所有内容?这会更有意义。

        ...
        for i in range(lines): 
            i = i * frame
            timeList.append(i)
            li = line.split()
            if li :
                start_time = (int(li[0]) / 10000000.)
                end_time = (int(li[1]) / 10000000.) 
                duration = ((int(li[1]) -int(li[0]))/10000000.)

                poly = poly_coeff(start_time, end_time, i)
                Newton(poly, parameterList) 

如果缩进是正确的,那么我不认为for i的for循环正在按照你的想法行事,这里有一个例子:

>>> for i in range(3):
...   print "before", i
...   i = i * 0.04
...   print "after", i
... 
before 0
after 0.0
before 1
after 0.04
before 2
after 0.08
>>> print i
0.08

所以基本上,在循环i相当于(lines-1)*frame之后。您可以在循环的每次迭代期间修改i,但会将其设置回每次迭代开始时范围内的下一个数字。

相关问题