class Booklist: def __init__(self): self.data = [] def Addbook(self): information = input("请输入图书信息,每本图书信息占一行,书号、书名、价格用空格分隔。输入0 0 0结束输入\n") try:
while information != '0': information_list = information.split() shuhao = information_list[0] shuming = information_list[1] jiage = information_list[2] self.data.append([shuhao,shuming,float(jiage)]) information = input("请再次输入") except ValueError: print("输入错误") except IndexError: print("输入错误")
def Addbook_2(self): num = input("请输入图书数目") self.data.append(num) information = input("请输入图书信息,每本图书信息占一行,书号、书名、价格用空格分隔。输入0 0 0结束输入\n") try:
while information != '0': information_list = information.split() shuhao = information_list[0] shuming = information_list[1] jiage = information_list[2] self.data.append([shuhao,shuming,float(jiage)]) information = input("请再次输入") except ValueError: print("输入错误") except IndexError: print("输入错误")
def Count(self): return len(self.data)
def ShowList(self): if len(self.data) > 0: print("书号\t书名\t价格") for i in range(len(self.data)): for j in range(2): print(self.data[i][j],end = '\t') print("%.2f" %self.data[i][2])
print("0\t0\t0") else:print("无书籍记录")
def ShowList_2(self): if len(self.data) > 0: print("图书数目为", self.data[0][0]) print("书号\t书名\t价格") for i in range(1, len(self.data)): for j in range(2): print(self.data[i][j], end='\t') print("%.2f" % self.data[i][2])
def revise(self): sum = 0 for i in range(len(self.data)): sum = sum+self.data[i][2] avg_prise = sum/len(self.data)
for j in range(len(self.data)): if self.data[j][2] < avg_prise: self.data[j][2] = self.data[j][2]*1.2 else:self.data[j][2] = self.data[j][2]*1.1 print("修改前平均价格为",avg_prise) self.ShowList()
def reverse(self): self.Addbook_2() i = 0 j = len(self.data) - 1 while i < j: self.data[i],self.data[j] = self.data[j],self.data[i] i = i+1 j = j-1 self.ShowList_2()
def find_exp(self): self.Addbook_2() self.data.sort(key=lambda ele: ele[2], reverse=True) for i in range(len(self.data)-1): if self.data[i][2] > self.data[i+1][2]: print("价格最高的图书可能有%d"%(i+1)+"本") print("书号\t书名\t价格") for m in range(i+1): for j in range(3): print(self.data[m][j], end='\t') print("\n") print("0\t0\t0")
def find_like(self): target = [] count = 0 name_list = [] self.Addbook_2() times = input("请输入查找次数") for i in range(int(times)): name = input("请输入第%d次待查找的图书名字" %(i+1)) name_list.append(name) for j in range(int(times)): for m in range(1, len(self.data)): if self.data[m][1] == name_list[j]: count = count + 1 target.append(m) if count>0: print("第%d次查找" %(j+1)) print("此书有%d本" %count) for o in target: for j in range(2): print(self.data[o][j], end='\t') print("%.2f" % self.data[o][2]) target.clear() count = 0
else:print("抱歉,第%d次查找中没有你的最爱" %(j+1))
def find_place(self): index_list = [] self.Addbook_2() times = input("请输入查找次数") for i in range(int(times)): index = input("请输入第%d次待查找的图书位置序号" % (i + 1)) index_list.append(index) for p in index_list: if int(p) > len(self.data) or int(p)<1: print("抱歉,最佳位置上的图书不存在!") else: for o in range(2):
def Book_insert(self): self.Addbook_2() index = int(input("请输入插入位置序号")) information = input("请输入插入图书信息") information_list = information.split() shuhao = information_list[0] shuming = information_list[1] jiage = information_list[2] if index > 0 and index < len(self.data): self.data.insert(index, [shuhao, shuming, float(jiage)]) if len(self.data) > 0: print("书号\t书名\t价格") for i in range(1, len(self.data)): for j in range(2): print(self.data[i][j], end='\t') print("%.2f" % self.data[i][2])
print("0\t0\t0") else:print("抱歉,入库位置非法")
def Book_delete(self): self.Addbook_2() index = int(input("请输入删除位置序号")) if index > 0 and index < len(self.data): del self.data[index] if len(self.data) > 0: print("书号\t书名\t价格") for i in range(1, len(self.data)): for j in range(2): print(self.data[i][j], end='\t') print("%.2f" % self.data[i][2])
print("0\t0\t0") else: print("抱歉,出库位置非法")
def quchong(self): target = [] target_3 = [] self.Addbook_2() for i in range(1,len(self.data)): for j in range(i+1,len(self.data)): if self.data[i][0] == self.data[j][0]: target.append(j) target_2 = set(target) for o in range(len(self.data)): if o not in target_2: target_3.append(o) del target_3[0] print("去重后图书数目为",len(target_3)) if len(self.data) > 0: print("书号\t书名\t价格") for i in target_3: for j in range(2): print(self.data[i][j], end='\t') print("%.2f" % self.data[i][2])
print("0\t0\t0")
class LinkNode: def __init__(self,data = None): self.data = data self.next = None
class LinkList: def __init__(self): self.head = LinkNode() self.head.next = None
def CreatList_shou(self,a): for i in range(len(a)): node = LinkNode(a[i]) node.next = self.head.next self.head.next = node
def CreatList_wei(self,a): t = self.head for i in range(len(a)): node = LinkNode(a[i]) t.next = node t=node node.next = None
def display(self,a): p=self.head.next print("书号\t书名\t价格") while p is not None: for i in range(2): print(p.data[i],end='\t') print("%.2f" % p.data[2]) p = p.next
def ListSort(self,a): p = self.head.next prise = [] while p is not None: prise.append(p.data) p = p.next prise.sort(key=lambda ele:ele[2],reverse = True) p = self.head.next for i in prise: p.data = i p = p.next
def revise(self,a): p = self.head.next count = 0 sum = 0 while p is not None: sum = sum+p.data[2] p = p.next count+=1 avg_prise = sum/count p = self.head.next print("平均价格为",avg_prise) while p is not None: if p.data[2] < avg_prise: p.data[2] = p.data[2]*1.2 else:p.data[2] = p.data[2]*1.1 p = p.next
def find_exp(self,a): self.ListSort(a) p = self.head.next count = 1
while p is not None: if p.data[2] == p.next.data[2]: count = count+1 p = p.next elif p.data[2] > p.next.data[2]: break
print("价格最高的图书可能有%d本" % count) m = self.head.next print("书号\t书名\t价格") for j in range(count): for i in range(2): print(m.data[i], end='\t') print("%.2f" % p.data[2]) m = m.next
def reverse(self,a): cur = self.head.next.next self.head.next.next = None while(cur != None): next = cur.next cur.next = self.head.next self.head.next = cur cur = next
def find_like(self,a): p = self.head.next m = self.head.next #用变量储存头指针 target = [] count = 0 name_list = [] times = input("请输入查找次数") for i in range(int(times)): name = input("请输入第%d次待查找的图书名字" % (i + 1)) name_list.append(name) for j in range(int(times)): while p is not None: if p.data[1] == name_list[j]: count = count + 1 target.append(p.data) p = p.next else:p = p.next if count > 0: print("第%d次查找" % (j + 1)) print("此书有%d本" % count) for o in target: for j in range(2): print(o[j], end='\t') print("%.2f" %o[2]) target.clear() count = 0 p = m #指针重新指向头结点 else: print("抱歉,第%d次查找中没有你的最爱" % (j + 1)) p = m
def find_place(self,a,num): p = self.head.next m = self.head.next #用变量储存头指针 count = 1 index_list = [] times = input("请输入查找次数") for i in range(int(times)): index = input("请输入第%d次待查找的图书位置序号" % (i + 1)) index_list.append(index) for j in index_list: if int(j) > num or int(j) < 1: print("抱歉,最佳位置上的图书不存在!") else: while p is not None: if count == int(j): for i in range(2): print(p.data[i], end='\t') print("%.2f" % p.data[2]) p = m #让指针重新指向头结点 count = 1 break else: count = count+1 p = p.next
def book_insert(self,a,num): b = [] m = self.head #记录目标节点的前驱节点 count = 1 index = int(input("请输入插入位置序号")) information = input("请输入插入图书信息") information_list = information.split() shuhao = information_list[0] shuming = information_list[1] jiage = information_list[2] b.append([shuhao, shuming, float(jiage)]) node = LinkNode(b[0]) if index < 1 or index > num+2: print("抱歉,入库位置非法") else: while m is not None: if index == count: node.next = m.next m.next = node break
else: count = count+1 m = m.next
self.display(a)
def book_delete(self,a,num):
m = self.head #记录目标节点的前驱节点 count = 1 index = int(input("请输入删除位置序号")) if index < 1 or index > num+1: print("抱歉,出库位置非法") else: while m is not None: if index == count: m.next = m.next.next break
else: count = count+1 m = m.next self.display(a)
def quchong(self,a,num): target = [] target_3 = [] m = self.head.next p = self.head.next.next index_2 = 2 #记录p的起点位置 index = 2 for i in range(num-2): #控制m只指向倒数第二个节点,防止p指空 while p is not None: if m.data[0] == p.data[0]: target.append(index) index = index+1 p = p.next else: index = index+1 p = p.next m = m.next p = m.next index_2 = index_2+1 index = index_2
target_2 = set(target) print("去重后图书数目为", num-len(target_2)) count_2 = 1 o = self.head for i in target_2: while o is not None: if i == count_2: o.next = o.next.next break
else: count_2 = count_2 + 1 o = o.next self.display(a)
a = [] num = int(input("请输入图书数目")) information = input("请输入图书信息,每本图书信息占一行,书号、书名、价格用空格分隔。输入0 0 0结束输入\n") try:
while information != '0': information_list = information.split() shuhao = information_list[0] shuming = information_list[1] jiage = information_list[2] a.append([shuhao,shuming,float(jiage)]) information = input("请再次输入") except ValueError: print("输入错误") except IndexError: print("输入错误")