基于Python语言的万年历功能的实现

2021-07-13 03:18
信息记录材料 2021年6期
关键词:格式化字符串调用

王 娜

(衡水学院 河北 衡水 053000)

1 引言

Python的含义是“蟒蛇”,它的拥有者是“Python Software Foundation”,简称PSF,最开始是由Guido van Rossum所开发,发展至今已有30年了。Python语言拥有高效的易于操作的数据结构,是一门解释性语言。Python语言具有丰富的标准库和第三方库,由于它的开放性,第三方库还在不断的增加当中,可以解决生活中方方面面的问题。目前Python广泛应用于机器学习、数据分析和网络爬虫等方面。

2 万年历制作思路

万年历,顾名思义,就是可以查看任意年份月份的日历。在交互窗口输入年份和月份,就可以出现跟日历一样的图案。

制作万年历之前,必须做以下准备。

(1)判断某年是否为闰年:def isLeapYear(year): #判断是否是瑞年

(2)列举出每个月的天数并返回:def monthDay(year,month): #12个月的天数

(3)统计出从1900年1月1日到上个月的天数之和:

def totalDay(year,month):

days = 0

for index_year in range(1900,year):

days += 366 if isLeapYear(index_year) else 365

for index_month in range(1,month):

days += monthDay(year,index_month)

return days

也就是说,如果想看2021年3月份的日历,首先计算一下从1900年1月1日开始,到2021年2月底一共多少天。为什么要从1900年的1月1日开始算呢?因为这一天是星期一。从这一天开始,也是为了后续的日期比较好计算是星期几。

(4)计算出本月的1日是星期几:space_num = totalDay(year,month) % 7+1 #1号是星期几。

(5)最后分别计算出本月的每天是星期几,对号入座,注意每7日换行,打印出来。

在计算并打印日历时,需注意两个问题:一是如何让日期和相应的星期对齐,如1号是星期日,那么1号就要放到星期日的下面,2号就要放到星期一的下面,以此类推;二是如何实现换行,如我的排列是“日一二三四五六”,那么在星期六对应的日期后就应该换行。比如7号是星期六,放在六的下面,那么8号就得是下一行的开头,放在日的下面。

3 程序所用到的语法

整个程序中用到的主要语法有以下几种。

3.1 函数的定义和调用[1]

Python语言将可能需要反复执行的代码封装为函数,并在需要该功能的地方进行调用,不仅可以实现代码复用,更重要的是可以保证代码的一致性,只需要修改该函数代码,则所有调用均受到影响。

在实际项目开发中,往往会把一些通用的函数封装到一个模块中,并把这个通用模块文件放到顶层文件夹中,这样更方便管理。

函数定义语法:

def 函数名([参数列表]):

'''注释'''

函数体

函数的调用和其他语言一样,只要写出函数名和实参就可以了。

例如,生成斐波那契数列的函数定义和调用

def fib(n): # 函数头部

a,b = 0,1 # 函数体,也是反复执行的语句

while a < n:

print(a,end=' ')

a,b = b,a+b

print()

fib(1000) #函数的调用在定义函数时需注意以下几个问题:

(1)函数形参不需要声明其类型,也不需要指定函数返回值类型;

(2)即使该函数不需要接收任何参数,也必须保留一对空的圆括号;

(3)括号后面的冒号必不可少;

(4)函数体相对于def关键字必须保持一定的空格缩进;

(5)Python允许嵌套定义函数。

在本例中,闰年的判断、天数的统计都定义成了函数,这样大大增加了程序的灵活度,随意给出年份和月份,就可以很快计算出该月有多少天,以及每天是星期几。

3.2 input函数和print函数[2]

用Python进行程序设计,输入是通过input( )函数来实现的,input函数的一般格式为:

x = input('提示:')

在Python 3.x中,input()函数用来接收用户的键盘输入,可输入数字、字符串和其它任意类型对象。不论用户输入数据时使用什么界定符,input()函数的返回结果都是字符串,需要将其转换为相应的类型再处理。

Python 3.x中使用print()函数进行输出。

print()函数的格式如下:

print([objects][,sep=' '][,end=' '][,file=sys.stdout][,flush=False])

objects是输出的对象;

sep是对象之间插入的分隔符,默认是空格;

end是添加在输出文本最后的一个字符,默认是换行符;

file指定输出内容发送到的文件,默认是显示器;

flush指定输出的内容是否立即写文件。

使用p r i n t函数输出时,常常指定格式化串,格式是:'格式化串' %参数,其中格式化串可以包含格式化字符和常量字符串,Python的格式化字符和C语言的类似。

例如:print("%2d "%i,end="")

3.3 if语句

(1)If语句的单分支结构:

if 条件表达式:

满足条件时要执行的语句块

注意:同一语句块的所有语句缩进相同。

(2)If语句的双分支结构:

if 条件表达式:

满足条件时要执行的语句块1

else:

不满足条件时要执行的语句2

例如本例当中的语句:

if isLeapYear(year): #单分支结构

li[1]= 29

if i==1:

for j in range(space_num):

print(" ",end="")

else:

print("%2d "%i,end="")

3.4 for循环语句

for循环常见用法:

for <循环变量> in <可迭代对象或迭代器>:

循环体

for循环结构的执行过程见图1。

图1 for循环执行流程图

例如下面的语句:

for index_month in range(1,month):

days += monthDay(year,index_month)

3.5 range语句[3]

range() 函数是python的一个内置函数,返回的是一个可迭代对象(类型是对象),而不是列表类型,所以打印的时候不会打印列表。

语法格式为:

range(stop)

range(start,stop[,step])

参数说明:

start: 计数从 start 开始。默认是从 0 开始。例如:range(5)等价于range(0,5);

stop: 计数到 stop 结束,但不包括 stop。例如:range(0,5) 是[0,1,2,3,4]没有5

step:步长,默认为1。例如:range(0,5) 等价于 range(0,5,1)

range常常用在for循环里,先前已经举例,不再赘述。

3.6 eval语句的用法

eval是python的一个内置函数,参数常常是一个字符串类型,作用就是去掉字符串数据最外层的引号,常常用来进行数据类型的转换,把字符串型数据转换成数值型数据。

例如: eval( '3 * 7') #结果是21。

4 程序的执行结果

程序的执行结果见图2。

图2 执行效果图

猜你喜欢
格式化字符串调用
现代人守则:昏死之前请把手机格式化
基于文本挖掘的语词典研究
核电项目物项调用管理的应用研究
LabWindows/CVI下基于ActiveX技术的Excel调用
基于系统调用的恶意软件检测技术研究
格式化
一种新的基于对称性的字符串相似性处理算法
利用RFC技术实现SAP系统接口通信
依据字符串匹配的中文分词模型研究