波大大12138 发表于 2020-6-16 17:03:05

关于票价的这个代码的问题


<p>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</p><p>这个代码中有几个问题不太清楚</p><p>1:第15~16行赋值给变量的时候为什么后面Ticket括号里面一个什么都没有,一个要加child=True呢?这两个括号里面的内容分别是什么意思?为什么要这杨赋值啊2.在第二行的代码中用到了__int__这个函数在这里有什么作用呢?3.第二行后面定义变量的时候为什么weekend和child都赋值是false呢
</p>

波大大12138 发表于 2020-6-16 17:09:37

@Twilight6

Twilight6 发表于 2020-6-16 17:14:42



1:第15~16行赋值给变量的时候为什么后面Ticket括号里面一个什么都没有,一个要加child=True呢?
你看Ticket 类的 __init__方法设置的默认参数:__init__(self, weekend=False, child=False) 已经设置默认参数了,所以可以不传入参数

而这两个参数是干嘛的呢?是用来判断是否是周末 和是否是小孩的你看 init 下面 if weekend和 if child 就是判断这些条件

所以这里如果调用 adult = 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
你把 True 或者 False 代入 加上题意 理解代码,参数就是默认既不是小孩也不是周目的意思, 你重新赋值为 True 就说明周末或者 小孩的条件成立了,就买的是这些专门的票

而且不止可以赋值 True你还可以赋值 任何 bool 类型值为 True 的值表示条件成立

2.在第二行的代码中用到了__int__这个函数在这里有什么作用呢?

__init__ 设置了函数可传入的参数 weekend 和 child如果没有设置,那么这个类就无法传入参数

而且 __init__ 通过传入的参数重新初始化对应的打折折扣

3.第二行后面定义变量的时候为什么weekend和child都赋值是false呢

设置为 False 意思就是买的票 默认既不是小孩也不是周末的意思


波大大12138 发表于 2020-6-17 09:46:33

Twilight6 发表于 2020-6-16 17:14
你看Ticket 类的 __init__方法设置的默认参数:__init__(self, weekend=False, child=False) 已经设 ...

好的,还有一个问题就是你把15~16行括号后面的参数是在和__init__方法后面的参数比较的,为什么不是和下面的calcprice这个方法后面的参数作比较的呢?他们都是方法还有优先级吗?

Twilight6 发表于 2020-6-17 09:48:36

波大大12138 发表于 2020-6-17 09:46
好的,还有一个问题就是你把15~16行括号后面的参数是在和__init__方法后面的参数比较的,为什么不是和下 ...

__init__ 方法 函数实例化时候会自动调用,也在你实例化后就成功设置了票价问题

下面那个方法是通过 init 初始化的数值进行计算的,没初始化数值怎么进行计算呢? 是吧~就是这个道理

波大大12138 发表于 2020-6-17 09:59:36

Twilight6 发表于 2020-6-17 09:48
__init__ 方法 函数实例化时候会自动调用,也在你实例化后就成功设置了票价问题

下面那个方法是通过 ...

什么叫做实例化啊,实例化是什么意思啊,代码中的哪个代码哪里体现着实例化啊

Twilight6 发表于 2020-6-17 10:01:05

波大大12138 发表于 2020-6-17 09:59
什么叫做实例化啊,实例化是什么意思啊,代码中的哪个代码哪里体现着实例化啊

adult = Ticket()
child = Ticket(child=True)
这两个都是实例化,将类对象 Ticket() 实例化为 adult和 child

leizhenzi23 发表于 2021-1-13 16:54:04

def calcPrice(self, num):
                return self.exp * self.inc * self.discount * num这个不是成人的价格么,怎么还要 *self.discount
页: [1]
查看完整版本: 关于票价的这个代码的问题