Найти - Пользователи
Полная версия: Здравствуйте! Очень нужна помощь в поиске ошибки в программе..
Начало » Python для новичков » Здравствуйте! Очень нужна помощь в поиске ошибки в программе..
1 2
mihalko
Программа представляет собой класс векторов, в котором описаны функции сложения(__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'
igor.kaist
И что не так работает?
P.S. Оберните код в тег code, читать невозможно…
mihalko
а как это сделать?
.Serj.
Читать http://python.su/forum/help.php#bbcode.
До просветления.
mihalko
я не знаю, что не так работает( в этом-то и проблема. Это моё задание по информатике. К нему есть проверка:

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"
Когда я запускаю в терминале, везде Passed, но мой семинарист говорит, что где-то ошибка в коде. Сколько ни старался не смог ее найти.
igor.kaist
Уберите в вашем “тесте” try и except и посмотрите что не так, какая ошибка вываливается
mihalko
А убирать вместе с тем что внутри находится? Если так, то убрав все try,else, except ошибок он не вывел.
mihalko
Убрав только try,else,except в первой же строчке “ a0=vectors()”
выдает ошибку, что должно подаваться два аргумента. В принципе что и требовалось.
mihalko
так я проверил все функции. при удалении try выдает заданные ошибки.
igor.kaist
тьфу ты…. passed судя по коду это тест пройден, насколько я понял.
То есть все у вас работает, но где то ошибка?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB