귀하의 주요 문제는 당신이 return
너무 일찍 True
을 보내고있어 점이다 if y%2 == 0 or y%3 == 0: pass
여기에 전체 코드입니다. 첫 번째 유효한 숫자가 표시되는 즉시 현재 코드가 반환되지만 나중에 유효하지 않은 숫자가있을 수 있으므로 조기입니다. 대신 return False
부분을 if
/else
개 조합으로 유지해야합니다. 코드의 가장 직접적인 번역 pass
와 return True
을 (아무것도 안하는) 대체하는 것입니다하지만, 더 나은 방법이없는 else
로, 조건 및 만 if
를 반전하는 것입니다 : 다른
if not (y%2 == 0 or y%3 == 0): # or distribute the negation: if y%2 != 0 or y%3 != 0
return False
# no else for this if!
있습니다
문제 나는 당신이 현재의 코드를 가지고 있다고 생각합니다. 가장 큰 문제는 숫자 목록이나 문자열의 문자를 반복하는지 여부가 명확하지 않다는 것입니다. 귀하의 의도는 문자열을 반복하고 숫자가 아닌 문자를 무시하는 것이지만 몇 가지 문제가 있다고 생각합니다. 우선 해결해야 할 것은
isdigit
을 사용하는 것입니다. 그것은 방법이지만, 당신은 그것을 전혀 부르지 않습니다.대신 방법 자체를
True
(성공하지 못할 수도 있음)과 비교합니다.
나는 현재 가지고있는 것 대신에 if x[countdigit].isdigit():
을 원한다고 생각합니다. 이 메소드를 호출하고 불필요한 부울 비교를 수행하지 않습니다 (if
은 이미 "사실"값을 확인합니다).
다음 문제는 코드의 수학적 부분으로 이동하기 전에 숫자 한 문자 문자열을 실제 숫자로 바꾸지 않는다는 것입니다. 내 생각에 자연스럽게 할 일은 y
에 할당하는 것입니다. 할당 직전에 전환을 수행하려면 y = int(x[countdigit])
과 같은 것을 사용할 수 있습니다.
그 밖의 다른 문제는 while
루프의 코드 전체 구조입니다. 파이썬에서는 for
루프를 사용하여 연속적인 정수로 수동으로 인덱싱 할 필요없이 다양한 컨테이너 유형을 직접 반복 할 수 있습니다. while
과 함께 countdigit
코드는 for character in x:
으로 바꿀 수 있으며 나머지 코드에서는 x[countdigit]
대신 character
을 사용할 수 있습니다.