2013-11-25 10 views
-5

Это побуждает меня с этой ошибкой в ​​изображении: Интересно, если кто-то может понять это то, что случилось с моим кодом, я был бы признателен, что Ошибка:Почему это происходит?

Unhandled exception in thread started by 0.06<function su at 0x00000000032E4620> 

Traceback (most recent call last): 
    File "C:\Users\Zryan\Downloads\z.py", line 6, in su 
    for index in range(st,end+i): 
TypeError: 'float' object cannot be interpreted as an integer 

Код:

import random 
import _thread 
def su(st,end,i): 
    global subtotal, data, locks 
    locks.acquire(1,-1) 
    for index in range(st,end+i): 
     subtotal[i] += data[index] 
    locks.release() 

numth = int(100) 

data = list(range(numth)) 

for index in range(len(data)): 
    data[index] = random.randint(1,10) 

wt=int(input("enter the number of working threads:")) 

locks = list(range(wt)) 

subtotal = list(range(wt)) 

seg = len(data)/wt 

st=0 
locks= _thread.allocate_lock() 
for i in range(wt): 
    st= i * seg 
    end = st *seg -1 
    _thread.start_new_thread(su,(st,end,i)) 
avg = sum(subtotal)/len(data) 

print(avg) 
+3

Пожалуйста, не корректируйте свои вопросы, слегка измененные. – Hyperboreus

+2

Этот вопрос выглядит не по теме, потому что это repost. – Hyperboreus

+0

Вы ответили сэр или что? –

ответ

1

Значение seg может быть значением с плавающей запятой после того, как вы разделите len(data) на wt (Я предполагаю, что вы используете Python 3). Это также сделало бы end значением с плавающей запятой, что вызвало бы наблюдаемую ошибку при попытке передать end в качестве аргумента в range.

Вы должны убедиться, что end - целое число; самый простой способ - просто использовать int(seg) вместо seg, когда вы установите его значение.

+0

Ага сейчас я получаю –

Смежные вопросы