Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用error mesage作为while语句_Python_While Loop - Fatal编程技术网

Python 使用error mesage作为while语句

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;

我是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;              #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)