专栏首页郭耀华‘s Blogpython练习题-day27

python练习题-day27

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\t数量:%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()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 某业务付费统计脚本问题排查

    1. 这个统计脚本我从未经手过,因此不知道逻辑是什么,也不知道代码在哪里.通过查看邮件源文件中的来源IP,找到了发出邮件所在的服务器,信头中有类似这样的来源I...

    陶士涵
  • 【Oracle健康检查脚本加量不加价】对Oracle 10g、11g和12c版本分别提供了只读版

    目前一共包含以下4个脚本,其中DB_healthcheck_lhr_v6.0.1_ALL_RW.sql 是读写版本,在脚本执行过程中会对数据库做DDL(创建一些...

    小麦苗DBA宝典
  • 【DB笔试面试562】在Oracle中,如何监控索引的使用状况?

    在开发应用程序时,可能会建立很多索引,那么这些索引的使用到底怎么样,是否有些索引一直都没有用到过,在这种情况下就需要对这些索引进行监控,以便确定它们的使用情况,...

    小麦苗DBA宝典
  • 【DB笔试面试560】在Oracle中,虚拟列索引(Virtual Column Indexes)的作用是什么?

    在Oracle中,虚拟列索引(Virtual Column Indexes)的作用是什么?

    小麦苗DBA宝典
  • 【DB笔试面试574】在Oracle中,什么是RBO和CBO?

    Oracle数据库中优化器(Optimizer)是SQL分析和执行的优化工具,是Oracle数据库中内置的一个核心模块。优化器的目的就是为了得到目标SQL的执行...

    小麦苗DBA宝典
  • MySQL 排错-解决MySQL非聚合列未包含在GROUP BY子句报错问题

    SELECT id, name, count(*) AS cnt FROM case_table GROUP BY name

    授客
  • 【DB笔试面试581】在Oracle中,绑定变量是什么?绑定变量有什么优缺点?

    通常在高并发的OLTP系统中,可能会出现这样的现象,单个SQL的写法、执行计划、性能都是没问题的,但整个系统的性能就是很差,这表现在当系统并发的数量增加时,整个...

    小麦苗DBA宝典
  • MySQL 重置Mysql root用户账号密码

    mysqladmin: connect to server at 'localhost' failed error: 'Access denied for us...

    授客
  • 【DB笔试面试580】在Oracle中,什么是High Version Count?

    一个父游标下对应的子游标个数被称为Version Count,每个子游标对应一个执行计划。对于一个特定的游标有多少个版本(Version Count)就属于高版...

    小麦苗DBA宝典
  • 【DB笔试面试556】在Oracle中,虚拟索引的作用有哪些?

    在数据库优化中,索引的重要性是不言而喻的。但是,在性能调整过程中,一个索引是否能被查询用到,在索引创建之前是无法确定的,而创建索引是一个代价比较高的操作,尤其是...

    小麦苗DBA宝典

扫码关注云+社区

领取腾讯云代金券