目录

  • 前言
    • ●  Python解释器安装
    • ●  PyCharm开发环境
  • Python程序设计实验
    • ●  实验1 IDLE与代码编写规范
    • ●  实验2 输入输出与数据类型
    • ●  实验3 字符串处理
    • ●  实验4 数据运算
    • ●  实验5 列表与元组应用
    • ●  实验6 字典与集合应用
    • ●  实验7 if语句与match语句
    • ●  实验8 使用循环语句
    • ●  实验9 异常处理
    • ●  实验10 函数应用
    • ●  实验11 类的应用
    • ●  实验12 模块应用
    • ●  实验13  应用re模块
    • ●  实验14 文件处理
    • ●  实验15 用户界面设计
    • ●  实验18 SQLite数据库应用
    • ●  理论考试模拟试题A
    • ●  理论考试模拟试题B
    • ●  理论考试模拟试题C
    • ●  理论考试模拟试题D
  • 学习参考
    • ●  01 Python及其IDLE环境
    • ●  02 Python代码规范
    • ●  03 常量和变量
    • ●  04 输入输出
    • ●  05 运算符
    • ●  06 数值类型
    • ●  07 字符串
    • ●  08 列表
    • ●  09 元组
    • ●  10 字典
    • ●  11 集合
    • ●  12 条件语句
    • ●  13 循环语句
    • ●  14 异常处理
    • ●  15 自定义函数
    • ●  16 内置函数
    • ●  17 模块导入与定义
    • ●  18 math模块
    • ●  19 os模块
    • ●  20 time模块
    • ●  21 random模块
    • ●  22 文本文件
    • ●  23 二进制文件
    • ●  24 类的创建和使用
    • ●  25 类的继承与多态
 实验12 模块应用
任务1 sys模块应用

    根据注释将以下代码中的"<X>"替换为适当的内容:

<X> sys    #导入sys模块

a=sys.argv

print(f"file={<X>}")    #输出程序文件名

a=sys.float_info

#输出科学计数法浮点数指数的最大值:

print(f"max_exp={<X>}")

sys.<X>(0)    #终止Python解释器运行

要求:

1、填写内容尽量精简。

2、程序保存到:s12t1.py

3、程序执行效果:

file=C:/20221234/s12t1.py

max_exp=1024

【参考与提示】

1、sys模块主要用于处理Python运行时环境的配置和与Python解释器进行交互。

2、sys.argv是一个列表,包含脚本名称和命令行参数。

3、sys.float_info是一个包含浮点数相关信息的对象,可通过属性获取相关数据。

4、sys.exit可终止Python解释器的运行。可接受一个整数作为退出状态码。通常0表示正常退出。


import sys    # 导入sys模块

# 通过sys.argv获取命令行参数列表

# sys.argv是一个列表,其中第一个元素(索引为0)是当前执行的Python脚本文件名

# 后续元素(如果有)是在命令行中传递给脚本的参数

a = sys.argv

print(f"file={a[0]}")    # 打印当前执行的Python脚本文件名


# 获取Python解释器中浮点数的信息对象

# sys.float_info包含了浮点数实现的各种特性和限制信息

a = sys.float_info

# 打印浮点数在科学计数法表示时指数部分的最大可能值

# 即表示为x = m * (2**e)形式时,e的最大可能整数值

print(f"max_exp={a.max_exp}")


# 终止当前Python解释器的运行,并返回退出状态码0

sys.exit(0)    # 0通常表示程序正常退出,非零值表示程序异常退出


任务2 os模块应用

    根据注释将以下代码中的"<X>"替换为适当的内容:

import os

#得到操作系统信息:

a=os.<X>["OS"]

print("OS=",a)

#搜索c盘根目录下的全部文件和文件夹:

a=os.<X>("c:\\")

a=[f for f in a if f.endswith(".txt")]

if a:

    b=os.stat(f"c:\\{a[0]}")

    #输出文件最后修改时间:

    print("mtime=",<X>)

#文件夹是否存在

if <X>("c:\\sy12"):

    #创建文件夹:

    os.<X>("rd c:\\sy12\\nwqd")

要求:

1、填写内容尽量精简。

2、程序保存到:s12t2.py

3、程序执行效果:

OS=Windows_NT

mtime=1725948811.0860503

【参考与提示】

1、os模块主要用于访问操作系统服务,实现对文件和文件夹的管理。

2、在python交互式解释器中导入os模块后,可以通过"dir(os)"查看os模块的成员。或通过类似"help(os.path)"的语句了解os成员的使用方法。


import os

# 从环境变量中获取操作系统名称

# os.environ[ ]是一个包含系统环境变量的字典,"OS"是表示操作系统名称的环境变量键

# os.getenv( )是一个函数,用于获取指定环境变量的值

a = os.environ["OS"]

print("OS=", a)


# os.listdir( )函数用于获取指定路径下的文件和文件夹列表

a = os.listdir("c:\\")

# 筛选出a列表中以.txt结尾的文件名,使用列表推导式

a = [f for f in a if f.endswith(".txt")]    # f.endswith(".txt")判断文件名是否以.txt结尾

if a:    # 如果a列表不为空,即找到了txt文件

    # 获取c盘下找到的第一个txt文件的状态信息

    # os.stat( )函数用于获取文件或文件夹的状态信息,包括文件大小、修改时间等

    b = os.stat(f"c:\\{a[0]}")

    # st_mtime属性表示文件的最后修改时间(时间戳形式)

    print("mtime=", b.st_mtime)


# os.path.isdir( )函数用于判断指定路径是否为一个存在的目录

if os.path.isdir("c:\\sy12"):

    # 使用系统命令尝试删除c盘下sy12文件夹内的nwqd文件夹

    # os.system( )函数用于执行系统命令,这里使用"rd"命令(Windows系统下删除目录命令)

    os.system("rd c:\\sy12\\nwqd")


任务3 math模块应用

要求:

1、程序运行时输入一个包含数值的字符串,数据分隔符为",",将全部数值求和后输出一个不小于该和值的最小整数。无效数据作零处理。

2、必须使用math模块中的相关函数。

3、程序保存到:s12t3.py

4、程序执行效果:

输入字符串:-9.3,2.3,1.6,abc

value=-5

【参考与提示】

1、利用字符串的内置函数split可切分数据。

2、利用try语句可捕获无效数据的计算。

3、可通过import语句导入math模块中的指定成员。


import math

s = input("输入字符串:")

nums = s.split(',')

total = 0   #初始化累加器

for num in nums:

    try:

        num = float(num)        # 尝试将子字符串转换为浮点数

        total = total + num     # 如果转换成功,将该数值累加到总和中

    except ValueError:

        total = total + 0        # 如果转换失败,添加0

# 使用math.ceil函数对总和进行向上取整,即返回大于或等于该数值的最小整数。

# 与math.ceil函数对应的函数是math.floor,对向下取整

result = math.ceil(total)

print(f"value={result}")


任务4 random模块应用

要求:

1、输入一个[30,60]上的正整数m,输出6个[1,m]上的随机整数(递增排序,不能重复)。输入无效数据时输出"ERROR"。

2、random模块中:需使用shuffle函数,其他函数不能使用。

3、程序保存到:s12t4.py

4、程序执行效果:

输入一个[30,60]上的正整数:56

values=5,9,15,20,21,56

【参考与提示】

求解思路(假定输入的正整数为m):

1、由range函数产生[1,m]上的整数列表a。

2、由random模块中的shuffle函数对a乱序。

3、取列表a的前6个元素得到列表b。

4、对b排序后转换为字符串,删除其空格(利用字符串的内置函数replace)后切片输出。


import random

try:

    m = int(input("输入一个[30,60]上的正整数:"))

    assert 30 <= m <= 60, "整数范围必须是[30,60]"

except:

    print("ERROR")

else:

    a = list(range(1, m + 1))    # 生成从1到m的整数列表

    random.shuffle(a)       # 随机打乱列表a的顺序

    b = a[:6]

    b.sort( )

    result = str(b).replace(" ", "")[1:-1]

    print(f"values={result}")


任务5 time模块应用

要求:

1、输入2个日期(y,m,d;y,m,d),输出这2个日期相差的天数。数据无效输出"ERROR"。

2、只能使用time模块,不能使用其他模块。

3、程序保存到:s12t5.py

4、程序执行效果:

输入2个日期:2020,2,1;2024,10,2

days=1705

【参考与提示】

求解思路:

1、由try语句处理无效数据。

2、利用字符串的内置函数split得到2个日期字符串。

3、将日期字符串转换为元组(9个元素)。

4、利用time模块的mktime方法得到日期的时间戳。

5、两个日期的时间戳相减,得到相差的秒数后再转换为天数输出。


import time

try:

    s = input("输入2个日期:")

    d1, d2 = s.split(';')

    year1, month1, day1 = eval(d1)

    year2, month2, day2 = eval(d2)

    # 构建时间元组(包含年、月、日、时、分、秒等9个元素)

    # 时间元组格式:(年, 月, 日, 时, 分, 秒, 周几, 年中第几天, 是否夏令时)

    # 此处将时、分、秒等设置为0,表示仅关注日期部分

    time_tuple1 = (year1, month1, day1, 0, 0, 0, 0, 0, 0)

    time_tuple2 = (year2, month2, day2, 0, 0, 0, 0, 0, 0)


    # 将时间元组转换为时间戳(从1970年1月1日开始的秒数)

    # time.mktime( )函数处理本地时间

    timestamp1 = time.mktime(time_tuple1)

    timestamp2 = time.mktime(time_tuple2)


    # 计算两个时间戳的差值(秒数),取绝对值后转换为天数

    # 一天有24小时,每小时3600秒(24*60*60=86400)

    days = int(abs(timestamp2 - timestamp1) / (24 * 60 * 60))

    print(f"days={days}")

except:

    print("ERROR")


任务5 datetime模块应用

要求:

1、输入2个日期(y,m,d;y,m,d),输出这2个日期相差的天数,数据无效输出"ERROR"。

2、只能使用datetime模块,不能使用其他模块。

3、程序保存到:s12t5.py

4、程序执行效果:

输入2个日期:2020,2,1;2024,10,2

days=1705

【参考与提示】

求解思路:

1、由try语句处理无效数据。

2、利用字符串的内置函数split得到2个日期字符串。

3、将日期字符串转换为date对象。

4、计算2个日期的差,得到timedelta对象。

5、由timedelta对象的属性得到天数,输出这个天数的绝对值。


# 从datetime模块导入datetime类,用于处理日期和时间

from datetime import datetime

try:

    s = input("输入2个日期:")

    d = s.split(";")

    

    # 使用datetime.strptime()方法将日期字符串解析为datetime对象

    # "%Y,%m,%d" 指定了解析格式:年,月,日(例如:2023,10,15)

    d1 = datetime.strptime(d[0], "%Y,%m,%d")

    d2 = datetime.strptime(d[1], "%Y,%m,%d")

    

    # 计算两个datetime对象的时间差,得到一个timedelta对象

    delta = d2 - d1

    # 输出时间差的天数绝对值(忽略方向,只关注天数差)

    print(f"days={abs(delta.days)}")

except:

    print("ERROR")