2015-01-14 2 views
1

잘하는 메신저 학습 파이썬과 메신저 이런 종류의 텍스트 게임을 만들려고 노력하고 메신저 동안 루프에 ... 할 수있는 일들의 목록을 가지고 있으며, 사용자의 비교 raw_input이이 목록에 올랐다. 5 회 이내에 올바른 값을 선택하면 계속 시도하고, 그렇지 않으면 메시지로 죽는다. 여기 내 코드입니다 : 그것은 단지 하나와 함께 작동,휴식과 파이썬 중첩 루프

def die(why): 
    print why 
    exit(0) 

#this is the list user's input is compared to 
tools = ["paper", "gas", "lighter", "glass", "fuel"] 
#empty list that users input is appended to 
yrs = [] 
choice = None 
print "You need to make fire" 

while choice not in tools: 
    print "Enter what you would use:" 
    choice = raw_input("> ") 
    yrs.append(choice) 
    while yrs < 5: 
     print yrs 
     die("you tried too many times") 
    if choice in tools: 
     print "Well done, %s was what you needeed" % choice 
     break 

하지만 선택은 yrs 목록에 추가되지 않는 루프 동안하지만 그것은 영원히 이동 또는 도구 목록에있는 항목 중 하나가 될 때까지 사용자 입력으로 입력거야 , 그러나 ID가 5 개 시도로 제한하고 그 다음에 입력하고자 : die("You tried too many times") 하지만 그것은 나를 다이 메시지를 바로 첫 번째 시도 후 ... 을 내가 만족 답을 찾을 didnt는,이 포럼을 검색하고 제공, 나에게

도와주세요
+2

이는 유효한 Python 구문이 아닙니다. 코드의 들여 쓰기를 수정하십시오. –

답변

5

시도

if len(yrs) < 5: 
    print yrs 
else: 
    die("you tried many times") 

대신에. yrs이 목록이기 때문에 조건

yrs < 5 

는 항상 false를 반환하고 당신은 정수로 비교된다. 즉 yrs < 5 조건이 결코 참이 아니기 때문에 while yrs < 5 루프가 실행되지 않습니다. 프로그램에서이 루프를 건너 뛰고 die() 함수를 호출하면 즉시 종료됩니다. 따라서 위의 코드 조각과 마찬가지로 die을 조건문에 넣어야합니다.

대신 쓴 경우주의하시기 바랍니다 : 조건 len(yrs) < 5True에 체크 된 첫 번째 시간을 평가하는 것이기 때문에 당신이 무한 루프에 끝날 것 때문에

while len(yrs) < 5: 
    print yrs 

이도, 잘못된 것 사용자가 임의의 입력을 제공 할 수 없으며, 길이가 len(yrs) < 5 일 때 그 값이 달라질 수 있습니다.

당신은 사용자의 시도 이상 5 있다면 그들은 코드 흐름에 가야하지가 5보다 있는지 확인하기 위해 (위의 작성 등) if 성명에서 5 yrs길이을 비교하려는 것 (if choice in tools ...) 외부의 while 루프가 반복되기 전에 사용자가 다시 시도 할 수 있도록합니다.

0
from sys import exit 

    def die(why): 
     print why 
     exit() 

    tools = ["paper", "gas", "lighter", "glass", "fuel"] 
    choice = '' 
    tries = 0 

    print 'You have to make fire' 

    while choice not in tools: 
     choice = raw_input('What do you want to do?-->') 
     tries += 1 
     if tries == 5: 
      die('You tried too many times') 

    print 'Well done you made a fire!'