2016-10-27 54 views
0

我使用Python來運行地下水模型 我的問題是:運行一次

我存儲在列表Model_Names三個地下水模型[慢速,中速,快速]
每模型有不同的性質和不同的MODELNAME即SLOW

我的腳本生成的輸入文件所特有的每個MODELNAME

我正在串聯的三個型號的車型,每個示範運行5次,總共的15次運行。
每次生成地下水位。

除了每個模型的第一次運行(設置水平)之外,先前的模擬中模擬的水平被設置爲下一次模擬的起始水平。在SLOW(我) 即起始水平=模擬水平SLOW(I-1)

不過,我不希望使用模擬水平不同型號
即。我不想在SLOW含水層中模擬水平,以通知中等含水層模擬。

所以我想寫一個for循環,檢查modelname是否等於之前的modelname
然後確定使用哪個輸入文件。

,但我有工作了代碼使用指定循環的先前重複

我曾嘗試下面的代碼,在這裏我想目前MODELNAME印刷相比

for m, modelname in enumerate(Model_Name): 
    print('Model Name = ' +modelname) 

    if m!=0 and modelname == Model_Name[m-1]: 
    print ('** STARTING HEAD INPUT FILE UPDATED WITH HEADS FROM PREVIOUS SIMULATION') 

else: 
    print('** STARTING HEAD INPUT FILE BUILT ')  
問題

但是它將modelname(i)與modelname(i-1)進行了三次比較,因爲它循環了Model_Names的整個長度。
我希望它只檢查modelnames(i)== modelnames(i-1)每個模型運行一次,而不循環Model_Names的整個長度。有沒有一種方法來檢查每個模型運行的modelname,而不通過Model_Names循環?

我也使用

while modelname == modelname[i-1]: 

我找不到
任何引用我想做些什麼嘗試。

對不起,我應該提到的是,for循環嵌套在另一個for循環:

Lag_times = [0.0000864, 0.000864, 0.00864] 
Manage_Freq = [30, 183, 365, 730, 1825, 3650, 18250] 
Model_Name = ['SLOW', 'MEDIUM', 'FAST']  
# Loop through each model variable, build and run model 
for i, j in zip (Lag_times, Model_Name): 
    hk = i       # set hydraulic conductivity 
    modelname = j            
    for k in Manage_Freq:       
     Freq = k      
     # The code in here builds and runs model 

然後我想檢查,如果模型運行的MODELNAME等於先前#modelname

if modelname !=0 and modelname == Model_Name[modelname-1]: 
       print (' STARTING HEAD INPUT FILE UPDATED WITH HEADS FROM PREVIOUS SIMULATION')  
else: 
       print('** STARTING HEAD INPUT FILE BUILT ') 

我不認爲我需要通過Model_Names循環,但我無法確定輸入什麼代碼來檢查modelname(i)== modelname(i-1)而不使用Model_Names。

+0

for循環應該只覆蓋'Model_Name'一次,而不是三倍的長度。請編輯您的帖子以修復代碼的縮進 –

+0

是的,它將modelname(i)與modelname(i-1)進行了三次比較(實際上是長度爲3的列表中的兩次),因爲您試圖比較當前名字到前一個......仍然不清楚你想要什麼。 –

+0

對不起,請重新提問 – Emma

回答

0

我認爲你對enumerate的功能有點困惑。你循環將運行三次。

(假設ModelNames==['Slow','Med','Fast']

  1. 第一迭代。 m將爲0,modelname將爲'慢'
  2. 第二次迭代。 m將爲1,modelname爲'Med'
  3. 第3次迭代。 m將是2並且modelname將是'Fast'

因此modelname == ModelNames[m-1]將永遠是True

嘗試寫下你真正想要做什麼,該代碼將自己寫:

對於每一個模型,你想要做5次。第一次運行會有一些特殊的初始參數,但下一次運行將具有上次運行的參數。

您的代碼將是這個樣子:

for model in ModelNames: # do something for each model 
    params=None #initialize parameters to none meaning they're not set yet 
    for i in range(5): #do 5 iterations 
     if params is None: #have we gotten new starting parameters? 
      params=get_initial_params(model) #figure out the ones for the first run 
     output=run_simulation(model,params) #do your simulation 
     params=get_next_params(output) #get the next parameters