2007-02-03

 

Python学习笔记3--ShoppingApp

class Product:

def __init__(self, name, quantity, price):

self.name = name

self.quantity = quantity

self.price = price

def getName(self):

return self.name

def setName(self, name):

self.name = name

def getQuantity(self):

return self.quantity

def setQuantity(self, quantity):

self.quantity = quantity

def getPrice(self):

return self.price

def setPrice(self, price):

self.price = price

def getValue(self):

return self.quantity * self.price

def __str__(self):

return "\nname:" + self.name + " Quantity:" + str(self.quantity) + " price:" + str(self.price)

class ShoppingCart:

def __init__(self):

self.cart = []

def addProduct(self, product):

self.cart.append(product)

def getTotalValue(self):

ret = 0.0

for proc in self.cart:

ret += proc.getValue()

return ret

def __str__(self):

ret = ""

print "Number of products:" ,len(self.cart)

if len(self.cart) == 0 :

ret = "empty"

else :

for proc in self.cart:

ret += str(proc)

return ret

class ShoppingApp:

def getChoice(self):

try :

choice = int(raw_input("\n[0] Quit"

"\n[1] Add Product"

"\n[2] Display Product"

"\n[3] Display Total"

"\nchoice>" ))

if choice not in range(4 ):

print "Invalid choice, must between 0 and 3."

else :

return choice

except ValueError:

print "Invalid choice, must be an integer."

return 4

def run(self):

self.shopCart = ShoppingCart()

while True :

choice = self.getChoice()

if choice == 0 :

break

elif choice == 1 :

self.shopCart.addProduct(self.getProduct())

elif choice == 2 :

print self.shopCart

elif choice == 3 :

print self.shopCart.getTotalValue()

def getProduct(self):

while True :

proc = raw_input("product [name_qty_price]>" )

tokens = proc.strip().split( "_" )

if len(tokens) != 3 :

print "Invalid input!"

continue

name = tokens[0 ]

try :

qty = int(tokens[1 ])

price = float(tokens[2 ])

if qty < 0 or price < 0.0 :

print "Invalid input."

continue

except ValueError:

print "Invalid input"

continue

return Product(name, qty, price)

#main

ShoppingApp().run()

这个练习是前面两个练习的综合,主要考察的是对基本类的定义,基本的循环结构和控制结构的使用,还有就是对简单异常的处理。通过这个练习,就能熟悉简单的面向对象的编程。需要注意的地方如下:

1 定义容器的时候,最好先初始化,添加对象到容器的方法是append

2 重载对象的__str__方法,可以在以后用str()或者print就能获得该对象的字符串表示。

3 在这里,各个变量的str形式我都用的是str()函数,直接用+不行,这个和java不同,估计还有更好的办法。

4 异常的处理还是简单的ValueError。

5 在处理raw_input的时候,使用了strip,其实不用也可以的。


2007-02-01

 

Python学习笔记1--ICarnegieInfo

class ICarnegieInfo:
    #single pattern by inner class
    class __single:
        def __init__(self):
            ICarnegieInfo.address = "nwpu"
            ICarnegieInfo.email = "
tinylee@mail.com"
            ICarnegieInfo.instance = "instance"
            ICarnegieInfo.name = "tinylee"
            ICarnegieInfo.telephone = "87654321"
            ICarnegieInfo.url = "
www.orchidy.com "
    instance = None

    def __init__(self):
        if not ICarnegieInfo.instance:
            ICarnegieInfo.instance = ICarnegieInfo.__single()
        else:
            return ICarnegieInfo.instance
    def getAddress(self):
        return self.address
    def getEmail(self):
        return self.email
    def getInstance(self):
        return self.name
    def getTelephone(self):
        return self.telephone
    def getUrl(self):
        return self.url

class ICarnegieApp:
    def do(self):
        handle = ICarnegieInfo()
        while True:
            try:
                str = int(raw_input('\n0 Exit\n'
                '1 Address\n'
                '2 Email\n'
                '3 Instance\n'
                '4 Telephone\n'
                '5 Url\n'
                'Input your Choice>'));
            except ValueError:
                print "You should input a Integer."
                continue
            if str < 0 or str > 5:
                print "Invalid input"
                continue
            elif str == 0:
                break
            elif str == 1:
                ret = handle.getAddress()
            elif str == 2:
                ret = handle.getEmail()
            elif str == 3:
                ret = handle.getInstance()
            elif str == 4:
                ret = handle.getTelephone()
            elif str == 5:
                ret = handle.getUrl()
            print ret
           
#main
app = ICarnegieApp()
app.do()

  这个练习的目的:使用基本的循环和控制语句,使用单件模式,使用简单的异常处理。
需要注意的地方:
1。类名.属性名,表示该属性是类属性。所以在__single类中访问instance,需要加上ICarnegieInfo
2。方法定义的时候,如果有返回值,需要加上return语句,否则返回None,这个和java相同,和ruby不同。
3。从键盘中读取内容的方法:raw_input(''),但是会保留最后的回车。
   从控制台输出的方法:print
4。捕捉类型转换的异常是ValueError。
5。相邻的字符串连接的时候,可以不用+


 

Python学习笔记2--SecondCalc

class SecondCalc:
    def run(self):
        while True :
            str = raw_input( 'Enter a time, stop by ".":' )
            if str.strip() == '.':
                break
            else :
                fields = str.split( ":" )
                if len(fields) != 3:
                    print 'Invalid time format.'
                    continue
                try :
                    hour = int(fields[ 0 ])
                    min = int(fields[ 1 ])
                    sec = int(fields[2])
                    if (hour not in range( 0, 60)) or (min not in range( 0, 60)) or (sec not in range( 0, 60)):
                        print 'must between 0 and 59'
                        continue
                    print 'total: ',hour* 3600 + min* 60 + sec
                except ValueError:
                    print 'Invalid Integer format'
                    continue
SecondCalc().run()

这个练习主要的目标:使用控制语句和条件判断,会使用简单的异常处理,会分割字符串。

需要注意的要点:

1 raw_input的时候,会保留最后的回车,在比较字符串的时候,最好使用strip函数。

2。分割字符串可以使用 split,里面的参数是用于分割的字符串。

3 。判断个数是否在一个范围内,可以使用range(0,60),注意range的区间是[),该题也可以写成range(60)

 


This page is powered by Blogger. Isn't yours?