2015-09-07 3 views
-1

Я пробовал все виды вещей, и я не знаю, что я делаю неправильно. Попробовав около 5 различных способов сделать это, я попросил о помощи здесь. Что я делаю не так?Python, TypeError: missing positional statement

#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) 

ответ

1

Есть несколько вопросов здесь:

  • Вы определяете intro как принимать параметр monthSales но в main вы называете его без аргументов.
  • Вы используете 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 к 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 добавить:

    def main(): 
        intro() 
        monthlySales = sales() 
        ... 
        print(afterTax) 
    
    main() 
    

Есть несколько других стилистических вещи (имена Python, как правило, в форме county_tax_due вместо верблюда-обсаженных countyTaxDue, например,), но я попытался сосредоточиться конкретно на том, почему ваш скрипт не работает, не делая других серьезных изменений.

+0

Вы уверены, что у меня гораздо ближе тот ему ответил, но я все еще получаю неприятную ошибку Traceback (самый последний вызов последнего): Файл «/ Users/karlmachleidt/Desktop/Лаборатория 2.7.py», строка 39, в основной() Файл "/ Пользователи/karlmachleidt/Рабочий стол/Лаборатория 2.7.py", строка 36, в главном = после уплаты всего (monthlySales, monthlyStateTax, monthlyCountyTax) файла «/ Пользователи/karlmachleidt/Desktop/Lab 2.7.py», строка 27, всего totalSum = sales - (stateTaxDue + countyTaxDue) ТипError: неподдерживаемый тип операндов для -: 'function' и 'float' – Karl

+0

Я понял, но теперь я получаю -10.2 .. если мой вход 10 i не знаю, как, я изменил общий (monthSales ...) на общий (продажи ...) – Karl

+0

Я получил его, я смешал порядок ввода Спасибо за помощь, приятель – Karl

0

Вы определили def intro(monthSales):, но вы вызываете его без параметра intro() в main().

Кроме того, здесь вы вызываете функцию продажи с параметром

def calcStateTax(sales): 
sales(monthSales) # 

но это функция не принимает никаких параметров.

def sales(): 

Кроме того, вы используете monthSales переменные в различных функций, но оно не определяется как глобальная. Ссылка This поможет вам понять различные области переменных python.

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]: 
+0

Мне нравится ваш ответ, но, к сожалению, это для задания в колледже, и я не смог бы объяснить это, так как я довольно новичок в Python – Karl

Смежные вопросы