在函数中返回值以重复使用同一函数?

时间:2016-03-24 00:28:05

标签: python loops return

我正在研究一只乌龟的随机行走发电机。用户输入0到1之间的行,列和概率值。在我的主函数中,根据生成的随机数的值,乌龟将朝着它面向的方向向前或向前走一步。

我的问题是我需要一遍又一遍地重复这个功能(通过一个循环),但每次都将上一次运行的值合并到下一个。我所做的每一次尝试(通过返回带有值的元组并将其输入到除第一个函数之外的每个函数运行中)都导致了反复返回的函数的相同值。

   #Random Walk Generator#
    import random
    import sys


    def move_turtle(row, col, direct, turn_prob ):
        dir_list = ['right', 'down', 'left', 'up']
        random.random()
        if random.random()<=turn_prob:
            p= dir_list.index(direct)
            if p==0:
                p2=1
            elif p==1:
                p2=2
            elif p==2:
                p2= 3
            elif p==3:
                p2 =0
            d2= dir_list[p2]
            direct= d2

        else: 
            if direct == 'right':
                col= col+1
            if direct== 'down':
                row=row+1
            if direct =='left':
                col= col-1
            if direct== 'up':
                row= row-1

        rettup = (row,col,direct)

        return rettup


    N= input('Enter the integer number of rows => ')
    print N
    M= input('Enter the integer number of cols => ')
    print M
    p= input("Enter the turtle's turn probability (< 1.0) => ")
    print p

    seed_value = 10*M + N
    random.seed(seed_value)

    dir_list = ['right', 'down', 'left', 'up']
    rand_index = random.randint(0,3)
    d = dir_list[rand_index]

    print 'Initial direction:',d
    tup= move_turtle(M,N,d,p)

    for c in range(249):
        if c==0:
            move_turtle(M,N,d,p)
        else:
            move_turtle(tup[0],tup[1],tup[2],p)
        '''
        if R>= M or R<= -1 or C>=N or C<=-1:
            print 'After', c, 'time steps the turtle fell off the', D, 'in column',C
            '''
        if c==20 or c==40 or c==60 or c==80 or c==100 or c==120 or c==140 or c==180 or c==200 or c==220 or c==240 or c==250:
            print 'Time step',c,': position (',N/2,',',M/2,')direction',d

1 个答案:

答案 0 :(得分:0)

问题是,每次拨打tup时,您都不会更新move_turtle。你还要在循环之前额外调用move_turtle {$ 1}}。这不是必需的,因为循环在c == 0时执行初始调用。所以它应该是:

for c in range(249):
    if c == 0:
        tup = move_turle(M, N, d, p)
    else:
        tup = move_turtle(tup[0], tup[1], tup[2], p)