Python 如何避免在定义中使用许多if语句?

Python 如何避免在定义中使用许多if语句?,python,if-statement,optimization,refactoring,Python,If Statement,Optimization,Refactoring,我有一个创建url列表的函数。该函数运行良好。但我不喜欢此函数的外观: def prepareadres(city,y,m,d): month = [31,28,31,30,31,30,31,31,30,31,30,31] d = d + 1 d0 = 0 m0 = 0 if (d > month[0]): d = d - month[0] m = m + 1 if (d > month[1]):

我有一个创建url列表的函数。该函数运行良好。但我不喜欢此函数的外观:

def prepareadres(city,y,m,d):
    month = [31,28,31,30,31,30,31,31,30,31,30,31]
    d = d + 1
    d0 = 0
    m0 = 0
    if (d > month[0]):
        d = d - month[0]
        m = m + 1
    if (d > month[1]):
        d = d - month[1]
        m = m + 1
    if (d > month[2]):
        d = d - month[2]
        m = m + 1
    if (d > month[3]):
        d = d - month[3]
        m = m + 1
    if (d > month[4]):
        d = d - month[4]
        m = m + 1
    if (d > month[5]):
        d = d - month[5]
        m = m + 1
    if (d > month[6]):
        d = d - month[6]
        m = m + 1
    if (d > month[7]):
        d = d - month[7]
        m = m + 1
    if (d > month[8]):
        d = d - month[8]
        m = m + 1
    if (d > month[9]):
        d = d - month[9]
        m = m + 1
    if (d > month[10]):
        d = d - month[10]
        m = m + 1
    if (d > month[11]):
        d = d - month[11]
        m = m + 1
    if d == sum(month):    
        print("year complete")
        #print(df.iloc[0, :-2])
    if (m < 10) and (d < 10):
        adres = "https://sinoptik.ua/погода-" + city + "/" + str(y) + "-" + str(m0) + str(m) + "-" + str(d0) + str(d)
    elif (m < 10) and (d >= 10):
        adres = "https://sinoptik.ua/погода-" + city + "/" + str(y) + "-"+ str(m0) + str(m) + "-" + str(d)
    elif (m >= 10) and (d < 10):
        adres = "https://sinoptik.ua/погода-" + city + "/" + str(y) + "-" + str(m) + "-" + str(d0) + str(d)   
    else:
        adres = "https://sinoptik.ua/погода-" + city + "/" + str(y) + "-" + str(m) + "-" + str(d)
    #print(adres)
    return adres
正如我所提到的,代码看起来很糟糕。我使用了许多if语句,并希望将其简化。您能否建议更优雅的方法来编写此定义,避免使用if语句?

使用for循环来迭代几个月:

def prepareadres(city,y,m,d):
    months = [31,28,31,30,31,30,31,31,30,31,30,31]
    d = d + 1
    d0 = 0
    m0 = 0
    for month in months:
        if d > month:
             d = d - month
             m += 1
    if d == sum(months):    
        print("year complete")
        #print(df.iloc[0, :-2])
    if (m < 10) and (d < 10):
        adres = "https://sinoptik.ua/погода-" + city + "/" + str(y) + "-" + str(m0) + str(m) + "-" + str(d0) + str(d)
    elif (m < 10) and (d >= 10):
        adres = "https://sinoptik.ua/погода-" + city + "/" + str(y) + "-"+ str(m0) + str(m) + "-" + str(d)
    elif (m >= 10) and (d < 10):
        adres = "https://sinoptik.ua/погода-" + city + "/" + str(y) + "-" + str(m) + "-" + str(d0) + str(d)   
    else:
        adres = "https://sinoptik.ua/погода-" + city + "/" + str(y) + "-" + str(m) + "-" + str(d)
    #print(adres)
    return adres

每月使用for循环。还可以查看字符串格式。有两个不同的常数为零不是很好。如果d==calluth:则更改为如果d==calluth:pls