Python核心编程v2.0 第13章习题(上)
来源:互联网 发布:淘宝助手打印 编辑:程序博客网 时间:2024/06/06 06:38
2.
方法是定义在类中的功能函数,只能被实例调用,在所有的方法声明中都必须有self参数。算一种特殊的函数
函数是可以调用的实体,是对程序逻辑进行结构化或过程化的一种编程方法
3.
# -*- coding: utf-8 -*-class MoneyFmt(object): #这个函数写复杂了,可以参考format()函数,相当于自己实现了一次format函数 def dollarize(self,index=1): money = self.money st = str(money) li = st.split('.') count = len(li[0])/3 #先将符号去掉并记录 if li[0][0] == '-': if index == 1: re = '-' else: re = '<->' li[0]=li[0][1:] else: re = '' #数字位不满时补足便于添加逗号 if len(li[0])%3 != 0: li[0]=li[0].rjust((count+1)*3) newli = [] i = 0 while i < len(li[0])/3: # print li[0][0 + i * 3:3 + i * 3] newli.append(li[0][0+i*3:3+i*3]) i=i+1 #插入逗号以及添加符号 st = ','.join(newli).lstrip() st = re+'$'+st+'.'+li[1] return st #在类初始化的时候传入d选项需要的参数便于__str__调用 def __init__(self,money,index): self.money = money self.index = index def update(self,newmoney): self.money = newmoney def __nonzero__(self): if self.money != 0: return True def __repr__(self): return self.money def __str__(self): return self.dollarize(self.index)if __name__ =='__main__': mon = MoneyFmt(-1234567.88,0) print mon.dollarize() print mon
4.
# -*- coding: utf-8 -*-import timeclass userdb(object): db = {} index = False #初始化时加载文件信息 def __init__(self): f = open('ar.txt','r') lines = f.readlines() f.close() for line in lines: #split返回的是list st1 = line.split(':') st2 = st1[1].split(',') name = st1[0] paswd = int(st2[0]) time = st2[1].strip() li = [] li.append(paswd) li.append(time) self.db[name] = li #登录 def login(self,name,paswd): if self.db[name][0] == paswd: print 'your last time login:',self.db[name][1] self.db[name][1] = time.strftime("%Y %m %d %H %M", time.localtime()) self.index = True else: print 'login fail' #添加 def adduser(self,newname,newpaswd): if self.index == True: ti = time.strftime("%Y %m %d %H %M", time.localtime()) li = [] li.append(newpaswd) li.append(ti) self.db[newname] = li else: print 'you have not login in' def __del__(self): f = open('ar.txt','w') for keys in self.db: st = keys+':'+str(self.db[keys][0])+','+self.db[keys][1] # print st f.write(st) f.write('\n') f.close()if __name__ =='__main__': user = userdb() user.login('Anna',2727) user.adduser('Cnna',2828) # for i in user.db: # print i,user.db[i] del user
5.
没啥方法的一个类,只是写了下默认
# -*- coding: utf-8 -*-class point(object): li = [] def __init__(self,x=0,y=0): self.li.append((x,y))if __name__ =='__main__': pi = point(1,19) print pi.li
6.
# -*- coding: utf-8 -*-from __future__ import divisionimport mathclass point(object): li = [] def __init__(self,point1,point2): self.li.append(point1) self.li.append(point2) def __str__(self): ti = (self.li[0],self.li[1]) return str(ti) __repr__ = __str__ def lenth(self): q1= abs(self.li[0][0]-self.li[1][0]) q2 = abs(self.li[0][1]-self.li[1][1]) return math.sqrt(q1*q1+q2*q2) def slope(self): q1 = abs(self.li[0][0] - self.li[1][0]) q2 = abs(self.li[0][1] - self.li[1][1]) return q2/q1if __name__ =='__main__': po = point((8,3),(2,5)) print po print po.lenth() print po.slope()
7.
# -*- coding: utf-8 -*-import timeclass mytime(object): def __init__(self,ti = time.localtime()): self.ti = ti def update(self,ti = time.localtime()): self.ti = ti def display(self,str=''): if str == 'MDY': return time.strftime('%m/%d/%y',self.ti) elif str == 'MDYY': return time.strftime('%m/%d/%Y',self.ti) elif str == 'DMY': return time.strftime('%d/%m/%y',self.ti) elif str == 'DMYY': return time.strftime('%d/%m/%Y',self.ti) elif str == 'MODYY': return time.strftime('Mon %d,%Y',self.ti) else: sec = time.mktime(self.ti) return time.ctime(sec)if __name__ =='__main__': # time.strftime("%Y %m %d %H %M", time.localtime()) myti = mytime() print myti.display('MDY') print myti.display('DMYY') print myti.display('MODYY') myti.update() print myti.display()
8.
# -*- coding: utf-8 -*-class Stack(object): def __init__(self): self.stack = [] def push(self,num): self.stack.append(num) print self.stack def isempty(self): if len(self.stack) == 0: return 1 else: 0 def pop(self): if self.isempty() != 1: if hasattr(self.stack,'pop'): print 'has this attr' self.stack.pop() else: newstack = [] i = 0 while i <len(self.stack)-1: newstack.append(self.stack[i]) i = i+1 self.stack = newstack print self.stack else: print 'empty stack can not pop' def peek(self): return self.stack[len(self.stack)-1]if __name__ =='__main__': stack = Stack() stack.push(8) stack.push(12) stack.pop() print stack.peek()
9.
class queue(object): def __init__(self): self.que = [] def enqueue(self,num): self.que.append(num) print self.que def dequeue(self): #这个地方忘记了要判断队列是否为空了 newqu = [] num = self.que[0] i = 1 while i<=len(self.que)-1: newqu.append(self.que[i]) i = i+1 self.que = newqu print self.que return numif __name__ =='__main__': que = queue() que.enqueue(9) que.enqueue(10) print que.dequeue()
10.
在stack基础上改的
# -*- coding: utf-8 -*-class StackandQue(object): def __init__(self): self.stack = [] def push(self,num): self.stack.append(num) print self.stack def isempty(self): if len(self.stack) == 0: return 1 else: 0 def shirf(self): if self.isempty() !=1: newqu = [] num = self.stack[0] i = 1 while i<=len(self.stack)-1: newqu.append(self.stack[i]) i = i+1 self.stack = newqu print self.stack return num else: print 'empty ' def pop(self): if self.isempty() != 1: if hasattr(self.stack,'pop'): print 'has this attr' self.stack.pop() else: newstack = [] i = 0 while i <len(self.stack)-1: newstack.append(self.stack[i]) i = i+1 self.stack = newstack print self.stack else: print 'empty stack can not pop' def unshif(self,num): newstack = [] newstack.append(num) newstack.extend(self.stack) self.stack = newstack print self.stackif __name__ =='__main__': sq = StackandQue() sq.unshif(8) sq.unshif(90) sq.shirf()
11.
# -*- coding: utf-8 -*-#item 维护一个 物品仓库 添加进购物车的操作会调用class Item(object): #为了每个实例的更改都能被保存,这个地方不能放在初始化里 db = {'apple':4,'pear':1,'chocolate':3} def check(self,name): if self.db[name] != 0: return True else: return False def delete(self,name): if self.check(name) != 0: self.db[name] = self.db[name]-1 return True else: print name,'already sold out' return False#car中也有一个字典,用来维护每辆车中的物品class car(object): def __init__(self,carname): self.carname = carname self.car = {} def addthing(self,name): it = Item() if it.delete(name) == True: if self.car.has_key(name) == True: self.car[name] = self.car[name]+1 else: self.car[name] = 1 def showthings(self): for i in self.car: print i,self.car[i]#用户用一个list来存储生成的car对象,之后就用list下标就可以访问到实例class user(object): def __init__(self): self.index = 0 self.carlist = [] def addcar(self,carname): ca = car(carname) self.carlist.append(ca) def showcar(self): for i in self.carlist: print i.carname def addthing(self,name,carname): for i in self.carlist: if i.carname == carname: i.addthing(name) def showthing(self): for i in self.carlist: print i.carname,'has things:' i.showthings()#调用的逻辑 我做的是用户调用车,车在添加物品是调用物体库if __name__ =='__main__': us = user() us.addcar('car1') us.addcar('car2') us.addthing('pear', 'car1') us.addthing('pear', 'car2') # us.addthing('chocolate', 'car1') us.addthing('pear', 'car2') us.showthing()
12.
用户可以发送,接收消息,也可以新建房间,在房间中接收发送消息。
写Room的时候设计的不是很对,其实应该统一用message来进行消息的传递才达到了封装的效果。这个地方单独给room一个数据结构来保存消息了,应该在message里面加字段来实现的。
功能很不完善,大概只做到一个信箱的那种感觉。
# -*- coding: utf-8 -*-class message(object): melib = [] #新生成一条消息,index = 0表示该消息未读 def makenew(self,me,nameto,namefrom): index = 0 me1 = me+' from '+namefrom li = [me1,nameto,index] self.melib.append(li) #为某个用户查询他接收到的消息 def checkmessge(self,name): for i in self.melib: if i[1] == name and i[2] == 0: print i[0] i[2] = 1class Room(object): #保存参加该房间的用户名称 namelist = [] #room message对所有成员可见 roommessage = [] def __init__(self,roomname,name1,name2): self.roomname = roomname self.namelist.append(name1) self.namelist.append(name2) def addmessage(self,me,name): me1 = me + ' from '+name index = 0 li = [me1,index] self.roommessage.append(li) def showmessage(self): for i in self.roommessage: if i[1] == 0: print i[0] i[1] = 1class user(object): user = [] roomlist = [] #用户属性 暂只设置了姓名 def __init__(self,name): self.name = name self.user.append(name) #用户可以发送信息 def sendmessage(self,userto): if userto in self.user: me = raw_input('message:') mes = message() mes.makenew(me,userto,self.name) else: print 'no such user' #用户可以接收信息 def accepymessage(self): mes = message() mes.checkmessge(self.name) #创建房间 def makeroom(self,usname,roomname): ro = Room(roomname,usname,self.name) self.roomlist.append(ro) #向房间中发信息 def talkroom(self,roomname,mes): for i in self.roomlist: if i.roomname == roomname: i.addmessage(mes,self.name) #接收房间中的信息 def showroommessage(self,roomname): for i in self.roomlist: if i.roomname == roomname: i.showmessage()if __name__ == '__main__': u1 = user('A') u2 = user('B') u3 = user('C') u1.makeroom('B','room1') u1.talkroom('room1','hello B') u1.makeroom('C','room2') u1.talkroom('room2','hello C') u2.showroommessage('room1') u3.showroommessage('room2') u2.talkroom('room1','this is B') u1.showroommessage('room1') u1.showroommessage('room2')
阅读全文
0 0
- Python核心编程v2.0 第13章习题(上)
- python核心编程v2.0 第7章习题(上)
- python核心编程v2.0 第9章习题答案(上)
- Python核心编程v2.0 第13章习题(下)
- python核心编程v2.0 第8章习题答案
- Python核心编程v2.0 第10章习题答案
- Python核心编程v2.0 第11章习题答案
- Python核心编程v2.0 第12章习题答案
- python核心编程v2.0 第14章习题答案
- python核心编程v2.0 第7章习题答案(下)
- Python核心编程v2.0 第9章习题答案(下)
- Python核心编程v2.0 第二章习题答案
- python核心编程v2.0 第三章习题答案
- python核心编程v2.0 第四章习题答案
- python核心编程v2.0 第五章习题答案
- python核心编程v2.0 第六章习题答案
- 《Python核心编程》第13章 习题
- 《Python核心编程》第2章 习题
- C#中using详解
- 使用回归树对美国波士顿房价训练数据进行学习,并对测试数据进行预测
- C#实现整数划分问题——带输出
- 多态
- 数据结构的学习 前言
- Python核心编程v2.0 第13章习题(上)
- js做两位小数运算防止经度丢失
- 0908期 HTML form表单
- web前端如何优化
- Error:Execution failed for task ':app:compileDebugNdk'.
- POJ-2234-Matches Game(尼姆博弈)
- 测试开发面试题
- static
- Java创建部分数据结构