Python 程序不';t在编辑器(sublime、atom)上运行,并在web编辑器上关闭以使用13 CPU秒
我仍然是编程初学者,因此下一段代码是为了学习而编写的 根据你的生日和当前日期,计算你的年龄 几天之内。补偿闰日。假设生日 当前日期是正确的日期(没有时间旅行)。简单地说,如果你出生于2012年1月1日,今天的日期是 2012年1月2日您出生1天 为了解决这个问题,我想出了两种不同的方法,但它们都不运行,它甚至不打印none或-1,它什么也不做。最糟糕的部分(我想知道原因)是,在运行它之后,我的电脑开始减速,因此我需要重置或关闭我的电脑(surface book 2,所以我认为这不是硬件问题)。我是否正确安装了python 代码如下:Python 程序不';t在编辑器(sublime、atom)上运行,并在web编辑器上关闭以使用13 CPU秒,python,python-2.7,Python,Python 2.7,我仍然是编程初学者,因此下一段代码是为了学习而编写的 根据你的生日和当前日期,计算你的年龄 几天之内。补偿闰日。假设生日 当前日期是正确的日期(没有时间旅行)。简单地说,如果你出生于2012年1月1日,今天的日期是 2012年1月2日您出生1天 为了解决这个问题,我想出了两种不同的方法,但它们都不运行,它甚至不打印none或-1,它什么也不做。最糟糕的部分(我想知道原因)是,在运行它之后,我的电脑开始减速,因此我需要重置或关闭我的电脑(surface book 2,所以我认为这不是硬件问题)。我
daysOfMonths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
def isLeapYear(year):
if year % 4 != 0:
return False
elif year % 100 != 0:
return True
elif year % 400 != 0:
return False
else:
return True
def next_date(year, month, day):
day += 1
if isLeapYear(year) == True:
daysOfMonths[1] = 29
elif day > daysOfMonths[month-1]:
day = 1
month += 1
elif month > 12:
month = 1
year += 1
return year, month, day
def daysBetweenDates(y1, m1, d1, y2, m2, d2):
days = 0
while [y1, m1, d1] < [y2, m2, d2]:
y1, m1, d1 = next_date(y1, m1, d1)
days += 1
return days
print daysBetweenDates(2000,01,10,2001,01,12)
daysOfMonths=[31,28,31,30,31,30,31,31,30,31]
def isLeapYear(年份):
如果年份%4!=0:
返回错误
elif年份%100!=0:
返回真值
elif年份%400!=0:
返回错误
其他:
返回真值
def下一天(年、月、日):
天数+=1
如果isLeapYear(year)=True:
日/月[1]=29
elif day>daysOfMonths[第1个月]:
天=1
月份+=1
如果月份>12:
月份=1
年份+=1
返回年、月、日
def日期之间(y1、m1、d1、y2、m2、d2):
天数=0
而[y1,m1,d1]<[y2,m2,d2]:
y1,m1,d1=下一个_日期(y1,m1,d1)
天数+=1
回归日
打印日期之间的日期(2000,01,102001,01,12)
我已经搜索了答案,但通常当问题与我类似时,答案要么与调试有关,要么与循环无限相关,但我已经测试了函数
isLeapYear
和next\u date
。我还通过使用“下一个日期”功能将一个日期添加到第一个日期,并告诉计算机在日期1和2相同时停止,以确保while不会变成无穷大。您正在重新发明轮子。可以使用python的标准库对日期执行各种操作
实施:
from datetime import datetime
def days_between_dates(date_1, date_2):
# date format: MM/DD/YYYY you can change to whatever format you need
date_format = "%m/%d/%Y"
# convert given date string to python datetime objects
date_1_object = datetime.strptime(date_1, date_format)
date_2_object = datetime.strptime(date_2, date_format)
# substracting date_1 from date_2 result python datetime delta object
delta = date_2_object - date_1_object
# return number of days in integer format from delta object
return delta.days
用法:
days_between_dates('12/12/2018', '12/12/2018') # returns 0
days_between_dates('12/12/2018', '12/13/2018') # returns 1
days_between_dates('12/12/2017', '12/12/2018') # returns 365
代码不工作的原因
下一年功能的实现是错误的。虫子是
语句daysOfMonths[1]=29
changesdaysOfMonths
forever,这意味着在第一个闰年之后的所有年份daysOfMonths[1]
将是29
,这是我们不想要的。解决方法是维护两个独立的daysOfMonths
列表,或将daysOfMonths[1]
值放回28
下一个日期(2000,1,31)
返回(2000,1,32)
,但它应该是(2000,2,1)
。这是因为elif
。如果年份是闰年,则第2、3个条件day>daysOfMonths[month-1]
,month>12
将不会执行,因为它们位于elif
中,但我们希望检查这些条件,即使是闰年。解决这个问题的方法不是将它们放入elif
块中,这样所有条件都将始终执行
下一年的正确实施将是
commonYear = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
leapYear = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
def next_date(year, month, day):
day += 1
daysOfMonths = commonYear
if isLeapYear(year) == True:
daysOfMonths = leapYear
if day > daysOfMonths[month-1]:
day = 1
month += 1
if month > 12:
month = 1
year += 1
return year, month, day
为什么您的程序不在编辑器中运行?这可能是因为当循环变为无限循环时,导致程序在编辑器中不返回任何内容。但是web编辑器可以检测无限循环并终止进程您可以使用datetime
模块吗?另外,我真的不明白您问题的标题。我建议说得更清楚一些。请修正代码的缩进。这是我第一次使用堆栈,但我已经修正了缩进。我的意思是,当我在atom或sublime中运行代码时,程序不会运行,而当我在web编辑器(Udacity网页)中运行它时,它会显示错误“程序因在web编辑器上使用13 CPU秒而关闭”“最糟糕的部分(我想知道原因)在运行它之后,我的电脑开始变慢,所以我需要重置或关闭我的电脑“这就是当你的程序陷入无限循环时会发生的事情。无需重新启动计算机,您只需中断程序即可(如果您在终端上运行程序,Ctrl-C就可以了,否则如果您在IDE上运行程序,IDE中会有一些停止按钮)。谢谢您的帮助,但正如我在帖子中所说,这是为了学习,所以我想让它与我所学的东西一起工作。我真的不知道为什么这个程序不能在编辑器中运行实际上这就是我一直在思考的问题,现在我可以通过添加一个helper函数来解决这个问题,但是我仍然在努力为什么它不能工作way@JosephArcila我修改了你的代码为什么不工作的答案,检查一下,非常感谢你,你的回答非常完整,我完全理解