python错误“;列表索引必须是整数,而不是非非类型”;
我是python新手,从Udacity学习python语言。我想编写一个python程序,它接受两个日期并输出这两个日期之间的日差,假设第二个日期是后者 它抛出了一个错误,即:python错误“;列表索引必须是整数,而不是非非类型”;,python,python-2.7,Python,Python 2.7,我是python新手,从Udacity学习python语言。我想编写一个python程序,它接受两个日期并输出这两个日期之间的日差,假设第二个日期是后者 它抛出了一个错误,即: File /Users/gonewiththewind/Documents/days old.py", line 20, in daysBetweenDates currentDaysOfMonths = daysOfMonths[isLeap(year)][month - 1] TypeError: list
File /Users/gonewiththewind/Documents/days old.py", line 20, in daysBetweenDates
currentDaysOfMonths = daysOfMonths[isLeap(year)][month - 1]
TypeError: list indices must be integers, not NoneType"
when I tried to call the function by "daysBetweenDates(1995,7,28,2018,1,26)
代码如下:
daysOfMonths = [[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]]
def isLeap(year):
if year % 400 == 0:
return True
else:
if year % 100 == 0:
return False
else:
if year % 4 == 0:
return True
def daysBetweenDates(year1, month1, day1, year2, month2, day2):
counter = 0
month = month1
year = year1
day = day1
while(year != year2 or month != month2 or day != day2):
currentDaysOfMonths = daysOfMonths[isLeap(year)][month - 1]
if(day < currentDaysOfMonths):
day = day + 1
counter = counter + 1
print 'counter = '+ counter
else:
day = 1
if(month1 < 12):
month = month + 1
else:
month = 1
year = year + 1
counter = counter + 1
print 'counter = '+ counter
return counter
daysOfMonths=[[31,28,31,30,31,31,31,30,31,30,31],[31,29,31,30,31,30,30,31]]
def isLeap(年度):
如果年份%400==0:
返回真值
其他:
如果年份%100==0:
返回错误
其他:
如果第%4年==0:
返回真值
def日期之间的日期(第1年、第1个月、第1天、第2年、第2个月、第2天):
计数器=0
月=月1
年份=年份1
天=第1天
而(年!=年2或月!=月2或日!=日2):
currentDaysOfMonths=daysOfMonths[isLeap(年)][月份-1]
如果(天<当前天/月):
天=天+1
计数器=计数器+1
打印“计数器=”+计数器
其他:
天=1
如果(月1<12):
月=月+1
其他:
月份=1
年份=年份+1
计数器=计数器+1
打印“计数器=”+计数器
返回计数器
您的is\u leap
功能中缺少一个返回:
def isLeap(year):
if year % 400 == 0:
return True
else:
if year % 100 == 0:
return False
else:
if year % 4 == 0:
return True
else:
return False # <-- here!
这是否更具可读性通常取决于具体情况。但是在这里,使用多个嵌套分支,我认为这有助于保持缩进级别较低,并了解发生了什么。您的is_leap
函数中缺少了返回:
def isLeap(year):
if year % 400 == 0:
return True
else:
if year % 100 == 0:
return False
else:
if year % 4 == 0:
return True
else:
return False # <-- here!
这是否更具可读性通常取决于具体情况。但在这里,由于有多个嵌套分支,我认为这有助于保持较低的缩进级别并了解发生了什么。为了帮助理解,daysOfMonths是一个包含两个数组的数组,其中它们表示闰年和非闰年每月的天数。为了帮助理解,daysOfMonths是一个包含两个数组的数组,其中它们表示闰年和非闰年的每月天数。