对于循环使用If语句onlyreturns第一个元素

时间:2017-11-16 17:36:22

标签: python list for-loop if-statement

我正在尝试将一个向量提供给一个函数,该函数检查每个元素并将列表中的相应元素分配给正确的if语句。

输出应如下所示:

  

10   11   17   40   370

不知怎的,我只收到第一个元素

  

370

并且循环正在分解。代码如下所示:

def dosomething(thelist):
    period_unit = []
    for period in thelist:
        period = period.lower()        
        if period[-1:] == "d":
            period_unit = 1
        elif period[-1:] == "m":
            period_unit = 30
        elif period[-1:] == "w":
            period_unit = 7
        elif period[-1:] == "y":
            period_unit = 360
        elif period == "dummy":
            period_object = 0
            return period_object
        else:
            raise Exception("Something went wrong")
        period_object = 10 + period_unit
    return period_object   

if __name__ == '__main__':

    date = ["dummy", "1d", "1W", "1M", "1Y"]

    test = dosomething(date )
    print(test)

1 个答案:

答案 0 :(得分:4)

您每次都会重新分配period_unit

你想做类似的事情:

def dosomething(thelist):
    period_unit = []
    for period in thelist:
        period = period.lower()
        curr_period_unit = None
        if period == "dummy":
            curr_period_unit = 0
        elif period[-1] == "d":
            curr_period_unit = 1
        elif period[-1] == "m":
            curr_period_unit = 30
        elif period[-1] == "w":
            curr_period_unit = 7
        elif period[-1] == "y":
            curr_period_unit = 360
        else:
            raise Exception("Something went wrong")
        period_unit.append(10 + curr_period_unit)
    return period_unit

然后它按预期工作:

>>> date = ["dummy", "1d", "1W", "1M", "1Y"]
>>> dosomething(date)
[10, 11, 17, 40, 370]
>>> ' '.join(str(item) for item in dosomething(date))
'10 11 17 40 370'