2017-12-31 9 views
0
def checker(a_list): 
    for item in a_list: 
     if str(item).isdigit(): 
      return True 
     else: 
      return False 

내가 검사기에 대해 가지고있는 변수는 변수가 들어있는 네 개의 문자열 목록입니다. 다른 함수의 모든 입력 값에 숫자 만 들어 있는지 확인하기 위해 '체커'로 사용할 계획이었습니다.파이썬 for 루프는 첫 번째 항목 뒤에 True를 반환합니다.

문제점 : a_list의 첫 번째 항목이 숫자가 아닌 경우 검사기가 False를 반환합니다. 그러나 첫 번째 항목이 숫자이고 목록의 다른 항목이 아닌 경우 checker는 True를 반환합니다. 그러면 다음 함수가 숫자가 아닌 변수로 진행하고 오류가 발생합니다.

내 함수가 True를 반환하기 전에 전체 목록을 검사하도록하려면 어떻게해야합니까? 또는 필요한 경우 어떻게하면 새로운 기능을 만들 수 있습니까? 감사

목록에있는 모든 항목이 숫자 인 경우이 확인해야
+0

목록의 모든 구성원을 숫자로 확인 하시겠습니까? – babygame0ver

+0

'return' 문은 전체 함수를 빠져 나갑니다 (https://www.python-course.eu/python3_functions.php 참조). 그래서 for 루프의 첫번째 반복은'return'을 치고 함수를 끝낼 것입니다. 반복 작업을 수행하고 루프 내에서 숫자가 아니면'False'를 반환하고 for 루프 다음에 'return True'를 반환하는 것이 좋습니다. 'all' https://docs.python.org/3/library/functions.html#all – BorrajaX

+1

을 살펴볼 수도 있습니다. 루프에서 'return true'*를 사용하지 마십시오. 루프에서 항목이'.isdigit'이 아닌지 확인하십시오. 루프가 완료되면'return True'를 움직이십시오. – wwii

답변

3

있습니다 유용한 내장 된 여러 조건 확인하기위한 기능을 이용한 all (및 any) :

def checker(a_list): 
    return all(str(item).isdigit() for item in a_list) 
+0

옙, 속도면에서 더 나은 @wwii의 대답, 대답은 좀 더 비관적입니다. 그래서'any (a_list에있는 항목에 대한 str (item) .isdigit()가 아닌 것)'이 이상적인 대답이 될 것입니다 : –

+1

@ElRuso'all (x ...)'와'not any (not x ...)'는 동등한. https://en.wikipedia.org/wiki/De_Morgan%27s_laws – VPfB

+0

맞습니다. 매우 짧습니다. (https://stackoverflow.com/a/39711683/4249707) 꽤 동일합니다 –

0

if all(str(x).isdigit() for x in a_list): 
    return True 
else: 
    return False 
+0

OP 용으로 일반 for 루프로 확장하는 것이 좋을지도 모릅니다. – wwii

4

돈을 ' 루프에서 True를 반환합니다. 루프에서 항목이 이 아닌 경우 False를 반환합니다.입니다. 루프가 완료된 후 return True으로 이동하십시오. 내가 믿고있어

def checker(a_list): 
    for item in a_list: 
     if not str(item).isdigit(): 
      return False 
    return True 
+0

이 답변은 원래 코드에서 파생 된 것이므로 교육적이라고 +1했다. – VPfB

+0

@ PaulToth -이 솔루션은 VPIB의 솔루션과 기능적으로 동일합니다. 이 함수가 잘못된 결과를 생성하는 예제 입력을 제공 할 수 있습니까? – wwii

+0

@PaulToth -'[12, 15, 54, 72]'에 대해 함수가 True 또는 False를 반환해야합니까? – wwii

1

당신은 확인하려는 isdigit()에서 반환 값으로 a_list 반환 True의 모든 요소. 이 경우

anyall에 대한 자세한 내용은 내장 함수 all

all(str(s).isdigit() for s in a_list)

를 사용, SO에이 링크를 체크 아웃 : any and all explained

편집 : 감사 @RoadRunner OP가 그것의 예를 들어 준 것처럼 str에 대한 변환을 가리킨다.

관련 문제