在Python cod中,无法将sequence乘以'list'类型的nonit

2024-03-28 20:26:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将一个C程序翻译成Python,但它给出了一个错误。我做错了什么?在

# -*-coding:utf-8 -*-

datos=open("bio.dat","r+")

h=[];numero=[];edad=[];peso=[]

nombre=[]
#Creando matriz para nombre
for i in range(100):
   nombre.append([0]*50)


apellido=[]
#Creando matriz para apellido
for i in range(100):
  apellido.append([0]*50)

 sexo=[]
 #Creando matriz para sexo
 for i in range(100):
   sexo.append([0]*50)


sumah=[];sumap=[];sumahp=[];sumah2=[]

for l in xrange(1,26):
 h+=[l]
 sumah+=h
 peso+=[l]
 sumap+=peso
 sumahp+=h*peso
 sumah2+=h*h

promh=sumah/25.0
promp=sumap/25.0

a=(sumah*sumap-25*sumahp)/(sumah2-25*sumah*sumah)
b=promp-a*promh

我得到的错误是:

^{pr2}$

Tags: inforrangeparaappendmatriznombresexo
2条回答

显然,这个清单是空的:

h=[]

在代码开始工作之前,您必须向它添加25个元素(附带说明:列表的索引从0开始,而不是像代码中暗示的那样在1开始)。这样做:

^{pr2}$

在Python中,列表开始时没有元素,也没有值——它们与其他编程语言中的数组一样,最初的长度是固定的。Python中的列表以零开头,因此即使是h[0]也将失败,除非添加元素,例如使用append()。在

更新

所以,您需要将一些C代码翻译成Python。您的方法是错误的,您将初始化数字就好像它们是列表,并且访问元素的方式也不正确。以下是Python中C代码的外观:

sumah  = 0
sumap  = 0
sumahp = 0
sumah2 = 0

for i in xrange(1, 26):
    sumah  += h[i]
    sumap  += peso[i]
    sumahp += h[i]*peso[i]
    sumah2 += h[i]*h[i]

在Python中,您应该做的一件事是避免在列表中使用+=。请使用append()或{}。它们是这样工作的:

mylist = [1,2,3,4]
mylist.append(5)
# mylist is now [1,2,3,4,5]
otherlist = [6,7,8]
mylist.extend(otherlist)
# mylist is now [1,2,3,4,5,6,7,8]

append()方法接受一个参数,并将该参数添加到列表的末尾。extend()方法接受一个参数,它应该是一个序列,例如另一个list,并将该序列中的每个项目添加到原始列表中,一次一个。有什么区别?好吧,如果您将一个列表传递给append()方法,它将只向列表中添加一个项,而该列表将是另一个列表。注意:

^{pr2}$

我为什么要提这个?因为现在您在列表上使用+=,这与extend()方法具有相同的效果。因此,您的代码正在执行类似h+=[l]的操作,其效果与h.extend([l])相同,只向列表中添加一个项目。但最好改为h.append(l),因为这样可以更清楚地了解代码的意图。在

相关问题 更多 >