2013-11-25 214 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

这个问题似乎是脱离主题,因为它是一个转发。 – Hyperboreus

+0

你是回答先生还是什么? –

回答

1

在将len(data)除以wt(我假设您使用的是Python 3)之后,seg的值可能是浮点值。这也会使end成为一个浮点值,当您尝试将end作为参数传递给range时,会导致观察到的错误。

您需要确保end是一个整数;最简单的方法是在设置其值时简单使用int(seg)而不是seg

+0

Aha现在我明白了 –

相关问题