2014-02-07 3 views
2

일련 번호가 유효한 값을 가지고 있는지 테스트하고 알려진 값 목록과 다양한 구성 요소를 비교하여 올바른 형식을 지정하는지 테스트하고 있습니다. 예 : 유효한 경우Python에서 예기치 않은 값 처리하기

VALUES = [1, 2, 3, 4, 5] 

serial = "013452345252345" 

if int(serial[0:2]) in values: 
    return True 

는 처음 두 숫자는 int로 처리 할 수 ​​있지만, 시리얼 완전한 쓰레기에서 올 수있는 경우가 있습니다, 그래서 나는 그 모든 유효한 경우로 취급 해요 , 문자열로 내 모든 값을 처리하는 예 :

VALUES = ['01', '02', '03', '04', '05'] 

serial = "a;alskdjfadslkj" 

if serial[0:2] in values: 
    return True 

뭔가 더 이상의 지능 내가 할 수있을이 적절한 방법인가, 아니면 무엇입니까? 당신의 도움을 주셔서 감사합니다.

+0

'serial [: 2] .isdigit() 및 int (serial [: 2]) 값을 확인하지 않는 이유는 무엇입니까? – Bakuriu

+0

@Bakuriu 저는 isdigit() 메소드에 내장 된 것을 알지 못했습니다. 매우 도움이됩니다. 감사합니다! –

답변

0

당신이 한 일은 당신이해야 할 일입니다. 당신이 순간에 부족한 유일한 것은 당신이 확인되는 필드를 순환하는 것 (그것은 비록 설정 필드 길이에 따라 달라집니다) :

def Serial_Checker(values,serial,field_length): 
    serial_length = len(serial) 
    cycler = field_length 

    serial_valid = True 

    while cycler < serial_length: 
     if serial[cycler-field_length:cycler] in VALUES: 
      cycler += field_length  
     else: 
      serial_valid = False 
      break 

    if serial_length%field_length <> 0: # % is the remainder operator 
     serial_valid = False #In case there is leftover at the end of the serial 

    return serial_valid 

VALUES = ['01', '02', '03', '04', '05'] 
serial = "a;alskdjfadslkj" 

Serial_Checker(VALUES,serial,2) 

함수에서 거짓을 반환해야합니다.

는 나는 형식이 항상 "isdigit에"방법을 사용할 수있는 모든 번호를 사용할 수있다 그러나 경우이에 대한 모든 붙박이 기능의 모르는

는 :

d = 'somestring' 
d.isdigit() 

마지막 줄은 경우 부울을 반환합니다 문자열 전체가 숫자로 구성된 경우 문자열.

좀 더 일반적인 해결책이 필요한 경우 원하는 경우 더 추가 할 수 있습니다.

관련 문제