저는이 카타를 통해 작업하고 있지만 솔루션을 살펴 보았지만 아무 것도 내 질문에 대답하기에 충분히 유사하지 않습니다.숫자를 가져 와서 숫자를 합칩니다.
문제 텍스트 : 숫자 89는이 카타의 제목에서 부분적으로 도입 된 속성을 충족하는 두 자리 이상의 첫 번째 정수입니다. "유레카"라고 쓰는게 어때? 이 합계가 같은 수이기 때문입니다. 사실상
은 : 89 + 9^2
이 속성을 갖는의 다음 번호는 135
가 다시 속성보기 8^1 = 135 = 1^1 + 3^2 + 5^3
[a, b] 범위를 정의하는 두 개의 정수 a, b를 수신 할 수있는 함수가 필요하며 속성을 충족하는 범위에서 정렬 된 숫자의 목록을 출력합니다 전술 한 바와.
def sum_dig_pow(a, b): # range(a, b + 1) will be studied by the function
# your code here
lst = []
n = 1
tot = 0
for i in range(a,b):
if i > 9:
spl = str(i).split()
for item in spl:
tot += int(item) ** n
n += 1
if tot == i:
lst.append(i)
else:
lst.append(i)
return lst
시험은 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [1, 2, 3, 4, 5, 6, 7, 8과 동일해야한다 "돌아 간다 , 9, 89]. 나는 왜 그것이 10을 지나가고 89가 추가되지 않는지를 알 수 없다. 나는 이것을 할 수있는보다 효율적인 방법이 있다고 확신하지만, 여전히 학습 중이므로 루프, 조건문 등의 기초에서 작업하고 싶다.
의견을 보내 주셔서 감사합니다. 나는 열거가 정말로 유용하다는 사실을 알고 있습니다. 과거에는 그것을 사용했지만 저는 그것이 어떻게 도움이되었는지를 개념화 할 수 없었습니다. <. 저를 위해 일한 해결책, 깨끗한 UPS 등으로 주석을 달아주세요.
def sum_dig_pow(a, b): # range(a, b + 1) will be studied by the function
lst = []
for i in range(a,b+1):
if i > 9:
s = sum_dig(i)
if s == i:
lst.append(i)
else:
lst.append(i)
return lst
def sum_dig(num):
n = 1
tot = 0
for dig in str(num):
tot += int(dig)**n
n+=1
return tot
숫자의 숫자를 합산하기 위해'sum_of_digits' 함수를 작성하면 더 쉬울 것입니다. 이렇게하면 해당 작업을 자체적으로 수행하는 데 집중할 수 있으며 신뢰할 수있는 단일 함수 호출을 사용할 수 있습니다. –
은 숫자의 * powers *를 더합니다. –
@ juanpa.arrivillaga 수정 해 주셔서 감사합니다. –