2016-06-27 3 views
0

블랙 잭 게임 시뮬레이션을하는 동안 for 루프를 사용하여 문제가 발생했습니다. 함수 new_game은 처리중인 카드 4 개를 시뮬레이트하는 반면, new_card은 게임에서 카드가 반복되지 않도록합니다. 나는 함수 new game의 두 가지 변형을 만들고 어떻게 다른지 궁금해하고있었습니다.블랙 잭 게임 : 'for vs'in '

버전 1에서는 기능이 3 장만 반환하는 반면 버전 2는 예상대로 작동하는 경우가있었습니다.

버전 1 :

def new_game(): 
game=[]; 
for x in range(4): 
    n=new_card(); 
    if n not in game: 
     game+=[n]; 
    else: 
     new_game(); 
    print(game); 
return game 

버전 2 :

def new_game(): 
game=[]; 
for x in range(4): 
    n=new_card(); 
    if n in game: 
     new_game(); 
     print(game); 
    else: 
     game+=[n]; 
return game 
+0

여기에 'new_card'함수가 있습니다. def new_card() : \t s = [ 's', 'c', 'd', 'h']; \t n = 목록 (범위 (1,14)); \t return [random.choice (s), random.choice (n)]; ' – st4rgut

+0

new_card()가 유일한 카드를 생성 할 수 없을 때'new_game()'이 재귀 적으로 호출되는 이유를 이해하지 못한다. 루프 반복을 위해 고유 한 코드가 생성 될 때까지 코드가'new_card()'를 호출해야한다고 생각합니다. 어떻게 생각해? –

+0

OK, 그것을 지적 해 주셔서 감사합니다. 나는'new_game'이 반복되는 카드를 검사하는지 말하려고했다. 반복되는 카드가 발견되면 기능이 다시 시작됩니다. 'new_game()'이 작동하는 것처럼 보이지만,'new_card()'를 호출하는 것이 더 효율적이라고 생각합니까? – st4rgut

답변

1

new_game 호출이 프로젝트를 해결하는 가장 좋은 방법은 아닙니다. 내가 보여주고있는 여러 가지 방법을 시도 할 수 있습니다. 루프에 대한 상수가 아니라 원하는 길이가 될 때까지 목록의 길이를 확인하십시오.

def new_game(): 
    game=[]; 
    while len(game)!=4: 
     n = new_card() 
     while(n in game): 
      n = new_card() 
     else: 
      game.append(n) 
    return game 

print new_game() 

좋은 디자인이지만 여전히 작동하는지 그리고 사용자가 수정할 수 있는지 확실하지 않습니다. 이 제안에 대한 Blckknght에

편집

감사합니다.

def new_game(): 
    game=[] 
    while len(game)!=4: 
     n = new_card() 
     if n not in game: 
      game.append(n) 
    return game 

print new_game() 
+0

내부 루프에서'n = new_card()'를 원한다고 생각합니다. 그렇지 않으면 'n'이 바뀌지 않으므로 첫 번째 선택이 중복되면 영원히 계속 실행됩니다. – Blckknght

+0

나는 당신을 얻지 못한다. 첫 번째 픽은 어떻게 복제 될 수 있는가?'게임 '리스트는 처음에는 비어있다. 나는 개정했지만. 그것이 맞다고 생각하는지보십시오. 지적 해 주셔서 감사합니다. – formatkaka

+2

"first pick"은 바깥 쪽 while 루프에있는'n = new_card()'라인을 의미합니다 (내부 루프의 pick과 대비). 외부 루프의 이후 패스 중 하나에서만 발생합니다. 사실, Questioner의 'for'외부 루프를 'while'으로 변경 했으므로 실제로 내부 루프가 필요하지 않습니다. 당신은 단지 하나의 루프를 가질 수 있고'n이 아닌 게임 : game.append (n)'과'else' 블록을 사용할 수 있습니다. – Blckknght

관련 문제