2012-08-06 5 views
0

나는 19 or 23.과 같은 이상한 숫자를 가지고있다.이 두 가지는 5 lists으로 분리되어야하며, 5 개의리스트의 합은 19가 될 것이다. 다시 말해서, 각리스트의 3.8은 19/5 = 3.8. 그러나 문제는 내가 십진수를 가질 수 없다는 것입니다. 나는 둥근 숫자를 원합니다. 4 번, 4 번, 3 번, 4 번, 4 번을 3.8 번이 아니라 5 번으로 나누어서 숫자를 반올림하는 방법이 있습니까?파이썬 지능형 숫자 반올림

심지어 일부는 5 개의 다른 숫자로 구분되지 않습니다. 일부는 77/12와 같을 수 있으므로 12 개의 diff로 분리됩니다. 각각 숫자 6 또는 7의 목록으로 77에 추가됩니다.

이 문제에 어떻게 접근 할 수 있습니까?

감사합니다.

+0

귀하의 질문은 매우 부정확하다. '19 또는 23.'은 "일련의 숫자"가 아닙니다. 19 개의 다른 정수를 포함하는 집합을 의미합니까? 입력 내용을 보여주는 코드를 게시하고 시도한 내용을 보여줄 수 있습니까? 그런 다음 원하는 것을 설명하십시오. –

+1

@MarkByers OP가 채팅에 이전에 게시 중이었습니다. 그래서 나는 그가 무엇을 요구하고 있는지 이해합니다. 대답했다. –

+2

@InbarRose : 그러나 질문은 여전히 ​​분명해야합니다. a) 다른 사람들은 대답 할 수 있습니다. b) 답변에 투표 할 수 있고 c) 앞으로이 문제를 읽고있는 다른 사람들이 가장 좋은 대답을 얻을 수 있습니다. –

답변

8
def split(number, length): 
    div, mod = divmod(number, length) 
    return [div+1]*mod + [div]*(length-mod) 

>>> split(19, 5) 
[4, 4, 4, 4, 3] 
>>> split(23, 4) 
[6, 6, 6, 5] 

원래 버전 :

def split(number, length): 
    result = [number//length]*length 
    for i in range(number%length): 
     result[i] += 1 
    return result 
+0

매우 우아합니다. 이전에는'[number // length]'를 보지 못했지만, 제게 설명해 주시겠습니까? –

+1

@InbarRose -'//'는 바닥 나누기를위한 미래의 증명 표기법입니다. Python 2.x에서 이것은'number/length'와 동일하지만, Python 3.x에서는'number/length'가 float이됩니다. –

+0

나는 정말로 미래를 받아 들여야한다. 2.6에 막혔다. :) –

0

여기 있습니다.

def roundto(number,items): 
    start = [1 for i in xrange(items)] 
    reached = False 
    while not reached: 
     for i in xrange(len(start)): 
      start[i] += 1 
      if sum(start) == number: 
       return start 

print roundto(19,5) 
>>> 
[4, 4, 4, 4, 3]