2017-03-03 4 views
0

목록으로 들어갈 입력의 유효성을 검사하려고합니다. 입력은 정수 여야합니다. 정수 또는 단일 문자를 입력하면 어떻게 작동합니까? 하지만 'qw'와 같은 것을 입력하면 프로그램이 중단됩니다. 입력 내용을보다 효과적으로 검증하려면 어떻게해야합니까? raw_input()는 문자열, 결코 정수를 반환하기 때문에입력 유효성 검사 python 2.7.13

서면으로
def getPints(pints): 
    counter = 0 
    while counter < 7: 
     pints[counter] = raw_input("Enter the number of pints donated: ") 
     check = isinstance(pints[counter], int) 
     while check == False: 
      print "Please enter an integer!" 
      pints[counter] = input("Enter the number of pints donated: ") 
     counter = counter + 1 

답변

0

, check 항상 False로 평가됩니다 여기 내 코드입니다. 그런 다음 check을 업데이트하지 않기 때문에 무한한 while 루프에서 멈추게됩니다.

isinstance 대신 isdigit() 문자열을 사용하십시오.

check = pints[counter].isdigit() 

루프 내부에서 check의 재평가가 필요합니다. 하지만 실제로는 check이 전혀 필요하지 않습니다.

pints[counter] = raw_input("Enter the number of pints donated: ") 
while not pints[counter].isdigit(): 
    print "Please enter an integer!" 
    pints[counter] = raw_input("Enter the number of pints donated: ") 

난 당신이 또한 적절한 입력을 일단 int로 pints[counter]를 변환 할 생각한다.

LBYL 방법 (Look Before You Leap)을 사용하고 있습니다. 또한 입력을 int로 변환하고 입력이 잘못된 경우 예외를 잡으려고하면 EAFP (허가보다 용의가 있음을 쉽게 알 수 있음) 메서드를 사용할 수 있습니다.