美文网首页管理时间管理自己Python 运维生活不易 我用python
快来看看,你的生命进度条走到哪里了?

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

作者: 马拉松Mara | 来源:发表于2017-05-28 11:11 被阅读447次

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

有时候画画就是比文字更能直接戳中人的神经有没有。。。
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下运行正常

相关文章

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

    生命格子~来看看你的生命已经过了多少 有时候画画就是比文字更能直接戳中人的神经有没有。。。Quora上做了这样一个...

  • 诗一首:冬日物语

    冬雪,你走到了哪里? 需要你给我不一样的勇气。 寒夜已如此漫长, 快来给大地披上温暖的衣裳。 你温柔的原谅了世间的...

  • 文字与朋友

    文字是 身旁的旅人 心走到哪里 它跟到哪里 朋友是 生命的慰籍 你说到哪里 它听到哪里 选择文字 同时 选择了 朋...

  • 对话

    忙活了一天,刚进父亲家,就听见父亲着急的对我说:“你快来…,给我看看。可能我今天碰了哪里了,一天没电视。” 放下手...

  • 麻雀为什么要歌唱

    麻雀为什么要歌唱 宇宙和夜一样 热爱生命的海子 却选择了死 人啊 我们走到了哪里 我们还可以走到哪里

  • 你去了哪里

    你去哪里了?快来找我 好么 要不然我就和别人走啦

  • 红八财富:快递新规正式实施这几点你需要知道!

    对于喜欢购物的小伙们来说,快递如同从远方回家的爱人一样,你每天都会在手机中看好几遍信息,看看“她”走到哪里了,看看...

  • 你走到哪里!

    那是2015年的冬天。 我刚从失败的阴影中走出来,那时候我经营一家麻辣烫店由于在学校附近,生意一直挺好,父母过来一...

  • 爱出汗的,快来看看你是哪种吧

    出汗是好事吗?但被动出汗时,汗从哪里出,病从哪里来!快来对照看看,你一定想不到! 1、额头出汗,肝阳上亢 中医认为...

  • 内向的我是如何和同学们打成一片的

    “喂,喂,是晨戈吗?” “嗯,是的,怎么了?武老师?” “哎哟喂,快来快来,我脚扭啦”。 “啊?你在哪里呀?” “...

网友评论

    本文标题:快来看看,你的生命进度条走到哪里了?

    本文链接:https://www.haomeiwen.com/subject/hjacfxtx.html