Python 使用error mesage作为while语句
我是python新手,需要一些帮助 我有一个python脚本来查找圆心的X坐标。如果r1很小,则xA1和xA2是复数(这表示错误消息:ValueError:math domain error)。我的问题是,如何在while语句中使用此错误消息?我必须复制while语句下面的整个代码吗?可以链接到第一个方程xs2=r3*math.sin(beta2r)吗 谢谢你的回答 罗马人Python 使用error mesage作为while语句,python,while-loop,Python,While Loop,我是python新手,需要一些帮助 我有一个python脚本来查找圆心的X坐标。如果r1很小,则xA1和xA2是复数(这表示错误消息:ValueError:math domain error)。我的问题是,如何在while语句中使用此错误消息?我必须复制while语句下面的整个代码吗?可以链接到第一个方程xs2=r3*math.sin(beta2r)吗 谢谢你的回答 罗马人 这将增加r1,直到xA1和xA2有效 import math r1=0; r2=110.5;
这将增加
r1
,直到xA1和xA2有效
import math
r1=0;
r2=110.5; #vstupny polomer
r3=212.5; #vystupny polomer
beta2d=35; #vystupny uhel
beta1dpoz=45; #vstupny uhel
xA1, xA2 = None, None
#Keep looping till xA1 and xA2 are valid
while xA1 == None and xA2 == None:
beta2r=beta2d*math.pi/180
xs2=r3*math.sin(beta2r)
ys2=r1-r3*math.cos(beta2r)
kruh1=math.pow(xs2,2)+math.pow(ys2,2)
kruh2=math.pow(r1,2)+math.pow(r3,2)-2*r1*r3*math.cos(beta2r)
try:
xA1=1.0/2*((xs2*(1+((math.pow(r1,2)-math.pow(r2,2))/(math.pow(xs2,2)+math.pow(ys2,2)))))+(ys2*(math.sqrt(((2*(math.pow(r1,2)+math.pow(r2,2)))/(math.pow(xs2,2)+math.pow(ys2,2)))-(math.pow(((math.pow(r1,2)-math.pow(r2,2))/(math.pow(xs2,2)+math.pow(ys2,2))),2))-1))))
xA2=1.0/2*((xs2*(1+((math.pow(r1,2)-math.pow(r2,2))/(math.pow(xs2,2)+math.pow(ys2,2)))))-(ys2*(math.sqrt(((2*(math.pow(r1,2)+math.pow(r2,2)))/(math.pow(xs2,2)+math.pow(ys2,2)))-(math.pow(((math.pow(r1,2)-math.pow(r2,2))/(math.pow(xs2,2)+math.pow(ys2,2))),2))-1))))
except ValueError:
r1 += 0.1
xAmat=[xA1,xA2]
xA=max(xAmat)
如果任何其他计算(beta2r、ys2、xs2、kruh1、kruh1
)可能产生ValueError,则将try
语句向上移动以包含这些计算。你想在这里做什么?事实上,while循环将永远循环,因为条件是一个非空字符串,它的计算结果总是
True
。哦,天哪,你能看看这两行有多长。你想让它在计算产生一个值而不是一个错误时停止吗?是的,我正在寻找一个不复杂的第一个数字(不是错误)我正在寻找一个不复杂(不是错误)的第一个数字。我知道这两条线很长。它们是两个圆的交点。非常感谢。现在我也明白了一个原则。我最初为八度音阶编写了这个脚本。有一个不同的原则。感谢您抽出时间:)
import math
r1=0;
r2=110.5; #vstupny polomer
r3=212.5; #vystupny polomer
beta2d=35; #vystupny uhel
beta1dpoz=45; #vstupny uhel
xA1, xA2 = None, None
#Keep looping till xA1 and xA2 are valid
while xA1 == None and xA2 == None:
beta2r=beta2d*math.pi/180
xs2=r3*math.sin(beta2r)
ys2=r1-r3*math.cos(beta2r)
kruh1=math.pow(xs2,2)+math.pow(ys2,2)
kruh2=math.pow(r1,2)+math.pow(r3,2)-2*r1*r3*math.cos(beta2r)
try:
xA1=1.0/2*((xs2*(1+((math.pow(r1,2)-math.pow(r2,2))/(math.pow(xs2,2)+math.pow(ys2,2)))))+(ys2*(math.sqrt(((2*(math.pow(r1,2)+math.pow(r2,2)))/(math.pow(xs2,2)+math.pow(ys2,2)))-(math.pow(((math.pow(r1,2)-math.pow(r2,2))/(math.pow(xs2,2)+math.pow(ys2,2))),2))-1))))
xA2=1.0/2*((xs2*(1+((math.pow(r1,2)-math.pow(r2,2))/(math.pow(xs2,2)+math.pow(ys2,2)))))-(ys2*(math.sqrt(((2*(math.pow(r1,2)+math.pow(r2,2)))/(math.pow(xs2,2)+math.pow(ys2,2)))-(math.pow(((math.pow(r1,2)-math.pow(r2,2))/(math.pow(xs2,2)+math.pow(ys2,2))),2))-1))))
except ValueError:
r1 += 0.1
xAmat=[xA1,xA2]
xA=max(xAmat)