def plus(a,b):
创新互联建站专注于企业成都营销网站建设、网站重做改版、科尔沁右翼中网站定制设计、自适应品牌网站建设、html5、商城系统网站开发、集团公司官网建设、外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为科尔沁右翼中等各大城市提供网站开发制作服务。
z = a + 1
c = b + 5
return (z,c)
(q,w) = plus(1,2)
plud(q,w)
##我这里假设a=1,b=2
##首先plus(1,2),得到z=2,c=7,通过return 让(q,w)=(z,c)的值,然后plud(q,w)即可实现将z,c的值传递给下一个函数
感觉不行,局部变量要别的函数用只有一个办法,不过我没成功过,就是用global,变成全局,然后再global到局部给下个def用
最好还是把你要的变量,做成别的函数的结果,然后defA()和defB()都去调用是最好的,也方便改
比如这样
1 如果有z的话,则相当于pow(x, y) % z
2,round函数的digit是指,保留的小数位数如round(2.4546) = 2 #不保留任何小数
round(2.4546,3) = 2.455 #保留了三位小数
#导入math包import math#定义点的函数class Point: x = 0 y = 0 z = 0 def __init__(self, x, y, z): self.x = x self.y = y self.z = z def getx(self): return self.x def gety(self): return self.y def getz(self): return self.z #定义距离函数class Getlen: def __init__(self, p1, p2): self.x = p1.getx() - p2.getx() self.y = p1.gety() - p2.gety() self.z = p1.getz() - p2.getz() self.len = math.sqrt((self.x)**2 + (self.y)**2 + (self.z)**2) def getlen(self): print("两点间的距离为:" , self.len) p1 = Point(0,0,0)p2 = Point(1,1,1)g = Getlen(p1,p2)
超时机制。python中调用两个函数需要给函数设置超时机制,以防止它超时,这里可以用python的signal模块,signal模块可以实现程序内部的信号处理。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# File name: parabolic
# Project name: parabolic_equation
"""
.. moduleauthor::
.. Module.. name parabolic of procjet parabolic_equation
"""
from sympy import *
import matplotlib.pyplot as plt
import numpy as np
def _filterComplex(inputvalue, description='inputvalue'):
try:
str(inputvalue).index('I')
except ValueError:
return False
else:
return True
def _checkBool(inputvalue, description='inputvalue'):
"""
:param inputvalue:
:param description:
:return:
"""
if not isinstance(inputvalue, bool):
raise TypeError(
'The {0} must be boolean. Given: {1!r}'.format(description, inputvalue))
def _checkNumerical(inputvalue, description='inputvalue'):
"""
:param inputvalue:
:param description:
:return:
"""
try:
inputvalue + 1
except TypeError:
raise TypeError(
'The {0} must be numerical. Given: {1!r}'.format(description, inputvalue))
def _drawTowPara(expr_1, expr_2, inputmin, inputmax ,step=0.1):
"""
:param expr_1:
:param expr_2:
:param inputmin:
:param inputmax:
:param step:
:param expr_1_evalwithY:
:param expr_2_evalwithY:
:return:
"""
_checkNumerical(inputmin, 'xmin')
_checkNumerical(inputmax, 'xmax')
_checkNumerical(step, 'step')
y1List = []
x1List = []
y2List = []
x2List = []
if expr_1.vertical is True:
x1List = np.arange(inputmin, inputmax, step)
for x in x1List:
y1List.append(expr_1.evaluates_Y(x))
else:
y1List = np.arange(inputmin, inputmax, step)
for y in y1List:
x1List.append(expr_1.evaluates_X(y))
if expr_2.vertical is True:
x2List = np.arange(inputmin, inputmax, step)
for x in x2List:
y2List.append(expr_2.evaluates_Y(x))
else:
y2List = np.arange(inputmin, inputmax, step)
for y in y2List:
x2List.append(expr_2.evaluates_X(y))
plt.plot(x1List, y1List, '+')
plt.plot(x2List, y2List, '-')
plt.show()
def _solveCrossing(expr_1, expr_2):
"""
:param expr_1:
:param expr_2:
:return:
"""
x = Symbol('x')
y = Symbol('y')
print "Given the first expression: {0!r}".format(expr_1.expr)
print "Given the first expression: {0!r}".format(expr_2.expr)
ResultList = solve([expr_1.expr, expr_2.expr], [x, y])
Complex = False
ResultListTrue = []
for i in range(0, (len(ResultList)),1):
if _filterComplex(ResultList[i][0], 'x') or _filterComplex(ResultList[i][1], 'y'):
Complex = True
else:
ResultListTrue.append(ResultList[i])
if len(ResultListTrue) == 0 and Complex:
print "Two hyperbolic do not intersect, and there is imaginary value."
elif len(ResultListTrue) == 1:
print "Two hyperbolic tangent.:"
print ResultListTrue
else:
print "Two hyperbolic intersection, and Points are:"
for iterm in ResultListTrue:
print iterm
class Parabolic():
"""
"""
def __init__(self, a, b, c, vertical=True):
"""
:return:
"""
_checkNumerical(a, 'a')
_checkNumerical(b, 'b')
_checkNumerical(c, 'c')
_checkBool(vertical, 'vertical')
self.a = a
self.b = b
self.c = c
self.vertical = vertical
self.y = Symbol('y')
self.x = Symbol('x')
self.xarray = []
self.yarray = []
if vertical is True:
self.expr = (self.x**2)*self.a + self.x*self.b + self.c
else:
self.expr = (self.y**2)*self.a + self.y*self.b + self.c
def __repr__(self):
"""
:return:
"""
if self.vertical is True:
return "The Equation look like: {0!r}".format(self.expr)
else:
return "The Equation look like: {0!r}".format(self.expr)
def evaluates_X(self, inputvalue):
"""
:param inputvalue:
:return:
"""
_checkNumerical(inputvalue, 'y')
return self.expr.subs(self.y, inputvalue)
def evaluates_Y(self, inputvalue):
"""
:param inputvalue:
:return:
"""
_checkNumerical(inputvalue, 'x')
return self.expr.subs(self.x, inputvalue)
def getArrays(self, inputmin, inputmax, step=1):
"""
:param inputmin:
:param inputmax:
:param step:
:return:
"""
_checkNumerical(inputmin, 'xmin')
_checkNumerical(inputmax, 'xmax')
_checkNumerical(step, 'step')
if self.vertical is True:
for x in range(inputmin, inputmax, step):
self.xarray.append(x)
self.yarray.append(self.evaluates_Y(x))
else:
for y in range(inputmin, inputmax, step):
self.yarray.append(y)
self.xarray.append(self.evaluates_X(y))
def drawPara(self, inputmin, inputmax, step=1):
"""
:param inputmin:
:param inputmax:
:param step:
:return:
"""
_checkNumerical(inputmin, 'xmin')
_checkNumerical(inputmax, 'xmax')
_checkNumerical(step, 'step')
yList = []
xList = []
if self.vertical is True:
xList = np.arange(inputmin, inputmax, step)
for x in xList:
yList.append(self.evaluates_Y(x))
else:
yList = np.arange(inputmin, inputmax, step)
for y in yList:
xList.append(self.evaluates_X(y))
plt.plot(xList, yList, '+')
plt.show()
if __name__ == '__main__':
pa1 = Parabolic(-5,3,6)
pa2 = Parabolic(-5,2,5, False)
print pa1
print pa2
_solveCrossing(pa1, pa2)
_drawTowPara(pa1, pa2, -10, 10, 0.1)
# 这就是你想要的,代码解决了你的大部分问题,可以求两条双曲线交点,或者直线与双曲线交#点,或者两直线交点. 不过定义双曲线时候使用的是一般式.也也尽可能做了测试,如果有#问题的话,追问吧