python文件操作题

1.books.txt文件中存储了某天某书店图书销售数据,其中包含订单号、图书名、单价和数量四项数据。如ORD-1,信息安全技术,39,19表示订单号是ORD-1,图书名是《信息安全技术》,单价是39元,订购数量是19本。

请根据题目要求使用python实现相应的功能。

books.txt文件内容

ORD-1,信息安全技术,39,19

ORD-2,数据库原理,37,43

ORD-3,VB语言程序设计,38,39

ORD-4,Java语言程序设计,39,30

ORD-5,Access数据库程序设计,41,43

ORD-6,软件工程,43,40

ORD-7,计算机基础及MS Office应用,36,44

ORD-8,嵌入式系统开发技术,44,33

ORD-9,操作系统原理,39,35

ORD-10,MySQL数据库程序设计,40,22

ORD-11,MS Office高级应用,39,38

ORD-12,网络技术,43,5

ORD-13,数据库技术,41,32

ORD-14,软件测试技术,36,19

ORD-15,计算机组成与接口,40,38

ORD-16,计算机基础及Photoshop应用,34,29

ORD-17,C语言程序设计,42,45

ORD-18,信息安全技术,39,4

ORD-19,数据库原理,37,7

ORD-20,VB语言程序设计,38,34

ORD-21,Java语言程序设计,39,18

ORD-22,Access数据库程序设计,41,15

ORD-23,软件工程,43,11

ORD-24,数据库技术,41,30

ORD-25,软件测试技术,36,48

ORD-26,计算机组成与接口,40,3

ORD-27,计算机基础及Photoshop应用,34,22

ORD-28,C语言程序设计,42,3

(1) (简答题)

读取books.txt文件数据,将全部数据保存到列表books中。

要求:每一条订单保存在一个列表项中,同时列表项中的单价和数量的数据类型为浮点数。books的输出结果如图所示:

python 复制代码
f=open("D:/books.txt",'r',encoding="UTF-8")#打开文件

books=f.read().strip().split('\n')#先去除前后空格删除后面的空行,再根据换行符切分成列表
#列表的嵌套操作
for i in range(len(books)):#利用range函数定义一个与books列表长度一样的序列进行for循环
    books[i]=books[i].split(',')#在books列表元素的基础上再进行切分变成嵌套列表
    books[i][2]=float(books[i][2])#定义单价数据类型为浮点型
    books[i][3]=float(books[i][3])#定义数量数据类型为浮点型
    
for i in books:#利用for循环将books列表中的内容挨个取出换行输出
    print(i)
    
f.close()#关闭文件

(2) (简答题)

在题1的基础上完成订单查询功能,要求如下:

请根据输入的图书名,显示输出该书的相关订单子列表,计算该本图书当天的订单数,订购数量及订购金额并显示输出。

样例1:

输入:

信息安全技术

输出:

'ORD-1','信息安全技术',39,19

'ORD-18','信息安全技术',39,4

信息安全技术的订单数是2,共23本897元

样例2:

输入:

Python程序设计

输出:

无此书

python 复制代码
f=open("D:/books.txt",'r',encoding="UTF-8")#打开文件

books=f.read().strip().split('\n')#先去除前后空格删除后面的空行,再根据换行符切分成列表
#列表的嵌套操作
for i in range(len(books)):#利用range函数定义一个与books列表长度一样的序列进行for循环
    books[i]=books[i].split(',')#在books列表元素的基础上再进行切分变成嵌套列表
    books[i][2]=float(books[i][2])#定义单价数据类型为浮点型
    books[i][3]=float(books[i][3])#定义数量数据类型为浮点型

books_name=input("请输入图书名:")
books_count=0#定义订单数为0
books_sum=0#定义订购数量为0
books_money=0#定义订购金额为0
x=False#定义一个工具变量

for i in books:#将books列表中的元素逐个取出且逐个放入到临时变量i中
    if books_name==i[1]:
        x=True
        books_count=books_count+1
        books_sum=books_sum+i[3]
        books_money=books_sum*i[2]
        print(i)#输出所有满足条件的订单信息

if not x:
    print("无此书")
else:
    print(f"{books_name}的订单数是{books_count},共{books_sum}本{books_money}元")
f.close()#关闭文件

(3) (简答题)

在题1的基础上完成订单修改功能,要求如下:

输入的订单号和图书名,请根据订单号找到对应的订单,将图书名改为输入的图书名。

测试输入:

ORD-3

C语言程序设计

预期输出:

'ORD-3', 'C语言程序设计', 38, 39

python 复制代码
f=open("D:/books.txt",'r',encoding="UTF-8")#打开文件

books=f.read().strip().split('\n')#先去除前后空格删除后面的空行,再根据换行符切分成列表
#列表的嵌套操作
for i in range(len(books)):#利用range函数定义一个与books列表长度一样的序列进行for循环
    books[i]=books[i].split(',')#在books列表元素的基础上再进行切分变成嵌套列表
    books[i][2]=float(books[i][2])#定义单价数据类型为浮点型
    books[i][3]=float(books[i][3])#定义数量数据类型为浮点型

books_num=input("请输入订单号:")
books_name=input("请输入图书名:")

for i in books:#将books列表中的元素逐个取出且逐个放入到临时变量i中
    if books_num==i[0]:
        i[1]=books_name
        print(i)#输出修改后的订单信息
f.close()#关闭文件

(4) (简答题)

在题1的基础上完成订单增加功能,要求如下:

请根据输入的索引号及订单信息(信息项之间用英文逗号分隔),在books列表中对应索引处插入相应订单信息,然后将所有订单信息分行显示。如果输入的索引号超过订单长度,则将新订单信息追加在最后。

测试输入:

4

ORD-491,零基础学Python,79.8,70

预期输出:

python 复制代码
f=open("D:/books.txt",'r',encoding="UTF-8")#打开文件

books=f.read().strip().split('\n')#先去除前后空格删除后面的空行,再根据换行符切分成列表
#列表的嵌套操作
for i in range(len(books)):#利用range函数定义一个与books列表长度一样的序列进行for循环
    books[i]=books[i].split(',')#在books列表元素的基础上再进行切分变成嵌套列表
    books[i][2]=float(books[i][2])#定义单价数据类型为浮点型
    books[i][3]=float(books[i][3])#定义数量数据类型为浮点型

num=int(input("请输入索引号:"))
book=input("请输入订单信息:")

book=book.split(',')#将输入的订单信息切分成列表
if num<=len(books):
    books.insert(num, book)#在指定下标位置插入元素
else:
    books.append(book)#在列表尾部插入元素
    
#序号
x=1
for i in books:
    print(f'{x}.{i}')
    x=x+1
f.close()#关闭文件
相关推荐
gogogo出发喽12 分钟前
使用Pear Admin Flask
后端·python·flask
橘子编程12 分钟前
操作系统原理:从入门到精通全解析
java·linux·开发语言·windows·计算机网络·面试
唔6614 分钟前
原生 Android(Kotlin)仅串口「继承架构」完整案例二
android·开发语言·kotlin
错把套路当深情15 分钟前
Kotlin 全方向开发技术栈指南
开发语言·kotlin
与虾牵手17 分钟前
Python asyncio 踩了一周坑,我把能犯的错全犯了一遍
python
飞Link21 分钟前
LangGraph 核心架构解析:节点 (Nodes) 与边 (Edges) 的工作机制及实战指南
java·开发语言·python·算法·架构
资深设备全生命周期管理1 小时前
EXE Ver 适用于 未安装Python 以及包的Windows OS
python
武藤一雄1 小时前
WPF中ViewModel之间的5种通讯方式
开发语言·前端·microsoft·c#·wpf
XiYang-DING1 小时前
【Java】堆
java·开发语言
Lyyaoo.1 小时前
【Java基础面经】Java 反射机制
java·开发语言·python