Python,TypeError:缺少位置语句

时间:2015-09-07 03:17:24

标签: python python-3.x typeerror

我已经尝试了各种各样的事情,我不知道我做错了什么。在尝试了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)

3 个答案:

答案 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
  • 如果您将预先计算的monthSalesstateTaxDue传递到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]: