python 编写输出日历详细解析

python编写万年历,输入某一年某一月,显示这个月的日历 

运行如下:



主要是思想和方法,代码不是那么的完美,因此不足之处敬请见谅。

我将它分成三个板块分别是 年、月、周。你可能会有疑问,不是是“年月日”么,为什么成了年月周了,到后面就知道了。

   它的思想是从某一个起始年算起(这个“某一年”你可以自己定义),一直到你所输入的年份的前一年(因为你输入的这一年还没有结束,只能计算之前经过的年份),输入月份的前一个月(因为这一月也没有结束,只能计算之前已经经过的月份),累计一共是多少天,然后计算出这个月第一个星期前面的空格数,从而进行输出,比如我是从1900年算起,输入 2018年 3 月 ,则会计算从1991--2017年以及2018年 1、2月的天数,如下所示 


前面有四个空格,然后循环输入这一月的天数,逢7换行。这其中包括闰年的判断,是不是闰月,每月是多少天。后面的代码我会详细解释加深理解。其实Java 、C 、C++ 都是这样的原理。

为了减少代码的行数,我进行了一些精简,不是很标准。

year = int(input("请输入年份:"))
if((year %4 == 0 and year %100 != 0) or (year % 400 == 0)):run = True
else:run = False     #这行也可以不用写
i = 1900
sum = 0
while i < year - 1:
    i += 1
    if((i % 4 == 0 and i % 100 != 0) or (i % 400 == 0)):sum += 366
    else: sum += 365
month = int(input("请输入月份:"))
j = 1
while j < month:
    if((j == 1) or (j == 3) or (j == 5) or (j == 7) or (j == 8) or (j == 10) or (j == 12)):sum += 31
    elif j == 2:
        if run:sum += 29
        else: sum += 28
    else: sum += 30
    j += 1
week = (sum + 1) % 7
if ((month == 1) or (month == 3) or (month == 5) or (month == 7) or (month == 8) or (month == 10) or (month == 12)):day = 31
elif month == 2:               #二月的嵌套判断,闰年二月29,平年28
    if run:day = 29
    else:day = 28
else:day = 30
print("日\t一\t二\t三\t四\t五\t六")
count = 0    #定义一个计数器,以便后面的换行
k = 0
while k <= week:   #每个月的开始第一周前面的空格数
    k += 1
    print("\t",end="")
    count += 1
    if (count % 7 == 0):print("\n")
   # count=7 进行换行
p = 1
while p <= day:    #显示天数
    print(p,"\t",end="")     #打印  table 不换行
    p += 1
    count += 1
    if(count % 7 == 0):print("\n")        #count=7 进行换行



如果上面的代码都能看懂就ojbk了,没啥大问题,自己可以去试试了。接下来我说一说主要吧,嘿嘿!

1. 闰年的判断: 

四年一闰,百年不闰;四百年再闰。这是判断闰年的口诀,也挺好记的。

就是 能被4整除但是不能被100整除的年份  或者   能直接被400 整除的。


判断完之后定义一个全局变量 run 后面进行闰月的判断会用到。从这里开始计数 定义 sum 闰年 sum + 366 否则 sum + 365

我定义的起始年是 1900,这个你可以随意定义。因为计算的是前一年的 所以是year - 1 .i 是定义的年的计数变量,每循环一次就进行一次判断,是否是闰年。这个 i 是变化的 。前面的 run 是 对这一年的判断,所以在这里不能用。

2. 接下来是月份的输入和判断 



定义一个变量 j 记录月份的变化,逢1 3 5 7 8 10 12 月就对总天数 sum + 31 ,当是二月的时候进行嵌套判断,在这里就用到了前面定义的全局变量 run ,如果是闰年的话就 sum + 29 ,否则就是 28。此外的其他月份都是30天。及得每次循环完之后要 就  j += 1,进入下一次循环,直到你输入的这一月跳出循环。

3. 计算到这里就得出了所有的天数,接下来就进行取余,计算你所输入月份的第一个星期前面的空格数,你可能会有疑问为什么是  (sum + 1) % 7,而不是 sum % 7,其实这都是以前的程序员试出来的,没有什么原因,这是一个定则,不信你将 1 去掉,运行程序的话会少一个空格。包括Java 、c 、c++ 都是这样的规矩。

4.进行本月天数的判断,和上面月份的判断一样,不难理解。



5. 定义一个计数器 count 从 打印第一个空格开始计数,逢7 换行。定义变量 k ,从零开始计算,打印空格,和week 作比较,这里注意是    k <= week,比如week=4,则后面会有5个空格 。空格判断完之后就开始输出这个月的天数,每输出一个数,加一个空格,从本月的第一天开始累计,注意,这里的 count 是承接上面的 count ,也要 + 1,同样是逢7 换行。

好了到了这里就结束了,尽我所能解释了,看懂了最好,看不懂也没关系,多看几遍,最好自己敲一敲,注重思想和方法,了解了它的原理和方法,看起来也就很简单了。


  • 21
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: 的代码可以怎么写? 这个需要使用到python的几个库,比如说requests,beautifulsoup,定时任务库schedule。 首先你需要登录百度,获取搜索结果页面的html代码,然后使用beautifulsoup解析html代码,提取出日历截图。最后使用企业微信的API发送图片。 下面是一个简单的代码示例: ``` import requests from bs4 import BeautifulSoup import schedule import time import datetime def get_calendar_screenshot(): # 登录百度 # 获取搜索结果页面的html代码 # 使用beautifulsoup解析html代码,提取出日历截图 # 使用企业微信的API发送图片 # 每天9点执行一次 schedule.every().day.at("9:00").do(get_calendar_screenshot) while True: schedule.run_pending() time.sleep(1) ``` ### 回答2: 要实现定时百度网页搜索日历截图并发送到企业微信,我们可以使用Python编程语言来完成。 首先,我们需要安装所需的库,如selenium、webdriver、PIL(Python Imaging Library)、requests和openpyxl等。 我们可以使用selenium和webdriver来模拟打开浏览器并进行网页搜索。通过设置浏览器的选项,我们可以使其在后台运行,以免影响到其他操作。然后,我们可以使用PIL库中的方法来进行截图,并将截图保存到本地。 接下来,我们需要使用企业微信提供的API来发送截图。我们可以使用requests库发送HTTP请求,并将截图作为附件发送到指定的企业微信群。 最后,我们可以使用Python的datetime和time模块来计算当前时间,并设置定时任务。我们可以使用APScheduler库来创建定时任务,以便每天定时执行程序。 总结起来,我们可以编写一个Python程序,使用selenium进行网页搜索,使用PIL进行截图,使用requests发送截图到企业微信,并使用APScheduler设置定时任务来实现定时百度网页搜索日历截图发送到企业微信的功能。这样,我们就可以在每天指定的时间自动执行程序,完成所需的操作。 ### 回答3: 使用Python实现定时百度网页搜索并将日历截图发送到企业微信可以通过以下步骤实现: 1. 导入必要的模块:使用selenium模块实现对百度网页的自动搜索,使用pyautogui模块实现截图功能,使用itchat模块实现对企业微信的消息发送。 2. 设定定时任务:使用schedule模块设定任务的执行时间,可以使用装饰器功能实现定时执行。 3. 编写搜索和截图函数:使用selenium模块打开百度网页,并通过输入关键字进行搜索。搜索完成后,使用pyautogui模块实现截图功能,并保存到指定的文件夹。 4. 编写消息发送函数:使用itchat模块实现对企业微信的登录和消息发送功能。可以通过itchat.auto_login()函数实现登录,通过itchat.send_image()函数实现图片的发送。 5. 定时执行任务:在主函数中调用设定好的定时任务函数,设定好任务的执行时间频率。 以下是伪代码实现: ```python import schedule import time import pyautogui import itchat from selenium import webdriver def job(): # 在百度页面进行搜索 driver = webdriver.Chrome() driver.get("https://www.baidu.com") # 输入搜索关键字 search_box = driver.find_element_by_id("kw") search_box.send_keys("关键字") search_box.submit() # 等待搜索结果加载完成 time.sleep(5) # 截图并保存到指定文件夹 pyautogui.screenshot("screenshot.png") driver.close() # 发送截图到企业微信 itchat.auto_login() itchat.send_image("screenshot.png") # 设置定时任务,每天10:00执行 schedule.every().day.at("10:00").do(job) # 保持程序持续运行 while True: schedule.run_pending() time.sleep(1) ``` 通过以上步骤,就可以使用Python实现定时百度网页搜索并将截图发送到企业微信。注意需要预先安装好相应的模块,并根据实际情况修改代码中的关键字和执行时间等参数。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值