2017-12-08 21 views
0

이 프로그램의 목적은 학생의 의견을 받아 들여 3 자리 숫자를 입력했는지 확인하는 것입니다. 3보다 작거나 3보다 크지 않으며 문자열이 아니어야합니다. 위의 뭔가 잘못된 경우에이 모든 프로그램은 그 때까지하는Python 3.x 일부 요구 사항이 true 인 경우 제어하는 ​​프로그램

def studentID(): 
     try: 
      number=int(input("sutedent IDS:")) 
      try: 
       assert len(number)==3 

      except AssertionError: 
       print("Must be 3 digit number.") 
       studentID() 

     except ValueError: 
      print("Please enter an integer.") 
      studentID() 

     except TypeError: 
      print("What is wrong with you?") 
      studentID() 

답변

0

int의이 len이없는 사실이 될 다시 요청해야합니다. 길이를 확인하기 위해 다시 문자열로 변환해야합니다.

def studentid(): 
    try: 
     num = int(input('student ID:')) 
     if len(str(num)) != 3: 
      print('Please enter a 3-digit number') 
      return studentid() 
     return num 
    except ValueError: 
     print('Please enter a 3-digit number') 
     return studentid() 

당신은 아마 호출자에게 num을 반환합니다. 입력을 int으로 캐스팅 한 다음 다시 문자열로 변환합니다. 일부 최신 버전의 Python (3.6 이상)에서는 int 리터럴에 밑줄을 사용할 수 있기 때문에 int('1_2')은 2 자리 숫자로 평가되는 유효한 3 문자 입력이됩니다.

+0

왜 유형 오류를 제거하지 않았습니까? –

+0

'len (n)'을 쓰려고했기 때문에'TypeError'를 얻었습니다.'n'은'int'입니다. 'int'는'len'을 지원하지 않으므로, 타입 오류가 발생합니다. 위와 같이해서는 안됩니다. 어떻게 든 'TypeError'를 발생 시키면 문제를 식별 할 수 있도록 프로그램을 중지시켜야합니다. –

0

패트릭의 코멘트에 추가하려면 범위를 선호 (len (3)), 명확하고 더 효율적입니다. 어떻게하면 좋을까요

def studentID(): 
     number=int(input("sutedent IDS:")) 
     if range(len(number)) == 3: 
      return studentID() 
     elif number is not int or range(len(number)) > 3 : 
      print('please enter a valid number') 
      return studentID() 
     else: 
      raise ValueError 
      return studentID() 
+0

나는 당신이 쓴 것을 이해하지 못했습니다. 또한 작동하지 않습니다. –