>source

다음 코드에서 is_number 이다그릇된가치를 위해 "foo" ,하지만 여전히 인쇄됩니다 is a number 그 문자열. 왜? 그리고 어떻게 고치나요?

def string_is_number(a_string):
    pattern = re.compile(r'[0-9]+')
    if pattern.search(a_string):
        return("True")
    else:
        return("False")
 
for value in 42, 0.5, "foo":
    the_string = str(value)
    is_number = string_is_number(the_string)
    print(the_string, is_number)
    if is_number:
        print(the_string, "is a number")

산출:

42 True
42 is a number
0.5 True
0.5 is a number
foo False
foo is a number

  • 답변 # 1

    반환 bool , 아니 str :

    if pattern.search(a_string):
        return True
    else:
        return False
    
    

    Python에서 비어 있지 않은 문자열은 다음을 포함하여 true (또는 "truthy")로 간주됩니다. "False" :

    >>> bool("False")
    True
    
    

    물론 숫자 감지에 대한 정규식은 약간 벗어납니다.

    re.match("^\d+([.,]\d+)?$", a_string)
    
    

    더 엄격한 테스트가 될 것입니다.

  • 답변 # 2

    "True"및 "False"를 문자열로 반환하려고합니다. 다음과 같이 부울로 반환해야합니다.

    def string_is_number(a_string):
        
        pattern = re.compile(r'[0-9]+')
        
        return pattern.search(a_string) # Returns True or False
    
    

  • 답변 # 3

    비어 있지 않은 문자열을 반환했기 때문에 함수가 실패했습니다. True . 더 미묘한 문제는 하나 이상의 숫자가있는 모든 것을 숫자라고 부르는 것입니다. 그래서 "나는 숫자 1이 아니다"는 숫자입니다. 무언가가 "숫자"인지 확인하는 좋은 방법은 그것을 변환하는 것입니다. 귀하의 경우에는 둘 다 변환 할 수있는 정수와 부동 소수점을 다루는 것처럼 보입니다. float . 쉼표는 문자열 리터럴에서 허용되지 않기 때문에 인수 분해해야하지만 함수는 다음과 같을 수 있습니다.

    def string_is_number(a_string):
        try:
            float(a_string.strip(','))
            return True
        except:
            return False
       
    
    

  • 이전 php - 양방향 관계에 대한 예기치 않은 행동 교리
  • 다음 React Native에서 최신 Android 버전 (> 6)의 푸시 알림을받을 수 없습니다