Sunday, October 17, 2004

这是一个简单的数学问题。一年有五十二周,我今年三十六岁半(译者注:笔者于04年发表这篇blog),这就意味着我已经度过了一千九百多个周末了。

当你以周,月或年为单位来谈论人的一生时,那听起来挺长的。而要是以周末为单位,那似乎就变得非常之短了,因为周末这个概念听起来要精确的很多。我大概没怎么太重视我最开始的大约260个周末,即从零到五岁。而现在,在我的四十岁生日以前我还有不到两百个周末,以及在那之后的我五十岁之前的另外五百二十个周末了。如果我想要在那天到来前完成点什么的话,我最好应该马上开始行动!

然而,在那之前,为何不写一小段Python代码来算一算在这两个日子之间周末的个数呢?出于简单考虑,我们将第二个日期看成为一个Python式的栅栏柱(Pythonic fencepost):我们计算那些以第一个日子开始为起点、以第二个日子之前的那一天的末了为终点的周末的数量。

(译者注:栅栏柱错误(fencepost error)。这个名字来源于对下面这个问题最常见的但却是错误的答案,如果你要建造一个 100 英尺 长的栅栏,其栅栏柱间隔为 10 英尺 ,那么你需要多少根栅栏柱呢?11根或9根都是正确答案,这取决于是否要在栅栏的两端树立栅栏柱,但是10根却是错误的。要当心栅栏柱错误,每当你在处理长度、范围或模数的时候,都要仔细确定其端点是否应该被包括在内)

这个简单的方法就是将这两个日期之间的天区分开来,并除以7。这适用于大多数的情况,但是有时在这期间有一个(或两个)周六或周日。所以,我们将对每一个剩余的、是周六或周日的那些天增加半个周末(比如,日期的isoweekday()函数为6或7)。为了确定那个值,我们从终点日期起倒退若干天,其回退个数与剩余天数相等,然后算出这些天的跨度里面是否包含周六和周日。(猜猜今天早上睡不着时我在床上一直考虑着什么数学问题?)

def  weekends_between(d1,d2):
    days_between  =  (d2 - d1).days
    weekends, leftover  =  divmod(days_between, 7 )
     if  leftover:
        start_day  =  (d2 - timedelta(leftover)).isoweekday()
        end_day  =  start_day + leftover
         if  start_day <= 6   and  end_day > 6 :
            weekends  += . 5
         if  start_day <= 7   and  end_day > 7 :
            weekends  += . 5
     return  weekends

让我们测试一下看看它是如何运行的:

>>> 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相关推荐

  1. 如何绘制高大上的词云图?

    作者 | 苏克 责编 | 郭芮 当我们手中有一篇文档,比如书籍.小说.电影剧本,若想快速了解其主要内容是什么,则可以采用绘制 WordCloud 词云图,显示主要的关键词(高频词)这种方式,非常方便. ...

  2. ddmmyy日期格式是多少_DDMMYY什么意思?

    展开全部 日月年,是英文日期的一种书写方式. 用英语表达年月日的顺序: ① 月\日\年 例:32313133353236313431303231363533e58685e5aeb93133343365 ...

  3. USACO1.1.3 - Friday the Thirteenth

    星期五第十三 星期五是第13个真的不寻常的事件吗? 也就是说,这个月的13日是否比星期的任何其他星期少?要回答这个问题,请写一个程序,计算每个月的第13个星期日,星期一,星期二,星期三,星期四,星期五 ...

  4. 数学符号发音及英文表达

    α( 阿而法) β( 贝塔) γ(伽马) δ(德尔塔) ε(艾普西龙) ζ(截塔) η(艾塔) θ(西塔) ι约塔) κ(卡帕) λ(兰姆达) μ(米尤) ν(纽) ξ(可系) ο(奥密克戎) π ( ...

  5. ENGLISH资料收集(3)-英语日期的正确表达

    1.年份 关于四位数年份的读法有下列几种情形: (1) 一般情况下,将表示年份的四个数字按前后分为两组,每一组的数字都按基数词来读. 1865年读作 eighteen sixty-five 1998年 ...

  6. 涉及数字的英语表示——几点钟、年月日、世纪、年代、年龄

    几点钟 直接表示,如果是十二小时制结尾就会有am,pm区分,没有的都是二十四小时制. 如five am(上午五点),six twenty-six(六点二十六分). 中间加介词(美式before,aft ...

  7. English: date time

    year 写法方面:直接写数字,如 1993. 朗读方面:将表示年份的四个数字按前后分为两组,每一组的数字都按基数词来读.如:1993 读成 nineteen ninety-three. 几种特殊情况 ...

  8. python将英文单词表示的数字转换成阿拉伯数字的代码

    下边内容内容是关于python将英文单词表示的数字转换成阿拉伯数字的内容. import re _known = { 'zero': 0, 'one': 1, 'two': 2, 'three': 3 ...

  9. java 数字翻译成英文_Java实现将数字日期翻译成英文单词的工具类实例

    本文实例讲述了Java实现将数字日期翻译成英文单词的工具类.分享给大家供大家参考,具体如下: package com.sunyard.etp.ag.util; import java.math.Big ...

最新文章

  1. 爬取数据解决方案- 每页打开+单个查询
  2. php动态生成链接,PHP动态生成javascript文件的2个例子
  3. ionic angularJS input 相关指令 以及定时器 的使用
  4. 2010502260926_《avolon》
  5. Java基础 五 方法
  6. git、github、gitlab、gitee的区别
  7. python 二维列表切片_Python中mutable与immutable和二维列表的初始化问题
  8. Win10 UWP开发系列:开发一个自定义控件——带数字徽章的AppBarButton
  9. ASP.NET MVC:WebViewPage.cs
  10. 后妈茶话会_歌词(Tough Love)
  11. js怎么获取扫码枪条码_如何使用JavaScript获取扫码枪扫描得到的条形码
  12. 人脸识别门禁系统有哪些功能作用
  13. 在php中调用api接口,如何调用51ditu的api接口并在PHP中应用
  14. 如何设计一个小而美的秒杀系统(抢红包)?
  15. C++编译错误总结及其英文翻译————墨白
  16. Window10系统下触摸板失灵了 该咋处理
  17. 网吧管理系统的设计与实现
  18. ROG华硕幻系列原厂预装系统恢复出厂设置安装包
  19. vue+js数据处理,对数组重新构造
  20. google glog使用指南

热门文章

  1. ElasticSearch 守护进程 JSW
  2. 验证码短信平台短信发送失败怎么办?
  3. [字典树+KM]hdoj 2813:One fihgt one
  4. html、body默认尺寸
  5. 判断装睡c语言程序设计,团体程序设计天梯赛-练习集 L1-047 装睡
  6. JavaScript教程-38-JavaScript面向对象编程
  7. 如何制作自己公司简洁型的PPT模板(模板一)
  8. UIActionSheet -- 发现Cancle按钮会出现在其他按钮上头解决方法
  9. PCV安装+报错解决
  10. 软件测试中如何测试日志内容