Python 如何避免在定义中使用许多if语句?
我有一个创建url列表的函数。该函数运行良好。但我不喜欢此函数的外观: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]):
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