快来看看,你的生命进度条走到哪里了?

生命格子~来看看你的生命已经过了多少

有时候画画就是比文字更能直接戳中人的神经有没有。。。
Quora上做了这样一个统计:
如果一个月算一个小格子,人生其实只有900个格子(75年 * 一年12个月 = 900个月)。在一张A4纸上画一个30X30的表格,每过一个月就涂掉一格。也许你没有想过,被量化后的人生原来如此短暂。。。
如果你今年20岁,那么已经走完的人生如下。

life-20.jpg

忽然,我很想知道自己的生命进度条走到了哪里。用手画太费劲,画的还不一定好看。然后,我用自学的Python写了一个小程序,用来动态生成生命进度表格

用程序制作的生命进度表格

程序运行后,会先让输入出生年月和生命总长度:

py-life-cell.png

比如:我们输入马云的出生年月1964.9,�然后输入计算年限:75

输出结果

我们会得到一个这样的表格:


17.5.png

结果解读

  • Excel中的每一个单元格表示一个月的时间
  • 里面的数字表示某年月份,在一月会标出年份
  • 所有的格子加在一起是计算年限
  • 已经度过的岁月用灰色背景表示
  • 白色背景表示还剩下多少岁月
  • 红色圈起来的部分是当前进度(如:圈起来的5表示17年5月,就是文章发表时候的年月)

通过Excel,可以一目了然看出已经度过了多少岁月以及我们还剩下多少宝贵的生命余额。

源码分享

运行环境

  • python3.6.1
  • 引用第三方组件: pip3 install xlsxwriter
import xlsxwriter
import datetime
import time
from dateutil import rrule


def writeExcel(year_birth, month_birth, life_years):
    """
    根据出生年月、生命总长度,生成Excel
    :param year_birth: 
    :param month_birth: 
    :param life_years: 
    :return: 
    """
    # 一年几个月
    month = 12

    file_path = '/usr/local/dir_samba/files/life_cells/'
    file_name = file_path + str(year_birth) + '.' + str(month_birth) + "-life_cells.xlsx"

    workbook = xlsxwriter.Workbook(file_name)
    worksheet = workbook.add_worksheet('%s.%s-%dyears' % (year_birth, month_birth, life_years))
    column_index = 0

    month_diff = get_birth_to_now_monthdiff(year_birth, month_birth)

    format_passed = workbook.add_format()  # 定义format格式对象
    setFormatPassed(format_passed)
    format_future = workbook.add_format()
    setFormatFuture(format_future)

    # 一共30*30列
    for i in range(month * life_years):
        yu = i % 30

        # 单元格内容
        cell_value = str(month_birth)
        # 设置单元格宽度
        worksheet.set_column(column_index, column_index, 6)
        # 从头开始
        if month_birth == month:
            month_birth = 0
            year_birth += 1
        # 1月份追加年份
        if month_birth == 1:
            # 追加年份
            cell_value = str(year_birth) + '.' + cell_value
            # 设置单元格宽度
            worksheet.set_column(column_index, column_index, 6)

        # 先确认单元格位置 - For Debug
        # print('%s.[%s,%s,%s]' % (i + 1, column_index, yu, cell_value))
        # 已经度过的月份
        if i < month_diff:
            worksheet.write_string(column_index, yu, cell_value, format_passed)
        else:
            worksheet.write_string(column_index, yu, cell_value, format_future)

        # 下一行
        if yu == 29:
            column_index += 1
        month_birth += 1
        # end for
    print('您的进度表格已制作完成,请到[%s]目录查看' % (file_path))
    workbook.close()


def setFormatPassed(format_passed):
    format_passed.set_border(1)  # 定义format对象单元格边框加粗(1个像素)的格式
    format_passed.set_bg_color('#cccccc')  # 定义format_title对象单元格背景颜色为'#cccccc'的格式
    format_passed.set_align('center')  # 定义format_title对象单元格为居中对齐格式
    format_passed.set_bold()  # 定义format_title对象单元格内容加粗的格式


def setFormatFuture(format_future):
    format_future.set_align('center')


def get_birth_to_now_monthdiff(birthY, birthM):
    """
    根据出生年月,计算到当前时间,过去了多少个月(由于出生日(day)不影响计算结果,固不用传递)
    :param birthY: 出生年份
    :param birthM: 出生月份
    :return: 出生年月和当前时间,相差多少个月
    """
    nowY = time.strftime('%Y', time.localtime(time.time()))
    nowM = time.strftime('%m', time.localtime(time.time()))
    nowD = time.strftime('%d', time.localtime(time.time()))
    # print('当前日期为:%s-%s-%s' % (nowY, nowM, nowD))
    month_diff = get_month_diff(birthY, birthM, 1, int(nowY), int(nowM), int(nowD))
    # print(month_diff)
    return month_diff


def get_month_diff(y1, m1, d1, y2, m2, d2):
    """
    获取两个日期的月份差
    :param y1: 起始年
    :param m1: 起始月
    :param d1: 起始日
    :param y2: 要比较的年
    :param m2: 要比较的月
    :param d2: 要比较的日
    :return: 两个日期之间的月份差
    """
    d1 = datetime.date(y1, m1, d1)
    d2 = datetime.date(y2, m2, d2)

    months = rrule.rrule(rrule.MONTHLY, dtstart=d1, until=d2).count()
    return months


def client():
    """
    接受客户端输入
    :return: void
    """
    if_continue = True
    # 如果输入有误,则重新输入
    while (if_continue):
        try:
            print('请输入出生年份(如1990):')
            # 出生年份
            year_birth = int(input())
            print('请输入出生月份(如1):')
            # 出生月份
            month_birth = int(input())
            print('请输入年限(如75):')
            # 按照多少年的总时长计算
            life_years = int(input())
            if_continue = False
        except ValueError as e:
            print('您的输入有误,只能输入数字,请重试')

    print('您的出生年月为[%s年%s月],将按照总年数[%s年]计算生命进度表格' % (year_birth, month_birth, life_years))
    writeExcel(year_birth, month_birth, life_years)


if __name__ == "__main__":
    client()
    # writeExcel()
    # get_birth_to_now_monthdiff(1984, 9, 10)

经测试,在macOS 10.12.5下运行正常

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,277评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,689评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,624评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,356评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,402评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,292评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,135评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,992评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,429评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,636评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,785评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,492评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,092评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,723评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,858评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,891评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,713评论 2 354

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,099评论 25 707
  • 今天决定推送周凌一的文字,因为觉得有意思。凌一这个人也很有意思,他是学奥数的,据说拿过华杯赛一等奖。刚进初中,因...
    飘逸之境阅读 712评论 0 2
  • 书桌的正确打开方式 传说中的凌乱 小小少年,夜半作业 辅导班?玩乐班?表示忧虑(^_^) 露脸了
    水木清华1阅读 234评论 0 0
  • 创世神创立好人间已经太久,太久了。偌大的天地,只有创世神一个在游荡。一日,无聊至极的创世神为了派遣无穷无尽的寂寞,...
    7d3dec75a0f5阅读 198评论 0 0
  • 你会进入我,不只因为你好,更因为我袒露了自己。。 当你抚慰我的伤痕,融入我的成长,我便对你有了深深的依恋。。 这就...
    Janesha阅读 380评论 0 0