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的输出结果如图所示:
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程序设计
输出:
无此书
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]
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
预期输出:
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()#关闭文件