John车俊林 发表于 2019-11-19 15:21:27

037动动手0

零基础入门学习python中037动动手0 算票价:按照以下要求定义一个游乐园门票的类,并尝试计算2个成人+1个小孩平日票价——平日票价100元,周末票价为平日的120%,儿童半价
源码:
class Ticket():
      def __init__(self, weekend=False, child=False):
                self.exp = 100
                if weekend:
                        self.inc = 1.2
                else:
                        self.inc = 1
                if child:
                        self.discount = 0.5
                else:
                        self.discount = 1
      def calcPrice(self, num):
                return self.exp * self.inc * self.discount * num

>>> adult = Ticket()
>>> child = Ticket(child=True)
>>> print("2个成人 + 1个小孩平日票价为:%.2f" % (adult.calcPrice(2) + child.calcPrice(1)))
2个成人 + 1个小孩平日票价为:250.00

提问: if weekend: 和 if child: 都是指 if False: 吗?建立实例对象时,adult=Ticket()里都是默认参数False吧。 这些怎么理解呢

jackz007 发表于 2019-11-19 15:54:44

本帖最后由 jackz007 于 2019-11-19 15:57 编辑

child = False 意思是:不是小孩;if child 意思是,如果是小孩(child == True)
weekend = False 的意思是:不是周末 ;if weekend 的意思是,如果是周末(weekend == True)
adult = Ticket() 按缺省参数(成人、平日)创建对象 adult;
child = Ticket(child=True) 按参数child = True,weekend = False 参数创建对象 child

John车俊林 发表于 2019-11-19 16:41:12

jackz007 发表于 2019-11-19 15:54
child = False 意思是:不是小孩;if child 意思是,如果是小孩(child == True)
weekend = False 的意思 ...

但缺省参数里,False赋予给了weekend.那么if weekend 不就应该是if False吗?(child也是)不然写缺省参数weekend=False和child=False的意义是什么呢?

jackz007 发表于 2019-11-19 17:15:13

John车俊林 发表于 2019-11-19 16:41
但缺省参数里,False赋予给了weekend.那么if weekend 不就应该是if False吗?(child也是)不然写缺省参数 ...

       问到关键上了,缺省参数的意思是,创建对象的时候,这些参数是可以不写的,如果不写,那么,就按定义时给的缺省参数进行设置,如果要写,一定要按 child = ,和 weekend = 这种形式来写,那么,创建对象的时候就会用给定的参数覆盖缺省参数。

zltzlt 发表于 2019-11-19 19:41:50

John车俊林 发表于 2019-11-19 16:41
但缺省参数里,False赋予给了weekend.那么if weekend 不就应该是if False吗?(child也是)不然写缺省参数 ...

如果没有指定 weekend 和 child,它们将自动赋值为 False;但如果指定了 weekend 或 child,它们将变成指定的值。

John车俊林 发表于 2019-11-19 19:56:23

jackz007 发表于 2019-11-19 17:15
问到关键上了,缺省参数的意思是,创建对象的时候,这些参数是可以不写的,如果不写,那么,就按 ...

嗯嗯那这weekend/child只是参数的话,为什么if weekend/child:就能认为是if True: 呢?我知道if后跟的条件为真,但weekend/child只是一个参数,不是布尔类型吧

jackz007 发表于 2019-11-19 20:20:03

John车俊林 发表于 2019-11-19 19:56
嗯嗯那这weekend/child只是参数的话,为什么if weekend/child:就能认为是if True: 呢?我知道if后跟 ...

       参数只是你在定义对象的时候,输入对象的变量,adult = Ticket(child = False),那么,在 __init__() 中,child 的值就是 False,这有那么难理解吗?

John车俊林 发表于 2019-11-19 21:14:03

zltzlt 发表于 2019-11-19 19:41
如果没有指定 weekend 和 child,它们将自动赋值为 False;但如果指定了 weekend 或 child,它们将变成指 ...

噢噢,我就想明确这个,谢谢啦
页: [1]
查看完整版本: 037动动手0