第1关:基于顺序存储结构的图书信息表的创建和输出
任务描述
本关任务:定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据来完成图书信息表的创建,然后统计图书表中的图书个数,同时逐行输出每本图书的信息。
编程要求
输入
输入n+1行,其中前n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。最后第n+1行是输入结束标志:0 0 0(空格分隔的三个0)。其中书号和书名为字符串类型,价格为浮点数类型。
输出
总计n+1行,第1行是所创建的图书表中的图书个数,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔。其中价格输出保留两位小数。
测试说明
平台会对你编写的代码进行测试:
测试输入:
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
0 0 0
预期输出:
8
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
来源
开始你的任务吧,祝你成功!
代码
max_size = 1000
class SqList:
def __init__(self):
self.elem = [None] * max_size # 为顺序表分配一个大小为max_size的数组空间
self.length = 0 # 空表长度为0
def list_insert(self, i, e):
# 在顺序表中第i个位置插入新的元素e,i值的合法范围是1≤i≤L.length+1
if i > len(self.elem): # 存储空间已满
raise Exception('空间已满')
if i < 1 or i > self.length + 1:
raise Exception('位置不合法')
for idx in range(self.length - 1, i - 2, -1):
self.elem[idx + 1] = self.elem[idx] # 插入位置及之后的元素后移
self.elem[i - 1] = e # 将新元素e放入第i个位置
self.length += 1 # 表长加1
def clear_list(self):
self.length = 0
def list_empty(self):
return self.length == 0
def get_elem(self, i):
# 返回顺序表self中的第i个元素
if 1 <= i <= self.length:
return self.elem[i - 1]
raise Exception('位置不合法')
def locate_elem(self, e):
# 在顺序表中查找值为e的数据元素,返回其序号
for i, elem in enumerate(self.elem[:self.length]):
if elem == e:
return i + 1 # 查找成功,返回序号i+1
raise Exception('元素不存在')
def list_delete(self, i):
# 删除顺序表中第i个元素
if i < 1 or i > self.length:
raise Exception('位置不合法')
for idx in range(i, self.length):
self.elem[idx - 1] = self.elem[idx] # 被删除元素之后的元素前移
self.length -= 1 # 表长减1
def set_length(self, a):
self.length = a
def __len__(self):
return self.length
def __str__(self):
return str(self.elem[:self.length])
#第一关
def sq_create(data):
# 顺序表的初始化
sq_list = SqList()
for i in range (len(data)):
sq_list.list_insert(sq_list.length + 1, {
"index":data[i]["index"],
"name":data[i]["name"],
"price":float(data[i]["price"])
})
return sq_list
第2关:基于顺序存储结构的图书信息表的排序
任务描述
本关任务:定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据完成图书信息表的创建,然后将图书按照价格降序排序,逐行输出排序后每本图书的信息。
编程要求
输入
输入n+1行,前n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。最后第n+1行是输入结束标志:0 0 0(空格分隔的三个0)。其中书号和书名为字符串类型,价格为浮点数类型。
输出
总计n行,每行是一本图书的信息(书号、书名、价格),书号、书名、价格用空格分隔。其中价格输出保留两位小数。
测试说明
平台会对你编写的代码进行测试:
测试输入:
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
0 0 0
预期输出:
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787302164340 Operating-System 50.00
9787822234110 The-C-Programming-Language 38.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257646 Data-Structure 35.00
9787302219972 Software-Engineer 32.00
开始你的任务吧,祝你成功!
代码
max_size = 1000
class SqList:
def __init__(self):
self.elem = [None] * max_size # 为顺序表分配一个大小为max_size的数组空间
self.length = 0 # 空表长度为0
def list_insert(self, i, e):
# 在顺序表中第i个位置插入新的元素e,i值的合法范围是1≤i≤L.length+1
if i > len(self.elem): # 存储空间已满
raise Exception('空间已满')
if i < 1 or i > self.length + 1:
raise Exception('位置不合法')
for idx in range(self.length - 1, i - 2, -1):
self.elem[idx + 1] = self.elem[idx] # 插入位置及之后的元素后移
self.elem[i - 1] = e # 将新元素e放入第i个位置
self.length += 1 # 表长加1
def clear_list(self):
self.length = 0
def list_empty(self):
return self.length == 0
def get_elem(self, i):
# 返回顺序表self中的第i个元素
if 1 <= i <= self.length:
return self.elem[i - 1]
raise Exception('位置不合法')
def locate_elem(self, e):
# 在顺序表中查找值为e的数据元素,返回其序号
for i, elem in enumerate(self.elem[:self.length]):
if elem == e:
return i + 1 # 查找成功,返回序号i+1
raise Exception('元素不存在')
def list_delete(self, i):
# 删除顺序表中第i个元素
if i < 1 or i > self.length:
raise Exception('位置不合法')
for idx in range(i, self.length):
self.elem[idx - 1] = self.elem[idx] # 被删除元素之后的元素前移
self.length -= 1 # 表长减1
def set_length(self, a):
self.length = a
def __len__(self):
return self.length
def __str__(self):
return str(self.elem[:self.length])
# 第二关
def sq_sort(sq_list):
# 排序
for i in range(1, sq_list.length):
for j in range(sq_list.length - i):
if sq_list.elem[j]["price"] < sq_list.elem[j+1]["price"]:
sq_list.elem[j],sq_list.elem[j+1] = sq_list.elem[j+1],sq_list.elem[j]
return sq_list
第3关:基于顺序存储结构的图书信息表的修改
任务描述
本关任务:定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据完成图书信息表的创建,然后计算所有图书的平均价格,将所有低于平均价格的图书价格提高20%,所有高于或等于平均价格的图书价格提高10%,最后逐行输出价格修改后的图书信息。
编程要求
输入
输入n+1行,前n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。最后第n+1行是输入结束标志:0 0 0(空格分隔的三个0)。其中书号和书名为字符串类型,价格为浮点数类型。
输出
总计n+1行,第1行是修改前所有图书的平均价格,后n行是价格修改后n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔。其中价格输出保留两位小数。
测试说明
平台会对你编写的代码进行测试:
测试输入:
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
0 0 0
预期输出:
43.88
9787302257646 Data-Structure 42.00
9787302164340 Operating-System 55.00
9787302219972 Software-Engineer 38.40
9787302203513 Database-Principles 43.20
9787810827430 Discrete-Mathematics 43.20
9787302257800 Data-Structure 68.20
9787811234923 Compiler-Principles 68.20
9787822234110 The-C-Programming-Language 45.60
来源
https://www.bjfuacm.com/
开始你的任务吧,祝你成功!
代码
max_size = 1000
class SqList:
def __init__(self):
self.elem = [None] * max_size # 为顺序表分配一个大小为max_size的数组空间
self.length = 0 # 空表长度为0
def list_insert(self, i, e):
# 在顺序表中第i个位置插入新的元素e,i值的合法范围是1≤i≤L.length+1
if i > len(self.elem): # 存储空间已满
raise Exception('空间已满')
if i < 1 or i > self.length + 1:
raise Exception('位置不合法')
for idx in range(self.length - 1, i - 2, -1):
self.elem[idx + 1] = self.elem[idx] # 插入位置及之后的元素后移
self.elem[i - 1] = e # 将新元素e放入第i个位置
self.length += 1 # 表长加1
def clear_list(self):
self.length = 0
def list_empty(self):
return self.length == 0
def get_elem(self, i):
# 返回顺序表self中的第i个元素
if 1 <= i <= self.length:
return self.elem[i - 1]
raise Exception('位置不合法')
def locate_elem(self, e):
# 在顺序表中查找值为e的数据元素,返回其序号
for i, elem in enumerate(self.elem[:self.length]):
if elem == e:
return i + 1 # 查找成功,返回序号i+1
raise Exception('元素不存在')
def list_delete(self, i):
# 删除顺序表中第i个元素
if i < 1 or i > self.length:
raise Exception('位置不合法')
for idx in range(i, self.length):
self.elem[idx - 1] = self.elem[idx] # 被删除元素之后的元素前移
self.length -= 1 # 表长减1
def set_length(self, a):
self.length = a
def __len__(self):
return self.length
def __str__(self):
return str(self.elem[:self.length])
#第三关
def revise_price_sq(sq_list):
# 计算平均价格,并按照题目要求修改价格
# 返回平均价格和修改后的顺序表
average = 0
sum = 0
for i in range(sq_list.length):
sum += sq_list.elem[i]['price']
average = sum / sq_list.length
average = round(average,2)
for i in range(sq_list.length):
if sq_list.elem[i]['price'] >= average:
sq_list.elem[i]['price'] *= 1.1
else:
sq_list.elem[i]['price'] *= 1.2
return average, sq_list
第4关:基于顺序存储结构的图书信息表的逆序存储
任务描述
本关任务:定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据来完成图书信息表的创建,然后将读入的图书信息逆序存储,逐行输出逆序存储后每本图书的信息。
编程要求
输入
输入n+1行,第一行是图书数目n,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。其中书号和书名为字符串类型,价格为浮点数类型。?
输出
总计n行,第i行是原有图书表中第n-i+1行的图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔。其中价格输出保留两位小数。
测试说明
平台会对你编写的代码进行测试:
测试输入:
8
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
预期输出:
9787822234110 The-C-Programming-Language 38.00
9787811234923 Compiler-Principles 62.00
9787302257800 Data-Structure 62.00
9787810827430 Discrete-Mathematics 36.00
9787302203513 Database-Principles 36.00
9787302219972 Software-Engineer 32.00
9787302164340 Operating-System 50.00
9787302257646 Data-Structure 35.00
代码
max_size = 1000
class SqList:
def __init__(self):
self.elem = [None] * max_size # 为顺序表分配一个大小为max_size的数组空间
self.length = 0 # 空表长度为0
def list_insert(self, i, e):
# 在顺序表中第i个位置插入新的元素e,i值的合法范围是1≤i≤L.length+1
if i > len(self.elem): # 存储空间已满
raise Exception('空间已满')
if i < 1 or i > self.length + 1:
raise Exception('位置不合法')
for idx in range(self.length - 1, i - 2, -1):
self.elem[idx + 1] = self.elem[idx] # 插入位置及之后的元素后移
self.elem[i - 1] = e # 将新元素e放入第i个位置
self.length += 1 # 表长加1
def clear_list(self):
self.length = 0
def list_empty(self):
return self.length == 0
def get_elem(self, i):
# 返回顺序表self中的第i个元素
if 1 <= i <= self.length:
return self.elem[i - 1]
raise Exception('位置不合法')
def locate_elem(self, e):
# 在顺序表中查找值为e的数据元素,返回其序号
for i, elem in enumerate(self.elem[:self.length]):
if elem == e:
return i + 1 # 查找成功,返回序号i+1
raise Exception('元素不存在')
def list_delete(self, i):
# 删除顺序表中第i个元素
if i < 1 or i > self.length:
raise Exception('位置不合法')
for idx in range(i, self.length):
self.elem[idx - 1] = self.elem[idx] # 被删除元素之后的元素前移
self.length -= 1 # 表长减1
def set_length(self, a):
self.length = a
def __len__(self):
return self.length
def __str__(self):
return str(self.elem[:self.length])
#第4关
def reverse_sq(sq_list):
reversed_list = SqList() # 创建一个新的顺序表用于存储逆序元素
for i in range(sq_list.length - 1, -1, -1): # 从最后一个元素到第一个元素遍历
reversed_list.list_insert(reversed_list.length + 1, sq_list.elem[i]) # 插入到新的顺序表
return reversed_list # 返回逆序存储的顺序表
# 测试代码
if __name__ == "__main__":
sq = SqList()
n = int(input()) # 输入图书数量
for _ in range(n):
book_info = input().strip() # 读取书籍信息
sq.list_insert(sq.length + 1, book_info) # 插入到顺序表中
# 逆序存储并输出
reversed_books = reverse_sq(sq)
for i in range(len(reversed_books)):
print(reversed_books.get_elem(i + 1)) # 逐行输出逆序的图书信息
(这题干了我一个小时,最后用了文心和gpt,不知道为什么它写了个主函数)
第5关:基于顺序存储结构的图书信息表的最贵图书的查找
任务描述
本关任务:定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据来完成图书信息表的创建,然后查找价格最高的图书,输出相应图书的信息。
编程要求
输入
总计输入n+1行,其中,第一行是图书数目n,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。其中书号和书名为字符串类型,价格为浮点数类型。
输出
总计输出m+1行,其中,第一行是最贵图书的数目(价格最高的图书可能有多本),后m行是最贵图书的信息,每本图书信息占一行,书号、书名、价格用空格分隔,其中价格输出保留两位小数。
测试说明
平台会对你编写的代码进行测试:
测试输入:
8
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
预期输出:
2
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
代码
max_size = 1000
class SqList:
def __init__(self):
self.elem = [None] * max_size # 为顺序表分配一个大小为max_size的数组空间
self.length = 0 # 空表长度为0
def list_insert(self, i, e):
# 在顺序表中第i个位置插入新的元素e,i值的合法范围是1≤i≤L.length+1
if i > len(self.elem): # 存储空间已满
raise Exception('空间已满')
if i < 1 or i > self.length + 1:
raise Exception('位置不合法')
for idx in range(self.length - 1, i - 2, -1):
self.elem[idx + 1] = self.elem[idx] # 插入位置及之后的元素后移
self.elem[i - 1] = e # 将新元素e放入第i个位置
self.length += 1 # 表长加1
def clear_list(self):
self.length = 0
def list_empty(self):
return self.length == 0
def get_elem(self, i):
# 返回顺序表self中的第i个元素
if 1 <= i <= self.length:
return self.elem[i - 1]
raise Exception('位置不合法')
def locate_elem(self, e):
# 在顺序表中查找值为e的数据元素,返回其序号
for i, elem in enumerate(self.elem[:self.length]):
if elem == e:
return i + 1 # 查找成功,返回序号i+1
raise Exception('元素不存在')
def list_delete(self, i):
# 删除顺序表中第i个元素
if i < 1 or i > self.length:
raise Exception('位置不合法')
for idx in range(i, self.length):
self.elem[idx - 1] = self.elem[idx] # 被删除元素之后的元素前移
self.length -= 1 # 表长减1
def set_length(self, a):
self.length = a
def __len__(self):
return self.length
def __str__(self):
return str(self.elem[:self.length])
#第5关
def highest_price_sq(sq_list):
# 查找最贵的书,放入result并返回
max_price = 0
for i in range(sq_list.length):
if sq_list.elem[i]['price'] > max_price:
max_price = sq_list.elem[i]['price']
result = SqList()
for i in range(sq_list.length):
if max_price == sq_list.elem[i]['price']:
result.list_insert(result.length + 1, sq_list.elem[i])
return result
第6关:基于顺序存储结构的图书信息表的最爱图书的查找
任务描述
本关任务:定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据来完成图书信息表的创建,然后根据指定的最爱图书的名字,查找最爱的图书,输出相应图书的信息。
编程要求
输入
总计n+m+2行。首先输入n+1行,其中,第一行是图书数目n,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。其中书号和书名为字符串类型,价格为浮点数类型。然后输入m+1行,其中,第一行是一个整数m,代表查找m次,后m行是每次待查找的最爱图书名字。
输出
若查找成功: 总计输出m*(k+1)行,对于每一次查找,第一行是最爱图书数目(同一书名的图书可能有多本),后k行是最爱图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,其中价格输出保留两位小数。 若查找失败: 只输出以下提示:抱歉,没有你的最爱!
测试说明
平台会对你编写的代码进行测试:
测试输入:
8
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
2
Java-Programming-Language
Data-Structure
预期输出:
Sorry,there is no your favourite!
2
9787302257646 Data-Structure 35.00
9787302257800 Data-Structure 62.00
代码
max_size = 1000
class SqList:
def __init__(self):
self.elem = [None] * max_size # 为顺序表分配一个大小为max_size的数组空间
self.length = 0 # 空表长度为0
def list_insert(self, i, e):
# 在顺序表中第i个位置插入新的元素e,i值的合法范围是1≤i≤L.length+1
if i > len(self.elem): # 存储空间已满
raise Exception('空间已满')
if i < 1 or i > self.length + 1:
raise Exception('位置不合法')
for idx in range(self.length - 1, i - 2, -1):
self.elem[idx + 1] = self.elem[idx] # 插入位置及之后的元素后移
self.elem[i - 1] = e # 将新元素e放入第i个位置
self.length += 1 # 表长加1
def clear_list(self):
self.length = 0
def list_empty(self):
return self.length == 0
def get_elem(self, i):
# 返回顺序表self中的第i个元素
if 1 <= i <= self.length:
return self.elem[i - 1]
raise Exception('位置不合法')
def locate_elem(self, e):
# 在顺序表中查找值为e的数据元素,返回其序号
for i, elem in enumerate(self.elem[:self.length]):
if elem == e:
return i + 1 # 查找成功,返回序号i+1
raise Exception('元素不存在')
def list_delete(self, i):
# 删除顺序表中第i个元素
if i < 1 or i > self.length:
raise Exception('位置不合法')
for idx in range(i, self.length):
self.elem[idx - 1] = self.elem[idx] # 被删除元素之后的元素前移
self.length -= 1 # 表长减1
def set_length(self, a):
self.length = a
def __len__(self):
return self.length
def __str__(self):
return str(self.elem[:self.length])
#第6关
def find_favorite_sq(sq_list, name):
# 返回包含最爱图书的顺序表, 待查书名name
result = SqList()
for i in range(len(sq_list)):
if list(sq_list.get_elem(i+1).values())[1] == name:
result.list_insert(result.length + 1, {
"index": sq_list.get_elem(i+1)['index'],
"name": sq_list.get_elem(i+1)['name'],
"price": sq_list.get_elem(i+1)['price']})
return result
第7关:基于顺序存储结构的图书信息表的最佳位置图书的查找
任务描述
本关任务:定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据来完成图书信息表的创建,然后根据指定的最佳位置的序号,查找该位置上的图书,输出相应图书的信息。
编程要求
输入
总计n+m+2行。首先输入n+1行,其中,第一行是图书数目n,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。其中书号和书名为字符串类型,价格为浮点数类型。然后输入m+1行,其中,第一行是一个整数m,代表查找m次,后m行每行内容为一个整数,代表待查找的图书的位置序号。
输出
输出m行 若查找成功: 输出内容为第i次查询的指定位置上的一本图书的信息(书号、书名、价格),书号、书名、价格用空格分隔,其中价格输出保留两位小数。 若查找失败: 只输出以下提示:抱歉,最佳位置上的图书不存在!
测试说明
平台会对你编写的代码进行测试:
测试输入:
8
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
2
2
0
预期输出:
9787302164340 Operating-System 50.00
Sorry,the book on the best position doesn't exist!
代码
max_size = 1000
class SqList:
def __init__(self):
self.elem = [None] * max_size # 为顺序表分配一个大小为max_size的数组空间
self.length = 0 # 空表长度为0
def list_insert(self, i, e):
# 在顺序表中第i个位置插入新的元素e,i值的合法范围是1≤i≤L.length+1
if i > len(self.elem): # 存储空间已满
raise Exception('空间已满')
if i < 1 or i > self.length + 1:
raise Exception('位置不合法')
for idx in range(self.length - 1, i - 2, -1):
self.elem[idx + 1] = self.elem[idx] # 插入位置及之后的元素后移
self.elem[i - 1] = e # 将新元素e放入第i个位置
self.length += 1 # 表长加1
def clear_list(self):
self.length = 0
def list_empty(self):
return self.length == 0
def get_elem(self, i):
# 返回顺序表self中的第i个元素
if 1 <= i <= self.length:
return self.elem[i - 1]
raise Exception('位置不合法')
def locate_elem(self, e):
# 在顺序表中查找值为e的数据元素,返回其序号
for i, elem in enumerate(self.elem[:self.length]):
if elem == e:
return i + 1 # 查找成功,返回序号i+1
raise Exception('元素不存在')
def list_delete(self, i):
# 删除顺序表中第i个元素
if i < 1 or i > self.length:
raise Exception('位置不合法')
for idx in range(i, self.length):
self.elem[idx - 1] = self.elem[idx] # 被删除元素之后的元素前移
self.length -= 1 # 表长减1
def set_length(self, a):
self.length = a
def __len__(self):
return self.length
def __str__(self):
return str(self.elem[:self.length])
#第7关
def find_locate_sq(sq_list, pos):
# 查找最佳位置图书, 若找到,返回如下dict, 否则返回None
"""
{
"index": book index,
"name": book name,
"price": book price
}
"""
if 0 < pos <= len(sq_list):
result = {"index": sq_list.get_elem(pos)['index'],
"name": sq_list.get_elem(pos)['name'],
"price": sq_list.get_elem(pos)['price']}
else:
result = None
pass
return result
第8关:基于顺序存储结构的图书信息表的新图书的入库
任务描述
本关任务:定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据来完成图书信息表的创建,然后根据指定的待入库的新图书的位置和信息,将新图书插入到图书表中指定的位置上,最后输出新图书入库后所有图书的信息。
编程要求
输入
总计n+3行。首先输入n+1行,其中,第一行是图书数目n,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。其中书号和书名为字符串类型,价格为浮点数类型。之后输入第n+2行,内容仅为一个整数,代表待入库的新图书的位置序号。最后输入第n+3行,内容为新图书的信息,书号、书名、价格用空格分隔。
输出
若插入成功: 输出新图书入库后所有图书的信息(书号、书名、价格),总计n+1行,每行是一本图书的信息,书号、书名、价格用空格分隔。其中价格输出保留两位小数。 若插入失败: 只输出以下提示:抱歉,入库位置非法!
测试说明
平台会对你编写的代码进行测试:
测试输入:
7
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
2
9787822234110 The-C-Programming-Language 38.00
预期输出:
9787302257646 Data-Structure 35.00
9787822234110 The-C-Programming-Language 38.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
测试输入:
7
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9
9787822234110 The-C-Programming-Language 38.00
预期输出:
Sorry,the position to be inserted is invalid!
代码
max_size = 1000
class SqList:
def __init__(self):
self.elem = [None] * max_size # 为顺序表分配一个大小为max_size的数组空间
self.length = 0 # 空表长度为0
def list_insert(self, i, e):
# 在顺序表中第i个位置插入新的元素e,i值的合法范围是1≤i≤L.length+1
if i > len(self.elem): # 存储空间已满
raise Exception('空间已满')
if i < 1 or i > self.length + 1:
raise Exception('位置不合法')
for idx in range(self.length - 1, i - 2, -1):
self.elem[idx + 1] = self.elem[idx] # 插入位置及之后的元素后移
self.elem[i - 1] = e # 将新元素e放入第i个位置
self.length += 1 # 表长加1
def clear_list(self):
self.length = 0
def list_empty(self):
return self.length == 0
def get_elem(self, i):
# 返回顺序表self中的第i个元素
if 1 <= i <= self.length:
return self.elem[i - 1]
raise Exception('位置不合法')
def locate_elem(self, e):
# 在顺序表中查找值为e的数据元素,返回其序号
for i, elem in enumerate(self.elem[:self.length]):
if elem == e:
return i + 1 # 查找成功,返回序号i+1
raise Exception('元素不存在')
def list_delete(self, i):
# 删除顺序表中第i个元素
if i < 1 or i > self.length:
raise Exception('位置不合法')
for idx in range(i, self.length):
self.elem[idx - 1] = self.elem[idx] # 被删除元素之后的元素前移
self.length -= 1 # 表长减1
def set_length(self, a):
self.length = a
def __len__(self):
return self.length
def __str__(self):
return str(self.elem[:self.length])
#第8关
def sq_insert(sq_list, pos, book):
# 在pos处插入book
if pos < 1 or pos > sq_list.length:
return None
sq_list.list_insert(pos, book)
# 返回插入后的sq_list, 若插入位置不合法,返回None
return sq_list
pass
第9关:基于顺序存储结构的图书信息表的旧图书的出库
任务描述
本关任务:定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据来完成图书信息表的创建,然后根据指定的待出库的旧图书的位置,将该图书从图书表中删除,最后输出该图书出库后的所有图书的信息。
编程要求
输入
总计n+2行。首先输入n+1行,其中,第一行是图书数目n,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。其中书号和书名为字符串类型,价格为浮点数类型。之后输入第n+2行,内容仅为一个整数,代表待删除的旧图书的位置序号。
输出
若删除成功: 输出旧图书出库后所有图书的信息(书号、书名、价格),总计n-1行,每行是一本图书的信息,书号、书名、价格用空格分隔。其中价格输出保留两位小数。 若删除失败: 只输出以下提示:抱歉,出库位置非法!
测试说明
平台会对你编写的代码进行测试:
测试输入:
8
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
2
预期输出:
9787302257646 Data-Structure 35.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
测试输入:
8
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
9
预期输出:
Sorry,the position to be deleted is invalid!
代码
max_size = 1000
class SqList:
def __init__(self):
self.elem = [None] * max_size # 为顺序表分配一个大小为max_size的数组空间
self.length = 0 # 空表长度为0
def list_insert(self, i, e):
# 在顺序表中第i个位置插入新的元素e,i值的合法范围是1≤i≤L.length+1
if i > len(self.elem): # 存储空间已满
raise Exception('空间已满')
if i < 1 or i > self.length + 1:
raise Exception('位置不合法')
for idx in range(self.length - 1, i - 2, -1):
self.elem[idx + 1] = self.elem[idx] # 插入位置及之后的元素后移
self.elem[i - 1] = e # 将新元素e放入第i个位置
self.length += 1 # 表长加1
def clear_list(self):
self.length = 0
def list_empty(self):
return self.length == 0
def get_elem(self, i):
# 返回顺序表self中的第i个元素
if 1 <= i <= self.length:
return self.elem[i - 1]
raise Exception('位置不合法')
def locate_elem(self, e):
# 在顺序表中查找值为e的数据元素,返回其序号
for i, elem in enumerate(self.elem[:self.length]):
if elem == e:
return i + 1 # 查找成功,返回序号i+1
raise Exception('元素不存在')
def list_delete(self, i):
# 删除顺序表中第i个元素
if i < 1 or i > self.length:
raise Exception('位置不合法')
for idx in range(i, self.length):
self.elem[idx - 1] = self.elem[idx] # 被删除元素之后的元素前移
self.length -= 1 # 表长减1
def set_length(self, a):
self.length = a
def __len__(self):
return self.length
def __str__(self):
return str(self.elem[:self.length])
#第9关
def delete_sq(sq_list, pos):
# 旧图书的出库和输出
if pos < 1 or pos > sq_list.length:
return None
# 返回删除pos位置图书后的sq_list, 若pos不合法,返回None
sq_list.list_delete(pos)
return sq_list
pass
第10关:基于顺序存储结构的图书信息表的图书去重
任务描述
本关任务:出版社出版的任何一本图书的书号(ISBN)都是唯一的,即图书表中不允许包含书号重复的图书。定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据来完成图书信息表的创建(书号可能重复),然后进行图书的去重,即删除书号重复的图书(只保留第一本),最后输出去重后所有图书的信息。
编程要求
输入
总计输入n+1行,其中,第一行是图书数目n,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格(书号可能重复)。其中书号和书名为字符串类型,价格为浮点数类型。
输出
总计输出m+1行(m≤n),其中,第一行是去重后的图书数目,后m行是去重后图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,其中价格输出保留两位小数。
测试说明
平台会对你编写的代码进行测试:
测试输入:
9
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
预期输出:
8
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
代码
max_size = 1000
class SqList:
def __init__(self):
self.elem = [None] * max_size # 为顺序表分配一个大小为max_size的数组空间
self.length = 0 # 空表长度为0
def list_insert(self, i, e):
# 在顺序表中第i个位置插入新的元素e,i值的合法范围是1≤i≤L.length+1
if i > len(self.elem): # 存储空间已满
raise Exception('空间已满')
if i < 1 or i > self.length + 1:
raise Exception('位置不合法')
for idx in range(self.length - 1, i - 2, -1):
self.elem[idx + 1] = self.elem[idx] # 插入位置及之后的元素后移
self.elem[i - 1] = e # 将新元素e放入第i个位置
self.length += 1 # 表长加1
def clear_list(self):
self.length = 0
def list_empty(self):
return self.length == 0
def get_elem(self, i):
# 返回顺序表self中的第i个元素
if 1 <= i <= self.length:
return self.elem[i - 1]
raise Exception('位置不合法')
def locate_elem(self, e):
# 在顺序表中查找值为e的数据元素,返回其序号
for i, elem in enumerate(self.elem[:self.length]):
if elem == e:
return i + 1 # 查找成功,返回序号i+1
raise Exception('元素不存在')
def list_delete(self, i):
# 删除顺序表中第i个元素
if i < 1 or i > self.length:
raise Exception('位置不合法')
for idx in range(i, self.length):
self.elem[idx - 1] = self.elem[idx] # 被删除元素之后的元素前移
self.length -= 1 # 表长减1
def set_length(self, a):
self.length = a
def __len__(self):
return self.length
def __str__(self):
return str(self.elem[:self.length])
def sq_duplicate_removal(sq_list):
# 图书去重
for i in range(1, sq_list.length):
for j in range(i+1,sq_list.length):
if sq_list.elem[i]["name"] == sq_list.elem[j]["name"]:
sq_list.list_delete(j+1)
else:
result = None
return sq_list
2024.10.11 23:05 完成所有。