2014-11-07 9 views
0

이것은 내가 프로그램에 대해 쓴 기능으로, 값을 목록 아래로 이동시키는 것으로 가정합니다.왜 내 함수가 목록을 제대로 추가하지 않습니까?

데프 moveCard (데크) : 내가 함수 그 자체 내에서 인쇄하지 않는

index = deck.index(27) 
    deck.pop(index) 
    left = deck[:index+1] 
    right = deck[index+1:] 
    left.append(27) 

    print (left + right) 

    deck = left + right 

그러나 제대로 두 목록을 추가하지 않습니다.

텍스트 목록 cards = [24, 27, 2, 5, 8, 11]을 사용하여 funtion을 실행하면 [24, 2, 27, 5, 8, 11] 인 적절한 목록이 인쇄됩니다. 그러나 그때 나는 방법을 실행 한 후에 카드의 가치를 묻는다면 [24, 2, 5, 8, 11]이됩니다. 왜 이런 일이 일어나고 있는거야?

카드 = [24, 27, 2 :

index = deck.index(JOKER1) 
    deck.pop(index) 
    left = deck[:index+1] 
    right = deck[index+1:] 
    left.append(JOKER1) 

    deck = left + right 
    print(left + right) 
    print(dec 

이 난의 shel/결과에 입력하는 것입니다 :

데프 move_joker_1 (데크) :

편집 이 제 기능입니다 5, 8, 11]

move_joker_1 (카드)

[24 (2) , 27, 5, 8, 11]

[24, 2, 27, 5, 8, 11]

인쇄 (카드)

[24, 2, 5, 8, 11]

당신이 deck라는 이름의 매개 변수를 가지고는 moveCard 기능 내부

:

+0

들여 쓰기를 코드와 일치하도록 수정할 수 있습니까? 'print'와'deck = ...'행은'moveCard' 함수의 일부입니까, 아니라고합니까? – abarnert

+0

또한 영어로 테스트하기 위해 수행 할 작업을 설명하는 대신 코드에 표시 할 수 있습니까? "단순히 카드의 가치를 묻는 것"은 무엇을 의미합니까? – abarnert

+0

@abarnert 내가 편집 했으니 까, 이거 괜찮 니 ?? –

답변

1

나는 당신의 문제는 이것이다 생각 . 먼저 다음과 같이하십시오 :

전달 된 실제 목록이 변경되어 호출자가이를 볼 수 있습니다. 나중에 그런

: 아무것도 변경되지

deck = left + right 

; 새 목록 left + right을 만들고 로컬 변수 deck을 이전 목록 대신 새 목록의 이름으로 변경합니다.


은 당신이 아마 여기에하고 싶은 반환 새 목록, 그래서 그가 원하는 곳 호출자는 저장할 수 있습니다. 그러나이 경우 원래 목록을 pop으로 변경하고 싶지는 않습니다.

다른 방법으로 두 번 모두 목록을 수정할 수 있습니다 (예 : deck[:] = left + right).

0

편집 : cards 목록을 수정하지 않습니다. 함수에 return 문을 넣은 다음 함수를 다음과 같이 호출해야합니다 : cards = move_joker_1(cards).

관련 문제