我已经尝试了各种各样的事情,我不知道我做错了什么。在尝试了5种不同的方法后,我放弃了在这里寻求帮助。我做错了什么?
#tried to do this all sorts of ways but gave up
#someone please tell me what the heck I'm doing wrong here
CONSTANT_COUNTY_TAX = 0.02
CONSTANT_STATE_TAX = 0.04
def intro(monthSales):
print ("This program shows how many taxes you will have to pay on your sales")
def sales():
monthSales = eval(input("Enter the total of sales of this month: "))
return monthSales
def calcCountyTax(sales):
sales(monthSales)
countyTaxDue = sales*CONSTANT_COUNTY_TAX
return countyTaxDue
def calcStateTax(sales):
sales(monthSales)
stateTaxDue = sales*CONSTANT_STATE_TAX
return stateTaxDue
def total(stateTaxDue, countyTaxDue, monthlSales):
sales(monthSales)
calcStateTax(monthSales)
calcCountyTax(monthSales)
totalSum = sales - (stateTaxDue + countyTaxDue)
return totalSum
def main():
intro()
sales()
calcStateTax(monthSales)
calcCountyTax(monthSales)
total(monthSales, stateTAxDue, countyTaxDue)
答案 0 :(得分:1)
这里有几个问题:
intro
定义为参数monthSales
,但在main
中,您可以不带参数调用它。在sales
中您使用eval
,而您实际上并不需要。尝试这样的事情:
def sales():
monthSales = int(input("Enter the total of sales of this month: "))
return monthSales
在calcCountyTax
中,您正在使用名为sales
的参数,然后将其视为函数本身。您可以使用函数作为参数,但它可能不是您想要的。也许更像是:
def calcCountyTax(sales):
countyTaxDue = sales * CONSTANT_COUNTY_TAX
return countyTaxDue
与calcStateTax
monthlSales
的{{1}}参数是拼写错误,应为total
。如果您将预先计算的monthSales
和stateTaxDue
传递到countyTaxDue
函数,则无需重新计算到期税额。 total
功能可以简化:
total
在def total(monthSales, stateTaxDue, countyTaxDue):
totalSum = sales - (stateTaxDue + countyTaxDue)
return totalSum
方法中,您不会在调用函数时存储从函数返回的值。 main
看起来应该更像这样:
main
您永远不会调用def main():
intro()
monthlySales = sales()
monthlyStateTax = calcStateTax(monthlySales)
monthlyCountyTax = calcCountyTax(monthlySales)
afterTax = total(monthlySales, monthlyStateTax, monthlyCountyTax)
print(afterTax)
函数。如果您只是定义它但从不调用它,则运行脚本时不会发生任何事情。在定义main
后,在脚本底部添加:
main
还有一些其他风格的东西(例如,Python名称通常是def main():
intro()
monthlySales = sales()
...
print(afterTax)
main()
形式而不是驼峰式county_tax_due
),但我试图专注于为什么你的如果没有进行其他重大更改,脚本就无法运行。
答案 1 :(得分:0)
您定义了def intro(monthSales):
,但您在intro()
中没有参数main()
进行调用。
同样,您在此处使用参数
调用销售功能def calcStateTax(sales):
sales(monthSales) #
但是该功能不接受任何参数。
def sales():
此外,您在不同的函数中使用monthSales
变量,但未将其定义为全局变量。 This链接将帮助您了解各种范围的python变量。
答案 2 :(得分:0)
由于其他人已经帮助您审核了您的代码,因此这里的方法有点过分,但在处理简单的计算问题时却更具吸引力。
class Tax(object):
COUNTY = 0.02
STATE = 0.04
def __init__(self, sales):
self.__sales = sales
@property
def calc_statedue(self):
return self.STATE * self.__sales
@property
def calc_countydue(self):
return self.COUNTY * self.__sales
@property
def calc_totaldue(self):
return self.calc_countydue + self.calc_statedue
@property
def calc_taxfree_profit(self):
return self.__sales - self.calc_totaldue
def main():
print "This program shows how much tax you will need to pay on your sales."
sales = float(raw_input("Enter the total sales for this month:\n>> "))
# You can add a check here to see if sales is not non-numerical, perhaps
# an isdigit, isalpha, float, type, etc. check. Your call.
tax_calc = Tax(sales)
print "Taxes due to county: ", tax_calc.calc_countydue
print "Taxes due to state: ", tax_calc.calc_statedue
print "Total taxes due: ", tax_calc.calc_totaldue
print "Profit after taxes: ", tax_calc.calc_taxfree_profit
if __name__ == "__main__":
main()
结果:
In [6]: runfile('C:/Users/.../.spyder2/temp.py', wdir='C:/Users/.../.spyder2')
This program shows how much tax you will need to pay on your sales.
Enter the total sales for this month:
>> 1200
Taxes due to county: 24.0
Taxes due to state: 48.0
Total taxes due: 72.0
Profit after taxes: 1128.0
In [7]: