2016-03-24 9 views
0

Ich arbeite an einem Zufallsgenerator für eine Schildkröte. Der Benutzer gibt eine Zeile, eine Spalte und einen Wahrscheinlichkeitswert zwischen 0 und 1 ein. Innerhalb meiner Hauptfunktion dreht sich die Schildkröte, basierend auf dem Wert der generierten Zufallszahl, entweder einen Schritt nach vorne in die Richtung, in die sie zeigt.Wert in einer Funktion zur wiederholten Verwendung in derselben Funktion zurückgeben?

Mein Problem ist, ich muss diese Funktion immer wieder wiederholen (über eine Schleife), aber jedes Mal die Werte aus dem vorherigen Lauf der Funktion in die nächste einfügen. Jeder Versuch, den ich gemacht habe (durch Zurückgeben eines Tupels mit den Werten und Eingeben dieser Werte in jeden Lauf der Funktion, mit Ausnahme des ersten) hat dazu geführt, dass der gleiche Wert der Funktion immer wieder zurückgegeben wird.

#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 
+0

Sie sind nie die Richtung zu ändern. – Signal

Antwort

0

Das Problem ist, dass Sie nicht tup jedes Mal, wenn Sie move_turtle rufen zu aktualisieren. Sie rufen auch move_turtle eine zusätzliche Zeit vor der Schleife. Dies ist nicht notwendig, da die Schleife den ersten Aufruf ausführt, wenn c == 0. So sollte es einfach sein: :) Setzen Sie den `rand_index` und` d = dir_list [rand_index] `Innenseite der Schleife

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) 
+0

Ja. Scheint jetzt gut zu laufen. Danke einen Haufen ... war länger dran, als ich zugeben möchte .. –

Verwandte Themen