2013-08-28 3 views
1

에 번호를 추가 I 숫자 목록 가지고파이썬 루프

목록 1 = [33, 11, 42, 53, 12, 67, 74, 34, 78, 10, 23]

무엇 목록에서 총 숫자를 계산 한 다음 360으로 나누어 원의 일부를 계산하면됩니다. 이 예를 들어 내가 아래에 수행 한 (32)이 될 것입니다 : 내가 가진 문제는 내가 수 (heading_deg)가 마지막 숫자에 의해 추가 할 필요가 있다는 것입니다

def heading(): 
    for heading_loop in range(len(list1)): 
     heading_deg = (360/len(list1)) 
    return heading_deg 

매번는 루프 throught를 실행

. 예 :

run 1: 32 
run 2: 64 
run 3: 96 
run 4: 128 

등 등

어떤 아이디어가? 현재 모든 것은 32, 11 번을 돌려줍니다.

감사합니다.

+0

그래서 원의 일부가 똑같이 나누어 져 있습니까? – Dhara

답변

1

은 내가 다른 대답을 게시 한하지만 무엇 싶어 할 것은 당신이 당신의 코드에 표시 한 것과 다른 생각 죄송합니다.

def heading(): 
    result=[] #create a void list 
    numbersum=sum(list1) #"calculate the total amount of numbers in the list" 
# e.g. if list=[1,1,2] sum(list) return 1+1+2. 
    for i in range(len(list1)): 
     result.append(((list1[i])/float(numbersum))*360) # calculate portion of the circle ("then divide by 360 to work out portions of a circle") 
#in this case if you have a list A=[250,250] the function will return two angle of 180° 
    #however you can return portion of the circle in percent e.g. 0.50 is half a circle 1 is the whole circle simply removing "*360" from the code above 
    return result 

당신이 시도하는 경우 :

test=heading() 
print test 
print sum(test) 

가 마지막으로 360 °를 인쇄해야이 당신이 원하는 경우를 보라.

2

난 당신 누적 합계 찾고있는 것 같아요 :

def func(list1): 
    tot_sum = 0 
    add = 360/len(list1) 
    for _ in xrange(len(list1)): 
     tot_sum += add 
     yield tot_sum 

>>> for x in func(list1): 
    print x 


32 
64 
96 
128 
160 
192 
224 
256 
288 
320 
352 
0

나는 당신이 원하는 undersand하지 않습니다. 동일한 값이 반환되는 것이 정상이므로 heading_loop을 사용하지 마십시오. 그래서 heading_deg = (360/len (list1))은 이미 동일한 결과입니다.

반복에서 32, 다음 64, 다음 96을 갖는 방법은 무엇입니까?

0

원의 일부가 똑같이 분포되어 있다고 가정합니다.

코드 문제는 heading_deg가 여러 번 계산되었지만 360/len(list1)이 변경되지 않기 때문에 항상 같은 방식으로 계산됩니다. Ashiwni가 지적했듯이 누적 합계가 필요합니다. 발전기 사용하려면

def heading(): 
    deg = (360/len(list1)) 
    for heading_loop in range(len(list1)): 
     yield (heading_loop+1)*deg 

: 당신이 기능의 출력으로 누적 합계를 반환해야 할 경우, 당신은 발전기를 사용할 수있는 정수 연산을 사용하여, 또한

heading_deg_gen = heading() 
print heading_deg_gen.next() # prints 32 
print heading_deg_gen.next() # prints 64 

# or, you can loop through the values 
for heading_deg in heading_deg_gen: 
    print heading_deg # prints the rest of the values up to 360 

을, 당신은 어떤 정밀도를 잃어 가고있다 이리. 어떤 경우에는 괜찮 으면 좋겠지 만 더 정확한 답을 얻으려면 360.0/len(list1)을 대신 사용하십시오.

0

루프 카운터를 사용하여 & 계산 결과를 목록에 추가하십시오.

list1 = [33, 11, 42, 53, 12, 67, 74, 34, 78, 10, 23] 

def heading(): 
    heading_deg = [] 
    for heading_loop in range(len(list1)): 
     heading_deg.append((360/len(list1)) * (heading_loop + 1)) 
    return heading_deg 

반환 값은 다음과 같습니다

[32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352]