2015-12-12 4 views
-2

Делая программу, которая решает кубик Рубика на питоне я написал немного коды для поворота передней грани кубика Рубика:Python переменные не работает

c_top = top 
c_front = front 
c_left = left 
c_right = right 
c_back = back 
c_bottom = bottom 
for x in range(6,9): 
    right[x] = c_bottom[x] 
    top[x] = c_right[x] 
    left[x] = c_top[x] 
    bottom[x] = c_left[x]  

По какой-то причине он сделал что-то странное и изменился c_bottom и другие c_ вещи, хотя я только запускал функцию, код которой был один раз. Кто-нибудь знает, почему?

+0

Нет, не из этого кода. Что такое верх, фронт и т. Д.? –

ответ

1

Это потому, что c_bottom и bottom являются обе переменными, ссылающимися на один и тот же объект. Это означает, что c_bottom[x] совпадает с bottom[x] за каждые x в range(0, len(bottom)).

Так что, когда вы делаете bottom[x] = c_left[x], c_bottom[x] также изменяется.

Упрощенный пример:

a = ['Hello', 0, 0] 
b = a 

print(a[0]) # <<< Hello 
b[0] = 'Goodbye' 
print(a[0]) # <<< Goodbye 

Edit: Для того, чтобы решить эту проблему, вы можете:

а) сделать c_side быть копией стороне. Если они список, например, вы можете сделать

c_bottom = list(bottom) 

б) Однако, если вы хотите только те c_side переменных для выполнения этого цикла, вы можете не делать копии с:

for x in range(6,9): 
    right[x], top[x], left[x], bottom[x] = bottom[x], right[x], top[x], left[x] 
+0

Как мне изменить c_bottom? – javaprogrammer

+0

Я только что отредактировал свой ответ, чтобы ответить, что – Dleep

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