自动更改def。参数使用循环

时间:2016-06-17 10:09:08

标签: python python-2.7

我正在尝试使用while循环更改定义的参数。

首先,我创建了一个计算变量的函数,这个函数需要一个输入,当while循环保持True时它会改变。我尝试使用“+ =”命令更改输入,但python不会将其识别为公式中输入的更改。有什么建议?

def test(x,y,z): 

    count = 0
    while count != 12:
        x-= z
        x= x* ((1+y))
        count += 1
    return x

end= test(x,y,z)

def rerun():
    test(x,y,z)

while end> 0:
    z += 1
    rerun()

请注意我尝试重新输入功能测试的变量是“z”。

2 个答案:

答案 0 :(得分:0)

您需要传入每次迭代要更改的参数:

def test(x,y,z): 
    for i in range(12):
        x -= z
        x *= 1 + y
    return x


def main():
    gx = 1
    gy = 5
    gz = 10

    # Define a function rerun which binds gx to x, gy to y and leaves one parameter open
    def rerun(z):
        test(gx,gy,z)


    # run rerun with that one left over parameter
    for gz in range(100):
        print rerun(gz)

main()

你会注意到我也改变了你的一些代码。 end从未被定义过 并且while i < 0: i += 1在Python中不是一个好的风格。

答案 1 :(得分:0)

除了几件事之外,你的程序是有效的。

您需要将end设置为rerun()的结果,否则如果输入while end > 0循环,它将永远运行,因为end永远不会更改。

您还需要从rerun返回一些内容。

此外,如果第一个end为否定,则不会输入最终的while end > 0循环。

您没有指定xyz的初始值。 我选择了10,2和3。 这是输出:

test 2922930 2 3 12
test 2125770 2 4 12
end loop 2125770 10 2 4
test 1328610 2 5 12
end loop 1328610 10 2 5
test 531450 2 6 12
end loop 531450 10 2 6
test -265710 2 7 12
end loop -265710 10 2 7

修订后的计划

def test(x,y,z): 
    count = 0
    while count != 12:
        x-= z
        x= x* ((1+y))
        count += 1
    print "test", x, y, z, count
    return x

x = 10
y = 2
z = 3
end= test(x,y,z)

def rerun():
    return test(x,y,z)  # return the result

while end> 0:           # loop is never entered if initial `end` is negative
    z += 1
    end = rerun()       # update `end`
    print "end loop", end, x, y, z