1、写一个类,用来将浮点型值转换成金额。在本练习里,我们使用美国货币,但读者也可以自选任意货币。
class MoneyFmt: def __init__(self,money): self.money=round(float(money),2) def dollarrize(self): if "-" in str(self.money): if "." in str(self.money): money=str(self.money).split(".") money_int=money[0][1:] count=len(str(money_int))//4 money_lis=list(str(money_int)) for i in range(count): money_lis.insert(-3-4*i,",") return "-$"+"".join(money_lis)+"."+str(money[-1]) else: money = str(self.money).split(".") money_int = money[0][1:] count = len(str(money_int)) // 4 money_lis = list(str(money_int)) for i in range(count): money_lis.insert(-3 - 4 * i, ",") return "-$" + "".join(money_lis) else: if "." in str(self.money): money = str(self.money).split(".") money_int = money[0] count = len(str(money_int)) // 4 money_lis = list(str(money_int)) for i in range(count): money_lis.insert(-3 - 4 * i, ",") return "$"+"".join(money_lis) + "." + str(money[-1]) else: money = str(self.money).split(".") money_int = money[0] count = len(str(money_int)) // 4 money_lis = list(str(money_int)) for i in range(count): money_lis.insert(-3 - 4 * i, ",") return "$" + "".join(money_lis) def update(self,new_money=None): if new_money is not None: self.money=round(float(new_money),2) def __nonzero__(self): if self.money==0: return False return True def __str__(self): return self.dollarrize() def __repr__(self): return repr(self.money)
2、几何。创建一个由有序数值对(x,y)组成的Point类,代表某个点的X和Y坐标。
class Point: def __init__(self,x,y): self.x=x self.y=y def __str__(self): return "(%s,%s)"%(self.x,self.y) if __name__=="__main__": p=Point(2,3) print(p)
3、几何。创建一个直线类,除主要属性:一对坐标值外,它还具有长度和斜线属性。你需要覆盖__repr__()方法,使得代表那条直线的字符串表示形式是由一对元组构成的元组。
import math class Line: def __init__(self,x1,y1,x2,y2): self.x1=x1 self.y1=y1 self.x2=x2 self.y2=y2 @property def length(self): return math.sqrt(abs(self.x1-self.x2)**2+abs(self.y1-self.y2)**2) def __str__(self): return "p1=(%d,%d),p2=(%d,%d)"%(self.x1,self.y1,self.x2,self.y2)
4、建立一个用户数据库类,来管理一个系统,该系统要求用户在登录后才能访问某些资源。这个数据库类对用户进行管理,并在实例化操作时加载之前保存的用户信息,提供访问函数来添加或更新数据库的信息。在数据修改后,数据库会在垃圾回收时将新信息保存到磁盘。
import shelve import time class Data: def __init__(self,name): self.name=name f=shelve.open(self.name,"c") f.close() self.flag=False def register(self,user,pwd): f=shelve.open(self.name,"r") if user in f: print("用户名已存在") f.close() else: f1=shelve.open(self.name,"c") f1[user]=[user,pwd,time.strftime("%Y/%m/%d %H:%M:%S",time.localtime(time.time()))] f1.close() def login(self,user,pwd): f=shelve.open(self.name,"r") if user not in f: print("用户名不存在!") if f[user][1]==pwd: self.flag=True else: print("用户名或密码错误") def list(self): f=shelve.open(self.name,"r") if self.flag: for user in f: print(f[user]) m=Data("myfu_m") m.register("jordan",123) m.login("melon",123)
5、数据类。提供一个time模块的接口,允许用户按照自己给定的时间格式来查看日期。你的类应该维护一个日期值,并用给定的时间创建一个实例,如果没有给出时间值,程序执行时会默认采用当前的系统时间。
import time class Time_display: def __init__(self,t=time.time()): self.mytime=t def update(self,t=time.time()): self.mytime=t def display(self,formating=None): fmt={} fmt["MDY"]="%m/%d/%y" fmt["MDYY"]="%m/%d/%Y" fmt["DMY"]="%d/%m/%y" fmt["MODYY"]="%b %d,%Y" if formating in fmt: return time.strftime(fmt[formating],time.localtime(self.mytime)) else: return time.ctime(self.mytime) melo=Time_display() print(melo.display("MODDY")) print(melo.display("MDYY")) print(melo.display("MDY")) melo.update(time.time()+60) print(melo.display())
6、你需要为一家B2C零售商编写一个基础的电子商务引擎。你需要写一个针对顾客的类User,一个对应存货清单的类Item,还有一个对应购物车的类叫Cart。货物放到购物车里,顾客可以有多个购物车。同时购物车里可以有多个货物,包括多个同样的货物。
class Item: def __init__(self,name,price): self.name=name self.price=price def __str__(self): return "%s,%.2f"%(self.name,self.price) class Cart: def __init__(self,name): self.name=name self.cart_list={} def add_item(self,product,count=1): if product not in self.cart_list: self.cart_list[product]=count if product in self.cart_list: self.cart_list[product]+=count else: print("所选商品有误!") def show_item(self): for i in self.cart_list: print("商品名:%s 数量:%s"%(i,self.cart_list[i])) def del_item(self,goods,count=1): if goods in self.cart_list: if count>self.cart_list[goods]: del self.cart_list[goods] else: self.cart_list[goods]-=count else: print("输入有误!") class User: def __init__(self,name,): self.name=name self.userdb=[] def equip_cart(self,cart): self.userdb.append(cart.name) def show_user(self): print(self.name,self.userdb)
7、为DOS机器编写一个Unix操作界面的shell。
import os class Shell: def __init__(self): self.cmds={"ls":"dir","cd":"cd","cp":"copy","rm":"del","mv":"ren"} def transfer(self,cmd): cmd_list=cmd.split() cmd_list[0]=self.cmds[cmd_list[0]] cmd="".join(cmd_list) return os.system(cmd) def start(self): while True: cmd=input(">>>") cmd_1=cmd.split() if cmd_1[0] in self.cmds: self.transfer(cmd) if cmd=="exit": break if __name__=="__main__": s=Shell() s=s.start()