2017-04-11 8 views
1

私はカスタム休日カレンダーでビジネスの日付範囲を作成する関数を定義しました。私は自分自身を無限ループに陥ったと思うが、その理由を知らないのだろうか? documentationからカスタムPython get BDay範囲

import datetime as dt 

def get_bdate(start, end, hoildays): 
list = [] 
while start < end: 
    if start.weekday() >= 5: # sunday = 6; skipping weekends 
     continue 
    if start in holidays: # holidays is a custom set of dates 
     continue 
    list.append(start) 
    start += dt.timedelta(days=1) 
return list 

答えて

1

あなたの問題は、平日の場合や休日の場合は、ループの開始を増やしていないことです。 continueを使うだけで、同じ開始値を無期限に使用することになります!

import datetime as dt 

def get_bdate(start, end, hoildays): 
    my_list = [] 
    while start < end: 
     if start.weekday() > 5 or start not in holidays: 
      my_list.append(start) 
     start += dt.timedelta(days=1) 
    return my_list 

それはstart +=ライン繰り返されるが(より正確には、あなたの以前の例を使用するには:!助けを

import datetime as dt 

def get_bdate(start, end, hoildays): 
    my_list = [] 
    while start < end: 
     if start.weekday() >= 5: # sunday = 6; skipping weekends 
      start += dt.timedelta(days=1) 
      continue 
     if start in holidays: # holidays is a custom set of dates 
      start += dt.timedelta(days=1) 
      continue 
     my_list.append(start) 
     start += dt.timedelta(days=1) 
    return my_list 
+0

ああジーだけ叙事詩が失敗していることに気づい –

+0

してくださいマーク!。!もしあなたが助けてくれれば受け入れられました:) –

+1

@ChristopherApple: 'list'を変数名として使うと、[組み込み型](https://docs.python.org/2/library/stdtypes.html#sequence-types)が壊れてしまいます。 -str-unicode-list-tuple-bytearray-buffer-xrange)を指定します。 –

1

またCから借りcontinue文は、ループの次の繰り返しを続行:

あなたはstartようにコードを変更する必要があります常にインクリメントされます:

import datetime as dt 

def get_bdate(start, end, holidays): 
    result = list() 
    while start < end: 
     if start.weekday() >= 5: # sunday = 6; skipping weekends 
      pass 
     elif start in holidays: # holidays is a custom set of dates 
      pass 
     else: 
      result.append(start) 
     start += dt.timedelta(days=1) 
    return result 

また、変数名にlistを使用しないでください。built-in typeが壊れてしまいます。

+0

おかげで、これは便利です –