Я программирую небольшой модуль Python с Python 2.7.6 (по умолчанию, 22 июня 2015 г., 17:58:13), и я использую IPython 1.2.1 для запуска моей программы.NameError: имя функции не определено
Этот модуль будет содержать несколько математических функций с степенными рядами. Я отделяю определения функций python от тестов функции python.
Вот мой код PowerSeries.py:
### Computations of some functions by power series ###
def exp(x):
"""Exponential function"""
exp=1.0
term=1.0
iteration=1
factorial=1
while(abs(term/factorial)>1e-10):
factorial*=iteration
term*=x
exp+=term/factorial
iteration+=1
return exp
def hyperbolicCosine(x):
"""Hyperbolic cosine function"""
cosh=1.0
term=1.0
iteration=1
factorial=1
while(abs(term/factorial)>1e-10):
factorial*=iteration
term*=x
if iteration%2==0:
cosh+=term/factorial
iteration+=1
return cosh
def sine(x):
"""Sine function"""
sine=0.0
term=1.0
iteration=1
factorial=1
while(abs(term/factorial)>1e-10):
factorial*=iteration
term*=x
if iteration%2==1:
sine+=term/factorial
term=-term
iteration+=1
return sine
def cosine(x):
"""Cosine function"""
cosine=1.0
term=1.0
iteration=1
factorial=1
while(abs(term/factorial)>1e-10):
factorial*=iteration
term*=x
if (iteration)%2==0:
term=-term
cosine+=term/factorial
iteration+=1
return cosine
Вот мой код tests.py:
### Tests for PowerSeries Module ###
from math import pi
from PowerSeries import *
# Tests of exponential
print "### Tests of exponential ###"
x=-2
print("x=%f exp(x)=%.10f" % (x,exp(x)))
x=-1
print("x=%f exp(x)=%.10f" % (x,exp(x)))
x=0
print("x=%f exp(x)=%.10f" % (x,exp(x)))
x=1
print("x=%f exp(x)=%.10f" % (x,exp(x)))
x=2
print("x=%f exp(x)=%.10f" % (x,exp(x)))
# Tests of hyperbolic cosine
print "### Tests of hyperbolic cosine ###"
x=-2
print("x=%f cosh(x)=%.10f" % (x,hyperbolicCosine(x)))
x=-1
print("x=%f cosh(x)=%.10f" % (x,hyperbolicCosine(x)))
x=0
print("x=%f cosh(x)=%.10f" % (x,hyperbolicCosine(x)))
x=1
print("x=%f cosh(x)=%.10f" % (x,hyperbolicCosine(x)))
x=2
print("x=%f cosh(x)=%.10f" % (x,hyperbolicCosine(x)))
# Tests of sine
print "### Tests of sine ###"
x=0
print("x=%f sin(x)=%.10f" % (x,sine(x)))
x=pi/6
print("x=%f sin(x)=%.10f" % (x,sine(x)))
x=pi/4
print("x=%f sin(x)=%.10f" % (x,sine(x)))
x=pi/3
print("x=%f sin(x)=%.10f" % (x,sine(x)))
x=pi/2
print("x=%f sin(x)=%.10f" % (x,sine(x)))
# Tests of cosine
print "### Tests of cosine ###"
x=0
print("x=%f cos(x)=%.10f" % (x,cosine(x)))
x=pi/6
print("x=%f cos(x)=%.10f" % (x,cosine(x)))
x=pi/4
print("x=%f cos(x)=%.10f" % (x,cosine(x)))
x=pi/3
print("x=%f cos(x)=%.10f" % (x,cosine(x)))
x=pi/2
print("x=%f cos(x)=%.10f" % (x,cosine(x)))
Все работает отлично, пока я не добавить определение hyperbolicCosine. Выполнение tests.py файла дает NameError, что я не могу решить:
19 print "### Tests of hyperbolic cosine ###"
20 x=-2
---> 21 print("x=%f cosh(x)=%.10f" % (x,hyperbolicCosine(x)))
22 x=-1
23 print("x=%f cosh(x)=%.10f" % (x,hyperbolicCosine(x)))
NameError: name 'hyperbolicCosine' is not defined
Помощь приветствуется.
У вас есть какой-то старый .pyc-файл, который имеет более позднюю дату, чем ваш .py-файл, или .py-файл в другой директории, чем тот, который, по вашему мнению, вы используете? Переименуйте PowerSeries.py временно и импортируйте его под другим именем. –
Как вы используете код 'tests.py', можете ли вы показать точную запятую? Это из интерпретатора ipython? –
Ну, я запускаю test.py код из интерпретатора ipython с помощью команды ** run tests.py **. Но, по словам Патрика Маупина, я действительно решил ошибку, удалив старый файл ** PowerSeries.pyc **. Итак, он работает сейчас, и я добавлю больше определений функций с учетом этой проблемы. Спасибо вам обоим. –