所以我是编码的全新手,需要一些帮助。我正在尝试为小费计算器创建一个代码,但我不太确定我在哪里使用它。我从来没有在课堂上接受老师的教导,所以我一时兴起。有一个要求有一个班级,但我知道我会以错误的方式去做。任何帮助表示赞赏。 这就是我到目前为止所做的:
_.filter
每次我运行它都会得到这个:
import decimal
class Tip:
def __init__(self):
self.tip=0
def __str__(self):
return 'Tip['+str(self.sub_total)+' * '+str(self.percentage)+']'
def sub_total():
self.sub_total = input()
def percentage():
self.percentage = input()
def get_tip(percentage, sub_total):
self.percentage = decimal.Decimal(percentage)
self.sub_total = decimal.Decimal(sub_total)
self.tip = ((sub_total * percentage) / 100)
self.total = (sub_total + tip)
return self.__str__()
t = Tip()
print ("How much is the bill?")
t.sub_total()
print ("What percentage should the tip be?")
t.percentage()
print (t.get_tip())
就像我说的那样,我很乐意在我去的时候补偿,任何帮助都会受到赞赏。
答案 0 :(得分:2)
class Bill(object): # note: not Tip!
def __init__(self, sub_total):
self.sub_total = sub_total
def calculate_tip(self, tip_pct):
return self.sub_total * tip_pct
def calculate_total(self, tip_pct):
return self.sub_total * (1 + tip_pct)
这定义了一个Bill
对象。如果我们想要使用它,我们可以这样做:
subtotal = float(raw_input("Bill subtotal: "))
b = Bill(subtotal)
然后获得我们可以做的提示
tip_percentage = float(raw_input("Tip Percent (15% --> 0.15): "))
tip_amt = b.calculate_tip(tip_percentage)
获得总计:
grand_total = b.calculate_total(tip_percentage)
您的原始课程仅供参考:
class Tip:
def __init__(self,sub_total,percentage):
self.tip= (sub_total * percentage)
def __str__(self):
return 'Tip['+str(sub_total)+' * '+str(percentage)+']'
def sub_total():
sub_total = input()
def percentage():
percentage = input()
def get_tip(percentage, sub_total):
percentage = decimal.Decimal(percentage)
sub_total = decimal.Decimal(sub_total)
tip = ((sub_total * percentage) / 100)
total = (sub_total + tip)
return Tip(total)
我们将按方法讨论它。
__init__
这个很棒!这意味着您通过在构造函数中传递sub_total和百分比(作为比率为1)来创建Tip
对象,因此t = Tip(15.00, 0.15)
是15美元的15%小费。万岁!
__str__
除了提及这看起来更像是__repr__
而不是__str__
之外,我只能简单地介绍一下这个问题,而应该使用(
/ )
代替[
/ ]
。请记住,sub_total
和percentage
不是对象的属性 - 它们只是传递给构造函数的参数。如果您不将它们保存在__init__
方法中,则无法在此处引用它们。
sub_total
首先,你不能调用它,因为它没有self
参数。其次,即使你可以做也没有做任何事情。 sub_total = input()
获取用户输入,然后将其抛弃。
percentage
见上文
get_tip
你又错过了一个self
论点,但我会像get_tip(self, percentage, sub_total)
那样谈论它。你可以使用你已经创建的Tip
对象来调用它(当我们做t = Tip(15, 0.15)
时,请记住上面的内容?)并使用你可能传递给构造函数的参数调用它。换句话说:
t = Tip(15, 0.15) # 15% tip on $15
t.get_tip(0.15, 15) # ...15% tip on $15, but the grand total...
它作为一种功能并没有很多意义。特别是因为已经完成了一半的工作并保存在self.tip
中。如果这是您想要用于对象的模式,则可以执行以下操作:
class Tip(object):
def __init__(self, sub_total, tip_pct):
self.sub_total = sub_total
self.tip_pct = tip_pct
# saving these as attributes so we can use them later
self.grand_total = self.sub_total * (1 + self.tip_pct)
self.tip_amt = self.sub_total * self.tip_pct
但对于我来说,这看起来更像是一系列功能,而不是需要保存为对象的东西!
请记住,类可以为您的代码提供运行状态。在这种情况下,您可以真正应用的唯一状态是“提示多少”,所以我想您可以执行相反的操作并执行此操作类似的东西:
t = Tip(0.15)
t.calculate_total(amt_of_bill)
但这对我来说似乎很愚蠢。你可以创建一个类似于:
的工厂函数def tip(tip_pct):
def wrapped(bill_amt):
return bill_amt * (1 + tip_pct)
return wrapped
但对于你所处的位置来说,这有点先进。
答案 1 :(得分:0)
您需要先创建一个小费计算器对象。然后,我看到对象可以自己接受输入。我认为以下代码将解决您的问题(或者至少让您更接近正确答案)。
所以试试这个:
class Tip:
def __init__(self):
self.tip=0
def __str__(self):
return 'Tip['+str(self.sub_total)+' * '+str(self.percentage)+']'
def sub_total():
self.sub_total = input()
def percentage():
self.percentage = input()
def get_tip(percentage, sub_total):
self.percentage = decimal.Decimal(percentage)
self.sub_total = decimal.Decimal(sub_total)
self.tip = ((sub_total * percentage) / 100)
self.total = (sub_total + tip)
return self.__str__()
t = Tip()
print ("How much is the bill?")
t.sub_total()
print ("What percentage should the tip be?")
t.percentage()
print (t.get_tip())
答案 2 :(得分:0)
您的计划中有一些错误。最活跃的,即创建文本的那个,是get_tip
调用的缺失括号。你实际上是打印函数,而不是结果。
然而,这本身并不足够。还有更多,这里有一个列表:
get_tip
。input("foo: ")
以下是我对这个问题的看法:
def get_tip(percentage, sub_total):
tip = ((sub_total * percentage) / 100)
total = (sub_total + tip)
return total
sub_total = input("How much is the bill?")
percentage = input("What percentage should the tip be?")
print get_tip(percentage, sub_total)
有。 Mcuh更简单。
答案 3 :(得分:-1)
自从我实际使用过Python以来,它已经有点了,但从我可以看到你想要实际调用类Tip的实例。因此,您只需提及x=Tip()
而不是仅提及提示。
输入的使用也有点不对。你打电话给answer
两次,所以那里什么也没发生。您已经有两种方法可以读取输入,因此您可以使用这些方法来获取子总数和百分比。
这应该更好:
import decimal
class Tip:
def __init__(self,sub_total,percentage):
self.tip= (sub_total * percentage)
def __str__(self):
return 'Tip['+str(sub_total)+' * '+str(percentage)+']'
def sub_total():
sub_total = input()
def percentage():
percentage = input()
def get_tip(percentage, sub_total):
percentage = decimal.Decimal(percentage)
sub_total = decimal.Decimal(sub_total)
tip = ((sub_total * percentage) / 100)
total = (sub_total + tip)
return Tip(total)
t = Tip()
print ("How much is the bill?")
t.sub_total()
print ("What percentage should the tip be?")
t.percentage()
print (t.get_tip)