2016-12-07 4 views
0

У меня есть этот фрагмент кода, в котором я пытаюсь создать цикл внутри цикла, чтобы определить, существует ли определенная позиция дважды.Изменение значений

current_dir = 1 
position = [0,0] 
index = 0 
move_list = ["L2", "L3", "L3", "L4", "R1", "R2", "L3", "R3", "R3", "L1", "L3", "R2", "R3", "L3", "R4", "R3", "R3", "L1", "L4", "R4", "L2", "R5", "R1", "L5", "R1", "R3", "L5", "R2", "L2", "R2", "R1", "L1", "L3", "L3", "R4", "R5", "R4", "L1", "L189", "L2", "R2", "L5", "R5", "R45", "L3", "R4", "R77", "L1", "R1", "R194", "R2", "L5", "L3", "L2", "L1", "R5", "L3", "L3", "L5", "L5", "L5", "R2", "L1", "L2", "L3", "R2", "R5", "R4", "L2", "R3", "R5", "L2", "L2", "R3", "L3", "L2", "L1", "L3", "R5", "R4", "R3", "R2", "L1", "R2", "L5", "R4", "L5", "L4", "R4", "L2", "R5", "L3", "L2", "R4", "L1", "L2", "R2", "R3", "L2", "L5", "R1", "R1", "R3", "R4", "R1", "R2", "R4", "R5", "L3", "L5", "L3", "L3", "R5", "R4", "R1", "L3", "R1", "L3", "R3", "R3", "R3", "L1", "R3", "R4", "L5", "L3", "L1", "L5", "L4", "R4", "R1", "L4", "R3", "R3", "R5", "R4", "R3", "R3", "L1", "L2", "R1", "L4", "L4", "L3", "L4", "L3", "L5", "R2", "R4", "L2"] 
for i in move_list: 
    turn = i[0] 
    movement = int(i[1:]) 
    if turn == "R": 
     current_dir += 1 
     if current_dir > 4: 
      current_dir = 1 
    if turn == "L": 
     current_dir -= 1 
     if current_dir < 1: 
      current_dir = 4 
    if current_dir == 1: #Move North 
     position[1] += movement 
    if current_dir == 3: #Move South 
     position[1] -= movement 
    if current_dir == 2: #Move East 
     position[0] += movement 
    if current_dir == 4: #Move West 
     position[0] -= movement 
    position_2 = position 
    current_dir2 = current_dir 
    turn2 = turn 
    for f in move_list[index+1:]: 
     turn2 = f[0] 
     movement2 = int(f[1:]) 
     if turn2 == "R": 
      current_dir2 += 1 
      if current_dir2 > 4: 
       current_dir2 = 1 
     if turn2 == "L": 
      current_dir2 -= 1 
      if current_dir2 < 1: 
       current_dir2 = 4 
     if current_dir2 == 1: # Move North 
      position_2[1] += movement2 
     if current_dir2 == 3: # Move South 
      position_2[1] -= movement2 
     if current_dir2 == 2: # Move East 
      position_2[0] += movement2 
     if current_dir2 == 4: # Move West 
      position_2[0] -= movement2 
     print position_2 
    print position 
    i = + 1 
    index += 1 

Он должен работать нормально, но у меня есть проблема, когда значение позиции изменяется, когда я пытаюсь изменить position_2, и я действительно не понимаю, почему.

Это меняет в этой части

if current_dir2 == 1: # Move North 
    position_2[1] += movement2 
if current_dir2 == 3: # Move South 
    position_2[1] -= movement2 
if current_dir2 == 2: # Move East 
    position_2[0] += movement2 
if current_dir2 == 4: # Move West 
    position_2[0] -= movement2 

ответ

0

Ваша проблема в том, когда вы говорите position_2 = position. Это делает точку позиции на том же объекте, что и position_2. Полезная статья here. Вы должны сказать:

position_2 = position[:] 

, чтобы они указывали на разные объекты.

0

Nevermind Я понял это, тот факт, что я делаю Position2 = положение означает, что они оба указывают на то же Arry. Я узнал об этом, прежде чем я этого не осознал.

+0

Также подтвердите 'i = + 1' часть вашего кода. Я верю своей неправильной логике. 'i' изначально является членом move_list, но вы пытаетесь добавить 1 к этому. –

+0

@VijayakumarUdupa: Это не добавление одного, оно заменяет его 1. Не повредит ничего, потому что 'i' автоматически обновляется по циклу, это просто не-op для большинства целей. – ShadowRanger

+0

Упс, прочитайте неверный код. –

Смежные вопросы