模块就是一个保存了Python代码的文件。通过在当前文件中导入其它模块,就可以引用它的任何公共的函数、类或属性。
任务1:根据日期显示星期
编写程序s10A.py。要求:
1、输入日期,输出该日期的星期。
2、程序运行效果:
输入日期(y-m-d):2022-2-26
输出:2022年2月26日是星期六
"""
(1)模块的导入方式
① 使用import
import 模块1, 模块2, …
例如:
import math #导入math模块
n=int(input("输入n:"))
print(f"sqrt函数:{math.sqrt(n):.3f}")
print(f"算术运算符:{n**0.5:.3f}")
使用被导入模块中定义的函数或类时,必须包含模块的名字,如math.sqrt(n)。
② 使用from…import…
from 模块名 import 函数名1,函数名2,…
例如:
from time import localtime,strftime #导入time模块中localtime和strftime函数
print("当前系统时间为:")
print(strftime("%Y-%m-%d %H:%M:%S",localtime( )))
导入模块之后,无需添加前缀,可以像使用当前程序中的内容一样使用模块中的内容。如strftime( )和localtime( )函数,无需添加time模块名。
注意:
① 如果模块包含的属性和方法,可能与其他模块的属性和方法同名,选方法①
② 如果要经常访问导入模块的属性和方法,不想重复输入模块名,选方法②
③ 如果选择地导入某些属性和方法,而不想要其它属性和方法,选方法②
④ 尽量少用 from 模块名 import * ,因为无法清晰地表示导入了哪些对象。
"""(2)time模块(教材P97表8-4)
在Python中,通常有两种方式来表示时间:
方法一,时间戳方式:时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。例如:
import time #导入time模块
print(time.time( )) #获取当前时间,结果为实数,单位为秒
输出:
165037**18.8489325
方法二,时间元组struct_time方式:
import time
print(time.localtime( )) #以struct_time类型输出当前时间
输出:
time.struct_time(tm_year=2022, tm_mon=**, tm_mday=19, tm_hour=21, tm_min=50, tm_sec=33, tm_wday=1, tm_yday=109, tm_isdst=0)
struct_time元组共有9个元素,对应索引和属性如下:
索引 属性
0 tm_year(年)
1 tm_mon(月)
2 tm_mday(日)
3 tm_hour(时)
4 tm_min(分)
5 tm_sec(秒)
6 tm_wday(weekday,0-6,星期中的第几天)
7 tm_yday(一年中的第几天)
8 tm_isdst(是否是夏令时)
① strftime( )函数(时间戳转换为指定格式日期,教材P97表8-4)
from time import localtime,strftime
print("当前系统时间为:")
print(strftime("%Y-%m-%d %H:%M:%S",localtime( )))
输出:
当前系统时间为:
2022-0*-19 22:21:47
这里,%Y表示4位年份,%y表示2位年份,%m表示月份,%H表示小时。
② strptime( )函数(字符串转换为时间元组,教材P97表8-4)
from time import strptime #导入time模块中strptime函数
week="一二三四五六日"
s=input("输入日期(y-m-d):")
md=strptime(s,"%Y-%m-%d")
print(f"{s},星期{week[md[6]]}")
输入:2022-5-1
输出:2022-5-1,星期日
这里,s是字符串,md是时间元组。其中md[0]=2022,md[1]=5,...md[6]=6(星期中第7天)。
"""(3)datetime模块
datatime模块重新封装了time模块,提供更多接口,提供的类有date,time,datetime,...
其中date类的方法和属性主要有:
md = date(2022,05,01) #创建date实例
md.year、md.month、md.day:年、月、日
md.weekday( ):返回weekday,0-6
md.isoweekday( ):返回weekday,1-7
md.strftime(fmt):和time模块format相同
md.today( ):返回本地日期的date类型对象
例如:
from datetime import date #导入datetime模块中date类
s=(2022,5,1)
md=date(*s) #创建date实例
print(f"{md.year}年{md.month}月{md.day}日,星期中第{md.weekday( )+1}天")
输出:
2022年5月1日,星期中第7天
这里,创建实例语句md=date(*s),*s是前面章节函数中,不定长参数的实参,形参接受后再解包。参数s可以是元组,也可以是列表,还可以是字典(s={"year":2022,"month":5,"day":1},md=date(**s) ),但不能是字符串。
"""提示:
建议采用time模块中的strptime( )函数(教材P97表8-4),可以直接将input( )接收的字符串,转换为时间元组。采用datetime模块中的date类方法,必须先将input( )接收的字符串,转换为列表或元组。
任务2:使用Windows的默认程序打开文件
编写程序s10B.py。要求:
1、输入一个文件名(含路径)
2、如果文件不存在,显示"ERROR"
3、如果文件存在,使用Windows的默认程序打开文件。
(1)能够打开文件时,显示"CanShow"
(2)不能够打开文件时,显示"NoShow"
4、程序执行效果:
输入文件名:d:\a.docx
输出:CanShow
"""
os模块(教材P95)
os模块中提供了访问操作系统服务的功能。
① os.getcwd( )函数:获取当前工作路径。
import os
print(f"当前工作路径:{os.getcwd( )}")
输出:
当前工作路径:F:\Python****
② os.listdir( )函数:返回文件夹中文件和文件夹名字列表。
import os
for x in os.listdir(os.getcwd( )):
print(x)
输出:
.idea
......
hello.py
s10A.py
③ os.path.isfile( )函数:判断某一路径是否为文件。
os.path.isdir( )函数:判断某一路径是否为目录。
import os
s="c:\20218888\s10A.py"
if os.path.isfile(s):
print("Ok")
else:
print("ERROR")
注意,os.path.isdir( )和os.path.isfile( )需要传入的参数是绝对路径。
④ os.system( )函数:将字符串转化成命令在服务器上运行。
import os
n=os.system("notepad.exe") #运行操作系统的记事本程序
print(f"返回值:{n}")
输出:
返回值:0
system( )函数返回值如果为0,则表示命令执行成功,其它值则表示错误。例如:
import os
s="c:\20218888\s10A.py"
if os.path.isfile(s): #文件是否存在
if(os.system(s))==0: #文件能否用Windows的默认程序打开
print("文件存在,成功打开!")
else:
print("文件存在,打开失败!")
else:
print("文件不存在!")
任务3:随机生成整数序列
编写程序s10C.py。要求:
1、随机产生[1,33]上的6个互异的整数
2、按递增顺序输出这些整数
3、程序运行效果:
产生的随机序列为:7,10,15,16,21,28
"""
(1)random模块(教材P97)
random模块为随机数模块,该模块中定义了多个可产生各种随机数的函数。
① random.random( )函数:返回[0,1)之间的随机实数。
import random
print(random.random( ))
② random.randint(x,y)函数:返回[x,y]之间的随机整数。
print(random.randint(1,33))
③ random.choice(seq)函数:从序列中返回一个随机元素。
print(random.choice(("Tuple", "List", "Dict")))
④ random.sample(seq, k)函数:从序列中随机抽取k个元素,并将k个元素以list形式返回。
例如:
from random import randint,sample
a=range(1,34) #a为迭代对象,包括33个元素:1、2、3、.......33
b = [randint(1,33) for i in range(33)] #b为列表,包括33个元素:元素值随机
x = sample(a, 6) #从a中随机抽取6个元素
y = sample(b, 6) #从b中随机抽取6个元素
print(f"range( )方法产生6个随机数:{x}")
print(f"randint( )方法产生6个随机数:{y}")
输出:
range( )方法产生6个随机数:[27, 18, 31, 6, 15, 7]
randint( )方法产生6个随机数:[30, 7, 9, 28, 7, 5]
可以看出,range(1,34)产生的33个数中,随机抽取6个数,每个数肯定都是唯一的。randint(1,33)产生的33个数中,随机抽取6个数,有可能重复!!
(2)如何将列表或元组中元素,转换为字符串输出??
和前面input( )函数接受字符串,再将字符串转换为列表或元组,正好相反。
① 推导式转换
a=[27, 18, 31, 6, 15, 7]
a.sort( )
x=[str(i) for i in a] #str( ),数值型转换为字符串
x=",".join(x)
print("产生的随机序列为:",x)
输出:
产生的随机序列为: 6,7,15,18,27,31
② map函数
a=[27, 18, 31, 6, 15, 7]
a.sort( )
x=map(str,a)
x=",".join(x)
print("产生的随机序列为:",x)
任务4:简易计算器
编写程序s10D。要求:
1、能够计算输入的表达式的值
2、输入的表达式中可包含以下函数:
(1)sin,cos,tan,asin,acos,atan
(2)exp,log,sqrt,round,int,float
3、表达式中可包含运算符:+, -, *, /, //, %, **
4、表达式中可使用常量pi、e
5、程序运行效果:
输入一个表达式:round(sin(pi/4)+sqrt(5),2)
输出:2.94
"""提示:
① 用“from math import *”,导入math模块的所有内容(教材P94)。因为从键盘输入表达式时,你不可能每个数学函数或常量pi前面,还加上模块名称。
② input( )函数接受的数据,都是字符串。eval( )函数的作用,就是除掉字符串两端的引号。只要你输入的是合法算术表达式,都会计算得出正确结果。除非你是一顿乱输的!!这里不要考虑错误和异常的处理。

