王 娜
(衡水学院 河北 衡水 053000)
Python的含义是“蟒蛇”,它的拥有者是“Python Software Foundation”,简称PSF,最开始是由Guido van Rossum所开发,发展至今已有30年了。Python语言拥有高效的易于操作的数据结构,是一门解释性语言。Python语言具有丰富的标准库和第三方库,由于它的开放性,第三方库还在不断的增加当中,可以解决生活中方方面面的问题。目前Python广泛应用于机器学习、数据分析和网络爬虫等方面。
万年历,顾名思义,就是可以查看任意年份月份的日历。在交互窗口输入年份和月份,就可以出现跟日历一样的图案。
制作万年历之前,必须做以下准备。
(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号就得是下一行的开头,放在日的下面。
整个程序中用到的主要语法有以下几种。
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允许嵌套定义函数。
在本例中,闰年的判断、天数的统计都定义成了函数,这样大大增加了程序的灵活度,随意给出年份和月份,就可以很快计算出该月有多少天,以及每天是星期几。
用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="")
(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="")
for循环常见用法:
for <循环变量> in <可迭代对象或迭代器>:
循环体
for循环结构的执行过程见图1。
图1 for循环执行流程图
例如下面的语句:
for index_month in range(1,month):
days += monthDay(year,index_month)
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循环里,先前已经举例,不再赘述。
eval是python的一个内置函数,参数常常是一个字符串类型,作用就是去掉字符串数据最外层的引号,常常用来进行数据类型的转换,把字符串型数据转换成数值型数据。
例如: eval( '3 * 7') #结果是21。
程序的执行结果见图2。
图2 执行效果图