self_number = [True] * 10000
self_number[0] = False # 1로 시작하는 숫자와 인덱스를 동일하게 맞추기 위해서 0번째 인덱스는 None으로 처리한다.
for num in range(1, 10000):
total = num + sum(map(int, str(num))) # 숫자를 string형으로 변환하여 map을 통해 한 자릿수씩 쪼갠 후 int형으로 다시 바꿔 sum을 구한다.
if total < 10000:
self_number[total] = False # 생성자로 출력된 결과는 False
for i in range(len(self_number)):
if self_number[i]: # True 만 반환해준다.
print(i)
내가 원하는 값은 10000이하의 total 값이지만 아래 for문에서는 10000을 넘을 수 밖에 없는 구조로 되어있다.
* 초기 코드
for num in range(1, 10000):
total = num + sum(map(int, str(num)))
self_number[total] = False # if문 없음
아래와 같이 3번째 줄에 if문을 추가하니 total이 10000까지 일때만 진행되어 원하는 출력 값을 얻을 수 있었다.
* 수정 코드 (3번째 줄에 if문이 추가됌)
for num in range(1, 10000):
total = num + sum(map(int, str(num)))
if total < 10000: #if 문 추가
self_number[total] = False