나는 codewars Sum of Digits / Digital Root 문제를 시도했습니다.
n이 주어지면 n의 자릿수 합계를 취하십시오. 해당 값에 두 자리 이상의 숫자가 있으면 한 자리 숫자가 생성 될 때까지이 방법으로 계속 줄이십시오. 입력은 음이 아닌 정수입니다.
따라서 52를 통과하면 7이 반환됩니다. 5 + 2가 7이고 942를 통과하면 6이 반환됩니다. 9 + 4 + 2 = 15, 1 + 5 = 6입니다.
이 코드를 생각해 냈습니다.
def digital_root(n):
n_str = str(n)
digit_total = 0
while len(n_str) != 1:
for digit in n_str:
digit_total += int(digit)
n_str = str(digit_total)
return(n_str)
그러나 2 자리 숫자에서만 작동하고 더 높은 숫자에서는 작동하지 않으며 끝없이 실행됩니다. 이 코드는 아마도 나쁜 방법 일 것입니다. 그리고 다른 사람들의 답변을 살펴 보았고 그들의 해결책을 얻었지만 이것이 왜 더 높은 숫자에서 작동하지 않는지 이해하지 못했습니다.
프로그램이 거의 옳았습니다. 내가 보는 유일한 도전은 digit_total = 0
각 반복 후에 변수를 재설정하는 것 입니다.
def digital_root(n):
n_str = str(n)
while len(n_str) != 1:
digit_total = 0 #move this inside the while loop
for digit in n_str:
digit_total += int(digit)
n_str = str(digit_total)
return(n_str)
print (digital_root(23485))
에 대한 출력 print (digital_root(23485))
은 다음과 같습니다.4
2 + 3 + 4 + 8 + 5 = 22
2 + 2 = 4
이 digit_total = 0
while 루프 안에 없으면 계속 추가되고 끝나지 않는 루프를 얻습니다.
코드가 많지만 한 줄로이 작업을 수행 할 수 있습니다.
def sum_digits(n):
while len(str(n)) > 1: n = sum(int(i) for i in str(n))
return n
print (sum_digits(23485))
너무 많은 변수를 생성하고 추적하는 데 잃어 버릴 필요가 없습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다