2016-07-29 41 views
-3

我想以某種方式設置一個函數,以便只有滿足兩個條件時纔會執行:如果該變量大於某個值並小於另一個值。如何將2個條件放在「if」陳述中?

我有兩個函數來定義start_time和end_time,以及處理這些文件的循環。正如您通過我的if聲明所看到的,我正在嘗試讀取一系列數字內的文件數據。當我將它設置爲我所做的,不過,我得到這個錯誤:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

我不知道如何解決這個問題,特別是因爲我使用的兩個變量(日期,結束日期:兩者都給出一個數值在前面的功能)。

總之,如何讓我想要的「if」語句成爲可能?

編輯:另外,我想這不符合條件的文件將被忽略,我不知道他們是否會,如果我不寫一個「其他」的聲明。

+2

你爲什麼不做錯誤信息說的? – Marcin

+1

你的代碼真的很難閱讀。你對空白過敏嗎?有意義的變量名稱?解釋性評論? –

+0

,因爲似乎沒有任何解釋如何使用它符合我的情況。感謝您的幫助,不過,我真的很感激它@Marcin – xyzman

回答

1

錯誤來自你正在比較一個數組(例如,一個juld)的數字。簡而言之,您需要指定要檢查的if語句的特定元素,或者使用錯誤消息中詳述的any()all()方法。你可以找到這些方法的定義here

0

我真的不明白你想在這裏做什麼,但有三種選擇。如果您只想在數組中的所有值都滿足的情況下進入該塊,請使用a.all(條件)。如果你想進去,如果有任何值滿足條件,使用a.any(條件)。如果你想在去爲滿足數值數組中的每個值的塊,你會做

for x in array: 
    if(condition): 
     do stuff 
    else: 
     do other stuff 
0

的問題是,因爲你是比較即juld兩個日期/數字start_dateend_date數組。所以你需要能夠將數組更改爲日期/數字。我看不到什麼是juld但我懷疑,如果你只需要改變你的代碼:

if start_date<juld[0]<end_date: 

那麼它將即以下工作工作(返回1):

import datetime 
d1 = datetime.date(1996, 4, 1) 
d2 = datetime.date(2017, 7, 29) 
dt = datetime.date(2016, 7, 29) 
x = Read_Data(dt, d1 , d2) 

其中:

def Read_Data(date, start_date, end_date): 
    if start_date<date<end_date: 
     return 1 
+0

所以當你寫juld [0]時,你設置的閾值爲0?當我使用Julian Dates時,我的價值在2萬年內,那麼你能詳細說明一下嗎?謝謝 – xyzman

+0

讓我檢查這個'np.array(ncfile.variables ['JULD'] [:])'並恢復。 – cpemberton

+0

你是否期待只有一個日期來自這個電話?: 'np.array(ncfile.variables ['JULD'] [:])' 如果是這樣,然後打印出來就像 'print(juld)' If你正在尋找的日期是該數組中的第0個元素,那麼我上面寫的解決方案是正確的。但是,如果你期望不止一個日期,並且你想在這些日期執行操作,那麼我建議你像'爲juld中的每個d'一樣遍歷數組。 我希望這有助於!對不起,你很難與此! – cpemberton

1

首先,我想你會在juld最小/最大值想要的樣子,因爲它是一個數組。嘗試像這樣:

if max(juld) < start_date or min(juld) > end_date: 

我認爲這應該工作!

+0

謝謝,最後一個合理的答案,沒有人給我downvotes大聲笑 – xyzman