2013-08-28 3 views
1

У меня есть список номеров:Python добавить номера в цикле

песни1 = [33, 11, 42, 53, 12, 67, 74, 34, 78, 10, 23]

Что Мне нужно рассчитать общее количество чисел в списке, а затем разделить на 360, чтобы выработать части круга. Для этого примера было бы 32. Что я сделал ниже:

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

У меня есть проблема в том, что мне нужно, чтобы иметь номер (heading_deg) добавить в последнем номере каждый раз, когда он работает Повсеместно цикл. Например.

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) никогда не изменяется. Как указывает Ашинини, вам нужна кумулятивная сумма. В случае, если вам необходимо вернуть накопленную сумму в качестве вывода функции, вы можете использовать генератор:

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]