Форум сайта python.su
Программа представляет собой класс векторов, в котором описаны функции сложения(__add__),вычитания(__sub__), представление вектора в виде строки(__str__), эквивалентности(__eq__,пример равны ли вектора?-да), функция неэквивалентности(__ne__, пример: не равны ли вектора? нет), умножение на вектор справа и слева(__mul__,__rmul__), нахождение длины вектора(__abs__),деление вектора на число(__div__). также программа использует модуль vEcxeption:
#!/usr/bin/python
#-*- coding:utf8
import vException
import numpy as np
class vectors:
def __init__(self,v):
if isinstance(v,(list,np.ndarray)):
if len(v)==0:
raise vException.InvalidVector, 'ne pustoy'
else:
try:
self.v=np.array(v,dtype=float)
except ValueError:
raise vException.InvalidVector, 'tolko chisla'
else: raise vException.InvalidVector, 'vvod spiska'
def __str__(self):
s=""
for i in range(len(self.v)):
s1=str(float(self.v[i]))
s=s+", "+s1
s=s[1:]
s="("+s+")"
return s
def __eq__(self,other):
if len(self.v)!=len(other.v):
return False
else:
res=True
for i in range(len(self.v)):
if self.v[i]!=other.v[i]:
res=False
return res
def __ne__(self,other):
res= (self == other)
return not (res)
def __add__(self,other):
try :
m=self.v+other.v
except: raise vException.WrongVectorDims
return vectors(m)
def __sub__(self,other):
try:
m=self.v-other.v
except: raise vException.WrongvectorDims
return vectors(m)
def __mul__(self,other):
if (isinstance(other,vectors)):
if len(self.v)!=len(other.v):raise vException.WrongVectorDims
else:
return (self.v*other.v).sum()
elif(isinstance(other,int))or(isinstance(other,float)):
return vectors(self.v*other)
def __rmul__(self,other):
if (isinstance(other,vectors)):
if len(self.v)!=len(other.v):raise vException.WrongVectorDims
else:
return (self.v*other.v).sum()
elif(isinstance(other,int))or(isinstance(other,float)):
return vectors(other*self.v)
def __abs__(self):
d=0
for i in range(len(self.v)):
a=pow(self.v[i],2)
d=a+d
return pow(d,0.5)
def __div__(self,other):
if isinstance(other,(int,float)):
if other==0: raise vException.WrongVectorDims, 'Na 0 delitb nelbzya'
else:
return vectors(self.v/other)
else:
raise vException.WrongVectorDims, 'Delenie na vector'
Отредактировано (Май 27, 2010 19:49:55)
Офлайн
И что не так работает?
P.S. Оберните код в тег code, читать невозможно…
Офлайн
а как это сделать?
Офлайн
Читать http://python.su/forum/help.php#bbcode.
До просветления.
Офлайн
я не знаю, что не так работает( в этом-то и проблема. Это моё задание по информатике. К нему есть проверка:
if __name__=='__main__':
print "Тестируем..."
def test(x,y, descr):
if x!=y:
raise Exception, descr + " Test Error " + str(x)+ str(y)
else: print descr + " Passed"
#__init__
try:
a0=vectors()
except:
print "Constructor with empty argument. Passed"
else:
raise Exception,"Constructor with empty argument. Test Error"
try:
a0=vectors("qkjyfkuydfq")
except vException.InvalidVector:
print "Constructor with non list argument. Passed"
else:
raise Exception, "Constructor with non list argument. Test Error"
try:
a0=vectors([])
except vException.InvalidVector:
print "Constructor with empty list. Passed"
else:
raise Exception,"Constructor with empty list. Test Error"
try:
a0=vectors([1,2, "q.ljyfdw"])
except vException.InvalidVector:
print "Constructor with not numeric values. Passed"
# except vExceptions.WrongVectorDims:
# print "Constructor with not numeric values. Passed"
# except:
# print "какая-то не известная ошибка"
else:
raise Exception,"Constructor with not numeric values. Test Error"
#__str__
a1=vectors([1,2])
test(str(a1),"( 1.0, 2.0)", "Converting to string.")
#__add__
test(a1+a1,vectors([2,4]), "Simple addition.")
a2=vectors([2,3,4])
try:
a3=a1+a2
except vException.WrongVectorDims:
print "Addition of two vectors with different dimension. Passed"
# except vExceptions.InvalidVector:
# print "kuyfgug"
else:
raise Exception, "Addition of two vectors with different dimension. Test Error"
#__mul__
test(a1*a1,5, "Simple multiplication.")
test(a1*2,vectors([2,4]), "Multiplication on int number (left).")
test(a1*2.0,vectors([2,4]), "Multiplication on float number (left).")
try:
print a1*a2
except vException.WrongVectorDims:
print "Multiplication of two vectors with different dimension. Passed"
else:
raise Exception, "Multiplication of two vectors with different dimension. Test Error"
#__rmul__
test(3*a2,vectors([6,9,12]), "Multiplication on int number (right).")
test(3.0*a2,vectors([6,9,12]), "Multiplication on float number (right).")
#__abs__
a3=vectors([3,4])
test(abs(a3),5,"Length of the vector.")
#__div__
test(a3/2,vectors([1.5,2]), "Division on int number.")
test(a3/2.0,vectors([1.5,2]), "Division on float number.")
try:
print a3/a3
except vException.WrongVectorDims:
print "Division vector on vector. Passed"
else:
print "Division vector on vector. Test Error"
Отредактировано (Май 27, 2010 19:54:07)
Офлайн
Уберите в вашем “тесте” try и except и посмотрите что не так, какая ошибка вываливается
Офлайн
А убирать вместе с тем что внутри находится? Если так, то убрав все try,else, except ошибок он не вывел.
Офлайн
Убрав только try,else,except в первой же строчке “ a0=vectors()”
выдает ошибку, что должно подаваться два аргумента. В принципе что и требовалось.
Офлайн
так я проверил все функции. при удалении try выдает заданные ошибки.
Офлайн
тьфу ты…. passed судя по коду это тест пройден, насколько я понял.
То есть все у вас работает, но где то ошибка?
Офлайн