2013-08-22 91 views
0

我正在使用python 2.6。任何人都可以找出爲什麼我的變量平方在min()函數內不能正確計算? 爲了說明,我展示了自己執行的變量** 2,工作正常。 下面是代碼,其次是一些結果:指數不正常工作

from __future__ import with_statement 
import csv, re, time 
timestr = time.strftime("%Y%m%d_%H%M%S") 

fileinput = 'mp_20130822.csv' 
out = open('output2.csv',"wb") 
writer = csv.writer(out, delimiter = ',') 

ESPmax = 100.00 
dynmax = "enabled" 

def config(): 
    global argument 
    if z>30: 
     argument = "T" 
    else: 
     argument = "F" 

with open(fileinput,'rU') as inputfile: 
    reader = csv.reader(inputfile, delimiter = ';') 
    for line in reader: 
      line = re.split(",| ",line[0]) 
      side = str(line[4]) #is "Bid" or "Ask" 
      e = float(line[5]) 
      z = float(line[6]) 
      t = float(line[33]) 
      FW = float(line[34]) 
      FS = max(float(line[35]),200) 
      if FW == 0: 
       continue 
      if (FS == 0) or (FS == 1): 
       continue 
      if side == "Ask": 
       LE = t-e 
      else: 
       LE = e-t 
      LEP = LE/(FW/2) 
      ESP = z/(FS/2) 
      if dynmax == "enabled": 
       ESPmax = min(LEP**2,ESPmax) 

    config() 
    if (argument == "T"): 
     print ('side, e, z, t, FW, FS') 
     print ('LEP,LEP,ESPmax') 
     print (side, '%.2f'%e, '%.2f'%z, '%.2f'%t, '%.2f'%FW, '%.2f'%FS) 
     print ('%.3f'%LEP,'%.3f'%LEP,'%.5f'%ESPmax) 
     print '%.5f'%(LEP*LEP) 

結果:

side, e, z, t, FW, FS 
LEP,LEP,ESPmax 
('Ask', '1.90', '50.00', '1.95', '0.24', '651.00') 
('0.423', '0.423', '0.00130') 
0.17880 
side, e, z, t, FW, FS 
LEP,LEP,ESPmax 
('Ask', '8.40', '40.00', '8.43', '0.17', '4933.00') 
('0.348', '0.348', '0.00130') 
0.12145 
side, e, z, t, FW, FS 
LEP,LEP,ESPmax 
('Ask', '8.40', '40.00', '8.43', '0.17', '4919.00') 
('0.370', '0.370', '0.00130') 
0.13667 
+0

似乎工作正常,'ESPmax = min(LEP ** 2,ESPmax)'似乎已將ESPmax設置爲小於您打印出的任何LEP ** 2的值,當然,最小值是你可能從早期的'0.036'的'LEP'中得到的較小值'0.00130'。 –

+0

ESPmax如何能夠降低到0.00130? – teachamantofish

+0

早些時候通過大約'0.036'的'LEP'值。由於'min'或'** 2'不可能正常工作,並且您在這裏粘貼的東西總是會得到相同的值,所以很有可能某些東西將'ESPmax'的值更改爲'0.00130' 。請注意,如果'Z> 30'(其順便說一句,似乎沒有定義它在'config()'中使用的位置),則只打印任何內容。 –

回答

0

縮進顯然是在Python一個SyntaxError,所以它不清楚是什麼你的代碼實際上不會。雖然我敢肯定,你會莫名其妙地管理分配0.00130ESPmax,一旦你到達那裏

ESPmax = min(LEP**2,ESPmax) 

線將不會爲您的LEP值改變ESPmax

+0

但是ESPmax如何減少到0.00130?我最初給它的默認值爲100.唯一分配一個新值的時間是:ESPmax = min(LEP ** 2,ESPmax)。也不確定是否存在縮進錯誤或您看到它的位置。代碼沒有返回語法錯誤... – teachamantofish

+0

在這裏的代碼中,'config()'調用與任何以前的縮進級別都不匹配。可能是在這裏粘貼它的工件,您是否使用製表符縮進?當你縮進整個代碼塊時,你也不可能在這裏粘貼代碼,忘記選擇最後一行。 –

+0

是的,我現在看到它。可能是來自貼圖的神器。所以,我想出了我的問題。它太愚蠢了。由於我在循環中定義了ESPmax,我忘了在循環結束時將其值重置爲默認值。所以在循環的下一次迭代中,默認值成爲之前的計算值。如果它是一個低數字。每當通過min()函數傳遞一個新的較低值時,它在循環中保持變小。謝謝 – teachamantofish