2014-09-27 2 views
0

, 우리가 'Ten'"하지에있는 동안"오류 -이 예에서 파이썬

목록 'PH'에 'Ten of Hearts'-PH[0]guess을 설정합니다 이동 물고기의 카드 게임에서 플레이어의 손을 나타냅니다. 사용자가 카드를 추측 할 때 카드는 자신의 카드와 일치하는 카드를 추측해야합니다. 이 코드 블록을 작성하여 사용자가 잘못된 추측을 입력하면 (추측이 PH에 있지 않으면 새로운 추측을 입력하라는 메시지가 다시 나타납니다)

변수에 문제가있는 것 같습니다. 배열 [guess1, guess2, guess3, guess4],하지만 나는 너무 확신하지 못합니다.

코드가 실행되면 루프가 영원히 계속됩니다. 추측을 반환하기 위해 루프에서 벗어나서 다음 함수에 입력 할 수 있어야합니다.

누군가가 내가 가지고있는 문제를 해결할 수 있도록 도와주십시오.

guess = str(raw_input("Make a guess : ")) 

guess11 = guess, 'of Hearts' 
guess1 = " ".join(guess11) 

guess22 = guess, 'of Diamonds' 
guess2 = " ".join(guess22) 

guess33 = guess, 'of Clubs' 
guess3 = " ".join(guess33) 

guess44 = guess, 'of Spades' 
guess4 = " ".join(guess44) 

while PH[0] not in [guess1, guess2, guess3, guess4] : 
    print "You do not have a card like that in your hand." 
    guess = str(raw_input("Make another guess : ")) 

    guess11 = guess, 'of Hearts' 
    guess1 = " ".join(guess11) 

    guess22 = guess, 'of Diamonds' 
    guess2 = " ".join(guess22) 

    guess33 = guess, 'of Clubs' 
    guess3 = " ".join(guess33) 

    guess44 = guess, 'of Spades' 
    guess4 = " ".join(guess44) 

return guess 
+5

그 코드가 내 눈을 아프게합니다! [DRY] (http://en.wikipedia.org/wiki/Don't_repeat_yourself) 코드 작성에 대해 자세히 알아보십시오. 그것은 당신의 삶을 훨씬 쉽게 만들어 줄 것입니다. – Basic

+0

'PH [0]'을''Heart of Tennesses''로,''Ten ''을''추측 ''으로 설정하면 저에게 효과적입니다. 루프가 올바르게 종료됩니다. – interjay

+0

'raw_input'은 이미 문자열입니다 –

답변

1

당신은 플레이어의 손에 첫 번째 카드 그가 추측 어떤의 경우 테스트하고 있습니다.

while not any(guess in PH for guess in [guess1, guess2, guess3, guess4]): 

각 예상 카드를 가져 와서 해당 카드를 차례로 테스트해야합니다. 일치가 발견되면 any()은 추측을 반복합니다.

더 좋은 생각은 여전히 ​​세트 교차로를 사용하는 것입니다

guesses = {guess1, guess2, guess3, guess4} 
while not guesses.intersection(PH): 
    # ask for new guesses 

당신은 두 번 코드 '추측 요청을'밖으로 입력하지 않으려; while True로 루프를 시작하고 올바른 추측이 이루어진 경우 루프를 종료 break를 사용

suits = ('Hearts', 'Diamonds', 'Clubs', 'Spades') 

while True: 
    guess = raw_input("Make a guess:") 
    guesses = {'{} of {}'.format(guess, suit) for suit in suits} 
    if guesses.intersection(PH): 
     # correct guess! 
     break 
    print "You do not have a card like that in your hand." 

나는 루프에서 추측을 구축하는 일련의 이해를 사용했다.

+1

@ EnvanCooper : 감사합니다. 그러나'PH' [0]에 일치하는 카드가있을 때까지 당신의'while' 루프는 끝나지 않습니다. 그 다른 부분들에는 결코 도달하지 않을 것입니다. –

+0

이제 알았습니다. 정말 고맙습니다 –

관련 문제