2016-05-11 12 views
0

私はPython3.5を使用していますが、私が選択して計算を実行するデータが格納されたSQLiteデータベースを持っています。私が使用しているコードは以下の通りです。入れ子になったforループの動作に問題があります

def Horizontal_Cyl(): 
c.execute("SELECT DIR_Dish1 FROM Tanks") 
DIR_Dish1 = c.fetchall() 
print ("Dish ",DIR_Dish1) 
c.execute("SELECT DIR_Radius FROM Tanks") 
DIR_Radius = c.fetchall() 
print ("Radius",DIR_Radius) 
c.execute("SELECT VAR_LevelReg FROM Tanks") 
VAR_LevelReg = c.fetchall() 
print ("Level",VAR_LevelReg) 
c.execute("SELECT DIR_Length FROM Tanks") 
DIR_Length = c.fetchall() 
print ("Length",DIR_Length) 
x = Dish_Vol() 
dish1Volume = x 
for row in c.execute("SELECT DIR_Radius, VAR_LevelReg, DIR_Length FROM Tanks"): 
    for DIR_Radius in row: 
     for VAR_LevelReg in row: 
      for DIR_Length in row: 
       cylinderVolume = (((DIR_Radius * DIR_Radius) * math.acos((DIR_Radius - VAR_LevelReg)/DIR_Radius)) - \ 
       ((DIR_Radius - VAR_LevelReg) * math.sqrt((DIR_Radius * DIR_Radius) - \ 
       ((DIR_Radius - VAR_LevelReg) * (DIR_Radius - VAR_LevelReg))))) * (DIR_Length/1000) 

       volume = cylinderVolume/1000 

       Total = volume + dish1Volume + dish1Volume 
       print ("Total: ",Total) 

ここで、Dish_Volは、後で使用する数値xを与えるもう1つのコードです。

私は問題を抱えていますがここにある:総ため

for row in c.execute("SELECT DIR_Radius, VAR_LevelReg, DIR_Length FROM Tanks"): 
    for DIR_Radius in row: 
     for VAR_LevelReg in row: 
      for DIR_Length in row: 
       cylinderVolume = (((DIR_Radius * DIR_Radius) * math.acos((DIR_Radius - VAR_LevelReg)/DIR_Radius)) - \ 
       ((DIR_Radius - VAR_LevelReg) * math.sqrt((DIR_Radius * DIR_Radius) - \ 
       ((DIR_Radius - VAR_LevelReg) * (DIR_Radius - VAR_LevelReg))))) * (DIR_Length/1000) 

       volume = cylinderVolume/1000 

       Total = volume + dish1Volume + dish1Volume 
       print ("Total: ",Total) 

、私は出力を取得しています:

Total: 4664.471999862134 
Total: 5045.348779887742 
Total: 27614.512396288894 
Total: 5148.702861581893 
Total: 5575.141845226646 
Total: 30844.130922594857 
Traceback (most recent call last): 
    File "C:\Users\TJgro\workspace\SQLite Practise\Dish_Vol\Calculations \__init__.py", line 204, in <module> 
main() 
    File "C:\Users\TJgro\workspace\SQLite Practise\Dish_Vol\Calculations\__init__.py", line 202, in main 
Horizontal_Cyl() 
    File "C:\Users\TJgro\workspace\SQLite Practise\Dish_Vol\Calculations\__init__.py", line 190, in Horizontal_Cyl 
cylinderVolume = (((DIR_Radius * DIR_Radius) * math.acos((DIR_Radius - VAR_LevelReg)/DIR_Radius)) - \ 
ValueError: math domain error 

エラーの前にリストされている最終合計。 30,844 ....私が探している正しい結果です。私が仮定している数学的なドメインの誤差は、三角法との相互作用を実行している反復からの負の出力があるためです。

私は理解できないようですが、forループがどのように動作しているのか、私はそれらをフォローするように見えず、出力として取得する数字に到達することができません。プログラムの 前の部分では、私は、例えば書かれている:

for row in c.execute("SELECT DIR_Dish1 FROM Tanks"): #Main loop 
    for DIR_Dish1 in row:        #Select the column DIR_Dish1 for each entry 
     if DIR_Dish1 > 0.001: 

そして、これは計算が唯一の変数DIR_Dish1を関与として私は、タスクを達成しましょう持っています。

for row in c.execute("SELECT DIR_Radius, VAR_LevelReg, DIR_Length FROM Tanks"): 
    for DIR_Radius, VAR_LevelReg, DIR_Length in row: 

が、これはint型を反復可能なエラーではないスロー:今直面しprobelmイムは、私が実行する必要がある計算は、DIR_Dish1は、VAR_LevelReg、 によって私はに似何かを書くと言う掛ける関与していることです。

私はちょうど値30,844に到達することができますどのように助けていただければ幸いです... forループを使用して出力されています。ありがとうございました。

+0

エラーが発生したときの計算にはどのような値がありますか? –

+0

DIR_Radius = 1371 VAR_LevelReg = 1500 DIR_Length = 9144 Dish1 = 180 X = 308.27451 –

+0

そして、これらの値から 'cylinderVolume'をcalcualteするformularは動作しますか?これらの値だけを使って定型句を実行しようとしましたか? –

答えて

0
for row in c.execute("SELECT DIR_Radius FROM Tanks"): 
    for DIR_Radius in row: 
     R2 = DIR_Radius**2 
     for row in c.execute("SELECT VAR_LevelReg FROM Tanks"): 
      for VAR_LevelReg in row: 
       RL = DIR_Radius - VAR_LevelReg 
       for row in c.execute("SELECT DIR_Length FROM Tanks"): 
        for DIR_Length in row: 
         cylinderVolume = (((R2) * math.acos((RL)/DIR_Radius)) - \ 
         ((RL) * math.sqrt((R2) - ((RL**2))))) * (DIR_Length/1000) 
print("cyclinder Volume = ", cylinderVolume) 

volume = cylinderVolume/1000 
print("Volume = ", volume) 
Total = volume + dish1Volume + dish1Volume 
print ("Total: ",Total) 

これは私が望んでい、出力:

cyclinder Volume = 30227581.910446744 
Volume = 30227.581910446745 
Total: 30844.130922594857 

は明らかに問題がPythonでインデント構文である、プログラムが用を反復されることで、悪いインデントのために多数回ループソースコード

関連する問題