Python 调用实例时使用不同的类型
我有以下代码:Python 调用实例时使用不同的类型,python,Python,我有以下代码: # def macierz(self, R, alfa, beta): # '''Definiuje macierz przeksztalcenia.''' # alfa=float(self.rad(alfa)) # beta=float(self.rad(beta)) # R=float(R) # B=self.array([[-self.cos(alfa), -self.sin(alfa), 0, -R*self.cos(alfa)], [
#
def macierz(self, R, alfa, beta):
# '''Definiuje macierz przeksztalcenia.'''
# alfa=float(self.rad(alfa))
# beta=float(self.rad(beta))
# R=float(R)
# B=self.array([[-self.cos(alfa), -self.sin(alfa), 0, -R*self.cos(alfa)], [self.sin(alfa)*self.cos(beta), -self.cos(alfa)*self.cos(beta), -self.sin(beta), R*self.sin(alfa)*self.cos(beta)], [self.sin(alfa)*self.sin(beta), -self.cos(alfa)*self.sin(beta), self.cos(beta), R*self.sin(alfa)*self.cos(beta)], [0, 0, 0, 1]])
def konwersja(self):
'''Ta funkcja przeprowadza konwersje listy wsp wewnetrznych na wspolrzedne kartezjanskie.'''
listaB=[]
R=2
alfa=1
beta=1
B=self.array([[-self.cos(alfa), -self.sin(alfa), 0, -R*self.cos(alfa)], [self.sin(alfa)*self.cos(beta), -self.cos(alfa)*self.cos(beta), -self.sin(beta), R*self.sin(alfa)*self.cos(beta)], [self.sin(alfa)*self.sin(beta), -self.cos(alfa)*self.sin(beta), self.cos(beta), R*self.sin(alfa)*self.cos(beta)], [0, 0, 0, 1]])
lista_xyz=[]
#matrix=self.macierz
j=0
q=self.array((0., 0., 0., 1.)).reshape(4,1)
while j<len(self.lista):
# B=matrix(self.lista[j+1], self.lista[j+3], self.lista[j+5])
q=self.dot(B, q)
print self.lista[j], q[0,0], q[1,0], q[2,0]
break
为什么,当我调用macierz
函数类型时无法识别
好吧,我觉得我上面写的很混乱。以下是完整的代码:
#!/usr/bin/python
class Internal:
from numpy import sin, cos, radians, array, pi, dot, zeros, reshape
rad=radians
lista=[]
i=0
def dane(self, plik_zmat):
'''Ta funkcja przygotowuje plik zmat, typu MOPAC do odczytu przez funkcje konwersja.'''
plik=open(plik_zmat, 'r+')
for linijka in plik:
for slowo in linijka.split():
try:
slowo=float(slowo)
except ValueError:
pass
self.lista.append(slowo)
while self.i<6:
self.lista.pop(0)
self.i+=1
# def macierz(self, R, alfa, beta):
# '''Definiuje macierz przeksztalcenia.'''
# alfa=float(self.rad(alfa))
# beta=float(self.rad(beta))
# R=float(R)
# B=self.array([[-self.cos(alfa), -self.sin(alfa), 0, -R*self.cos(alfa)], [self.sin(alfa)*self.cos(beta), -self.cos(alfa)*self.cos(beta), -self.sin(beta), R*self.sin(alfa)*self.cos(beta)], [self.sin(alfa)*self.sin(beta), -self.cos(alfa)*self.sin(beta), self.cos(beta), R*self.sin(alfa)*self.cos(beta)], [0, 0, 0, 1]])
def konwersja(self):
'''Ta funkcja przeprowadza konwersje listy wsp wewnetrznych na wspolrzedne kartezjanskie.'''
listaB=[]
R=2
alfa=1
beta=1
B=self.array([[-self.cos(alfa), -self.sin(alfa), 0, -R*self.cos(alfa)], [self.sin(alfa)*self.cos(beta), -self.cos(alfa)*self.cos(beta), -self.sin(beta), R*self.sin(alfa)*self.cos(beta)], [self.sin(alfa)*self.sin(beta), -self.cos(alfa)*self.sin(beta), self.cos(beta), R*self.sin(alfa)*self.cos(beta)], [0, 0, 0, 1]])
lista_xyz=[]
#matrix=self.macierz
j=0
q=self.array((0., 0., 0., 1.)).reshape(4,1)
while j<len(self.lista):
# B=matrix(self.lista[j+1], self.lista[j+3], self.lista[j+5])
q=self.dot(B, q)
print self.lista[j], q[0,0], q[1,0], q[2,0]
break
Internal().dane('formaldehyd.zmat')
print Internal().lista
Internal().konwersja()
#/usr/bin/python
类别内部:
从numpy导入正弦、余弦、弧度、数组、圆周率、点、零、重塑
rad=弧度
lista=[]
i=0
戴夫·戴恩(赛尔夫,普利克斯马特):
“这是一个很好的例子,是一个很好的例子。”
plik=open(plik_zmat,'r+'))
对于plik中的linijka:
对于linijka.split()中的slowo:
尝试:
slowo=浮动(slowo)
除值错误外:
通过
self.lista.append(slowo)
而self.i在macierz
函数中没有任何return
语句。这会导致Python返回一个隐式的None
。您在错误中注意到了这一点
更改以下行:
B=self.array([[self.cos(alfa),-self.sin(alfa),0,-R*self.cos(alfa)],[self.sin(alfa)*self.cos(beta),-self.cos(beta),-self.sin(alfa)*self sin self.sin(beta),-self.cos(beta),R*self.sin(alfa)*self self.cos(beta),[0,0,0]>
致:
返回self.array([[-self.cos(alfa),-self.sin(alfa),0,-R*self.cos(alfa)],[self.sin(alfa)*self.cos(beta),-self.cos(beta),-self.sin(alfa),-R*self.sin(alfa)*self.sin(beta),-self.sin(beta)*self.cos(beta),self.cos(beta),R*self.sin)*self.cos(beta)],[0,0,0,1]>
这将返回在konwersja
中创建并分配给您的B
名称的数组。macierz应该返回什么吗?不,它只是定义了B数组。很难从代码示例中判断这两个函数是否定义在同一范围内,或者如果konwersja
函数嵌套在macierz
函数中,konwersja
函数与macierz
函数相比缩进一个空格。这是复制粘贴错误吗?
File "./zmat_xyz.py", line 37, in konwersja
q=self.dot(B, q)
TypeError: unsupported operand type(s) for *: 'NoneType' and 'float'
#!/usr/bin/python
class Internal:
from numpy import sin, cos, radians, array, pi, dot, zeros, reshape
rad=radians
lista=[]
i=0
def dane(self, plik_zmat):
'''Ta funkcja przygotowuje plik zmat, typu MOPAC do odczytu przez funkcje konwersja.'''
plik=open(plik_zmat, 'r+')
for linijka in plik:
for slowo in linijka.split():
try:
slowo=float(slowo)
except ValueError:
pass
self.lista.append(slowo)
while self.i<6:
self.lista.pop(0)
self.i+=1
# def macierz(self, R, alfa, beta):
# '''Definiuje macierz przeksztalcenia.'''
# alfa=float(self.rad(alfa))
# beta=float(self.rad(beta))
# R=float(R)
# B=self.array([[-self.cos(alfa), -self.sin(alfa), 0, -R*self.cos(alfa)], [self.sin(alfa)*self.cos(beta), -self.cos(alfa)*self.cos(beta), -self.sin(beta), R*self.sin(alfa)*self.cos(beta)], [self.sin(alfa)*self.sin(beta), -self.cos(alfa)*self.sin(beta), self.cos(beta), R*self.sin(alfa)*self.cos(beta)], [0, 0, 0, 1]])
def konwersja(self):
'''Ta funkcja przeprowadza konwersje listy wsp wewnetrznych na wspolrzedne kartezjanskie.'''
listaB=[]
R=2
alfa=1
beta=1
B=self.array([[-self.cos(alfa), -self.sin(alfa), 0, -R*self.cos(alfa)], [self.sin(alfa)*self.cos(beta), -self.cos(alfa)*self.cos(beta), -self.sin(beta), R*self.sin(alfa)*self.cos(beta)], [self.sin(alfa)*self.sin(beta), -self.cos(alfa)*self.sin(beta), self.cos(beta), R*self.sin(alfa)*self.cos(beta)], [0, 0, 0, 1]])
lista_xyz=[]
#matrix=self.macierz
j=0
q=self.array((0., 0., 0., 1.)).reshape(4,1)
while j<len(self.lista):
# B=matrix(self.lista[j+1], self.lista[j+3], self.lista[j+5])
q=self.dot(B, q)
print self.lista[j], q[0,0], q[1,0], q[2,0]
break
Internal().dane('formaldehyd.zmat')
print Internal().lista
Internal().konwersja()