如何获取python中小数点后超过2位的价格的ItemException(示例)$4.456

2024-10-01 15:33:37 发布

您现在位置:Python中文网/ 问答频道 /正文

class Item:
    def __init__(self, name, id, price):
        self.name = name
        self.id = id
        self.price = price

    def getName(self):
        return self.name
    def getId(self):
        return self.id
    def getPrice(self):
        return self.price

    def __str__(self):
        return str(self.name) + " " + str(self.id) + " " + str(self.price)

class Shipment:
    def __init__(self, id):
        self.id = id
        self.items = []

    def getId(self):
        return self.id
    def getItems(self):
        return self.items 

    def addItem(self, Item):
        self.items.append(Item)

    def __str__(self):
        if self.items == []:
            return str(self.id) + ": []"
        else:
            returnvalue = str(self.id) + ": ["
            ctr = 0
            while ctr < len(self.items) - 1:
                returnvalue += str(self.items[ctr]) + ","
                ctr += 1
            returnvalue += str(self.items[len(self.items) - 1])
            return returnvalue + "]" 

class ItemException:
    def __init__(self, message):
        self.message = message
        self.items = []

    def __str__(self):
        return str(self.message)

def main(list):

    shipment = []
    ctr = 0 
    while ctr < len(list):
        list[ctr] = list[ctr].replace("\n" , "")
        ctr += 1

    ctr2 = 0 
    while ctr2 < len(list):
        if list[ctr2].isdigit():
            ship = Shipment(list[ctr2])
            shipment.append(ship)
        else:
            split = list[ctr2].split()
            if "$" not in list[ctr2]:
                if len(split) != 2:
                    raise ItemException("Invalid name")
            if "-" in list[ctr2]:
                raise ItemException("Price can't be negative")
            if ((len(split)) != 1):
                if ctr2 != len(list):
                    item = Item(split[0], split[1], list[ctr2 + 1])
                    ship.addItem(item)
            temp = list[ctr2].count(".")
            if temp > 1:
                raise ItemException("Invalid price, more than one .")

            #need to add exception for more than 2 digits past the decimal point
        ctr2 += 1

    return shipment

如果价格“$4.567”的小数点后超过2位,我需要找出如何对此测试引发异常:

def test16():

    result = False 
    try: 
        main(['55555555\n','socks 12345\n','$4.567\n','socks 12345\n','$4.56\n']) 
    except ItemException: 
        result = True 
    print result
    return result  

我想我需要拆分它,但我不确定如何仅分离价格,然后拆分它以获得小数点后的数字。一旦我达到这一点,我想如果美分>;2.引发异常


Tags: nameselfidlenreturnifdefitems

热门问题