Nineteen Hundred Weekends
Sunday, October 17, 2004
这是一个简单的数学问题。一年有五十二周,我今年三十六岁半(译者注:笔者于04年发表这篇blog),这就意味着我已经度过了一千九百多个周末了。
当你以周,月或年为单位来谈论人的一生时,那听起来挺长的。而要是以周末为单位,那似乎就变得非常之短了,因为周末这个概念听起来要精确的很多。我大概没怎么太重视我最开始的大约260个周末,即从零到五岁。而现在,在我的四十岁生日以前我还有不到两百个周末,以及在那之后的我五十岁之前的另外五百二十个周末了。如果我想要在那天到来前完成点什么的话,我最好应该马上开始行动!
然而,在那之前,为何不写一小段Python代码来算一算在这两个日子之间周末的个数呢?出于简单考虑,我们将第二个日期看成为一个Python式的栅栏柱(Pythonic fencepost):我们计算那些以第一个日子开始为起点、以第二个日子之前的那一天的末了为终点的周末的数量。
(译者注:栅栏柱错误(fencepost error)。这个名字来源于对下面这个问题最常见的但却是错误的答案,如果你要建造一个 100 英尺 长的栅栏,其栅栏柱间隔为 10 英尺 ,那么你需要多少根栅栏柱呢?11根或9根都是正确答案,这取决于是否要在栅栏的两端树立栅栏柱,但是10根却是错误的。要当心栅栏柱错误,每当你在处理长度、范围或模数的时候,都要仔细确定其端点是否应该被包括在内)
这个简单的方法就是将这两个日期之间的天区分开来,并除以7。这适用于大多数的情况,但是有时在这期间有一个(或两个)周六或周日。所以,我们将对每一个剩余的、是周六或周日的那些天增加半个周末(比如,日期的isoweekday()函数为6或7)。为了确定那个值,我们从终点日期起倒退若干天,其回退个数与剩余天数相等,然后算出这些天的跨度里面是否包含周六和周日。(猜猜今天早上睡不着时我在床上一直考虑着什么数学问题?)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
让我们测试一下看看它是如何运行的:
>>> from datetime import date, timedelta
>>> weekends_between(date(2004,10,2),date(2004,10,5))
1.0
>>> weekends_between(date(2004,10,3),date(2004,10,5))
0.5
>>> weekends_between(date(2004,10,1),date(2004,10,10))
1.5
>>> weekends_between(date(2004,10,1),date(2004,10,11))
2.0
非常有意思。所以这么算来,我已经度过了1914个周末了。而很显然我是星期六出生的。在一个周末开启我的生命之门,我这个主意很明显是正确的。:)
因此,基于所设计的平均寿命,你在你的生命中还剩下多少个周末了呢?思考一下这个问题,好好享受你的周末时光吧(enjoy your weekend)。
(原文链接网址:http://dirtsimple.org/2004/10/nineteen-hundred-weekends.html)
Nineteen Hundred Weekends相关推荐
- 如何绘制高大上的词云图?
作者 | 苏克 责编 | 郭芮 当我们手中有一篇文档,比如书籍.小说.电影剧本,若想快速了解其主要内容是什么,则可以采用绘制 WordCloud 词云图,显示主要的关键词(高频词)这种方式,非常方便. ...
- ddmmyy日期格式是多少_DDMMYY什么意思?
展开全部 日月年,是英文日期的一种书写方式. 用英语表达年月日的顺序: ① 月\日\年 例:32313133353236313431303231363533e58685e5aeb93133343365 ...
- USACO1.1.3 - Friday the Thirteenth
星期五第十三 星期五是第13个真的不寻常的事件吗? 也就是说,这个月的13日是否比星期的任何其他星期少?要回答这个问题,请写一个程序,计算每个月的第13个星期日,星期一,星期二,星期三,星期四,星期五 ...
- 数学符号发音及英文表达
α( 阿而法) β( 贝塔) γ(伽马) δ(德尔塔) ε(艾普西龙) ζ(截塔) η(艾塔) θ(西塔) ι约塔) κ(卡帕) λ(兰姆达) μ(米尤) ν(纽) ξ(可系) ο(奥密克戎) π ( ...
- ENGLISH资料收集(3)-英语日期的正确表达
1.年份 关于四位数年份的读法有下列几种情形: (1) 一般情况下,将表示年份的四个数字按前后分为两组,每一组的数字都按基数词来读. 1865年读作 eighteen sixty-five 1998年 ...
- 涉及数字的英语表示——几点钟、年月日、世纪、年代、年龄
几点钟 直接表示,如果是十二小时制结尾就会有am,pm区分,没有的都是二十四小时制. 如five am(上午五点),six twenty-six(六点二十六分). 中间加介词(美式before,aft ...
- English: date time
year 写法方面:直接写数字,如 1993. 朗读方面:将表示年份的四个数字按前后分为两组,每一组的数字都按基数词来读.如:1993 读成 nineteen ninety-three. 几种特殊情况 ...
- python将英文单词表示的数字转换成阿拉伯数字的代码
下边内容内容是关于python将英文单词表示的数字转换成阿拉伯数字的内容. import re _known = { 'zero': 0, 'one': 1, 'two': 2, 'three': 3 ...
- java 数字翻译成英文_Java实现将数字日期翻译成英文单词的工具类实例
本文实例讲述了Java实现将数字日期翻译成英文单词的工具类.分享给大家供大家参考,具体如下: package com.sunyard.etp.ag.util; import java.math.Big ...
最新文章
- 爬取数据解决方案- 每页打开+单个查询
- php动态生成链接,PHP动态生成javascript文件的2个例子
- ionic angularJS input 相关指令 以及定时器 的使用
- 2010502260926_《avolon》
- Java基础 五 方法
- git、github、gitlab、gitee的区别
- python 二维列表切片_Python中mutable与immutable和二维列表的初始化问题
- Win10 UWP开发系列:开发一个自定义控件——带数字徽章的AppBarButton
- ASP.NET MVC:WebViewPage.cs
- 后妈茶话会_歌词(Tough Love)
- js怎么获取扫码枪条码_如何使用JavaScript获取扫码枪扫描得到的条形码
- 人脸识别门禁系统有哪些功能作用
- 在php中调用api接口,如何调用51ditu的api接口并在PHP中应用
- 如何设计一个小而美的秒杀系统(抢红包)?
- C++编译错误总结及其英文翻译————墨白
- Window10系统下触摸板失灵了 该咋处理
- 网吧管理系统的设计与实现
- ROG华硕幻系列原厂预装系统恢复出厂设置安装包
- vue+js数据处理,对数组重新构造
- google glog使用指南