0

私はPythonが初めてで、助けが必要です。

円の中心の X 座標を見つけるための Python スクリプトがあります。r1 が小さい場合、xA1 と xA2 は複素数です (エラー メッセージ ValueError: math domain error を示します)。私の質問は、このエラー メッセージを while ステートメントに使用する方法です。while ステートメントの下のコード全体をコピーする必要がありますか? 最初の方程式 xs2=r3*math.sin(beta2r) へのリンクを作成することは可能ですか?

回答ありがとうございます。

ローマン

import math

r1=0;
r2=110.5;              
r3=212.5;              
beta2d=35;             
beta1dpoz=45;          

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)

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))))

    xAmat=[xA1,xA2]

    xA=max(xAmat) 

    while ('ValueError: math domain error'):   
        r1=r1+0.1
.
.
.
xA=
4

1 に答える 1

1

これは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, kruh1ValueError を生成する可能性がある場合は、tryステートメントを上に移動してそれらも含めます。
7.4. try ステートメント

于 2013-10-27T18:39:53.230 に答える