2016-07-03 2 views
0
from random import randint 

count = 0 
Validation = False 

def generateNumber(): 
    Number = randint(1, 10) 
    return Number 

def checkNumber(Guess): 
    Number = generateNumber() 
    if int(Guess) == Number and count < 1: 
     return "First time right! Genius?" 
     Validation = True 

    elif int(Guess) == Number and count == 2: 
     return "Correct. Second time, nice!" 
     Validation = True 
    elif int(Guess) == Number and count < 4: 
     return "Correct. Good job." 
     Validation = True 
    elif int(Guess) == Number and count > 3: 
     return "Correct. Took you long enough." 
     Validation = True 
    else: 
     return "Wrong! Try again " 

while Validation == False: 
    Guess = input("Please guess a number between 1 to 10: ") 
    print (checkNumber(Guess)) 
    count += 1 
else: 
    TryAgain = input("Would you like to try again? y/n \n") 

그래서 문제는 사용자가 올바른 숫자를 추측 할 때입니다. 유효성 검사를 True로 설정해야합니다. 따라서 while 루프는 루핑을 멈 춥니 다. 그러나 변수 유효성 검사는 플레이어가 올바른 숫자를 추측 할 때 True가되지 않습니다.함수에서 변수 변경하기

+0

유효성 검사는 전역으로 접두사를 붙이지 않는 한 로컬로 간주됩니다. 함수에서 전역 유효성 검사를 참조하려면 함수에서 '전역 유효성 검사'와 같이 선언해야합니다.이 방법으로 값을 변경할 때 지속성이됩니다 –

+0

흠. 전역에 추가 할 때, 함수 자체, 위에있는 변수 선언 또는 while 루프에서 수행합니다. 그것은 나에게 잘못된 구문 오류를 제공합니다. – Soundwave

+0

코드의 또 다른 주요 문제점은 유효성 검사 필드를 설정하기 전에 함수를 효과적으로 중단하는 문자열을 반환한다는 것입니다. 올바른 순서에 대한 내 대답을보십시오 ('Validation = True' 만'return "보다 ...") –

답변

0

파이썬의 전역 변수는 약간 까다 롭습니다. 변수를 파일 맨 위에 선언하는 것만으로는 충분하지 않습니다. 또한

는 입력 및 다른 들여 쓰기

대신에 raw_input을 사용하는 보정을 참조,이 변수

마지막 문제를 설정하기 전에 종료 할 동안 로직 기능을한다 원인은 유효성 검사 값을 설정하기 전에 값을 반환 유지

전역 변수에 대한 읽기 전용 액세스는 예상대로 작동하지만 함수에서 해당 값을 변경하려면 추가 단계가 필요하므로 전역 변수를 전역 변수로 선언해야합니다. 귀하의 경우 :

if int(Guess) == Number and count < 1: 
    Validation = True 
    return "First time right! Genius?" 

모든 경우 명령문에 대해이 작업을 수행 :

def generateNumber(): 
    Number = randint(1, 10) 
    return Number 

def checkNumber(Guess): 
    global Validation #<-- this instructs Python to use the global variable 
    Number = generateNumber() 
    if int(Guess) == Number and count < 1: 
     Validation = True 
     return "First time right! Genius?" 

    elif int(Guess) == Number and count == 2: 
     Validation = True 
     return "Correct. Second time, nice!" 

    elif int(Guess) == Number and count < 4: 
     Validation = True 
     return "Correct. Good job." 

    elif int(Guess) == Number and count > 3: 
     Validation = True 
     return "Correct. Took you long enough." 

    else: 
     return "Wrong! Try again " 

while Validation == False: 
    Guess = input("Please guess a number between 1 to 10: ") 
    print (checkNumber(Guess)) 
    count += 1 
    if (Validation): 
     if (raw_input("Would you like to try again? y/n \n") == "y"): 
      count = 0 
      Validation = False 
     else: 
      break 
0

당신은이 같은 방법에서 돌아 검증 이전 진정한 에 설정해야합니다.

0

난 당신의 코드에서 두 (반) 문제 발견 :

  1. 바와 같이 Ishay 펠 레드 지적을, 당신은 전에
  2. 귀하의 "반환"문
  3. 을 위치 확인이 글로벌해야 당신 어떤 "다른"이 없습니다 여기

업데이트 된 코드의 "동안", "확인"

  • 의 값을 변경 :

    from random import randint 
    
    count = 0 
    Validation = False 
    
    def generateNumber(): 
        Number = randint(1, 10) 
        return Number 
    
    def checkNumber(Guess): 
        global Validation 
        Number = generateNumber() 
        if int(Guess) == Number and count < 1: 
         Validation = True 
         return "First time right! Genius?" 
    
        elif int(Guess) == Number and count == 2: 
         Validation = True 
         return "Correct. Second time, nice!" 
        elif int(Guess) == Number and count < 4: 
         Validation = True 
         return "Correct. Good job." 
        elif int(Guess) == Number and count > 3: 
         Validation = True 
         return "Correct. Took you long enough." 
        else: 
         return "Wrong! Try again " 
    
    
    while Validation == False: 
        Guess = input("Please guess a number between 1 to 10: ") 
        print (checkNumber(Guess)) 
        print "validation: %s" % str(Validation) 
        count += 1 
    
    TryAgain = input("Would you like to try again? y/n \n") 
    
  • 0

    전역 변수 문제 외에도 다른 수정 프로그램을 만들어야합니다. Validation = True에 대한 모든 과제는 "return"문장 뒤에 나타납니다. 유효성 검사 = True가 실행되지 않습니다! 실행하기 전에 함수를 종료합니다. '반환'전에 'Validation = True'로 설정하십시오. Ishay가 말했듯이 여전히 글로벌 선언이 필요합니다.