2014-06-20 4 views
-1

Я пытаюсь научиться создавать функции. Как я могу изменить этот код на несколько функций?Программа для переключения функций

purchase = input('Enter the amount of purchase: ') 
statetaxes = purchase * 0.05 
countytaxes = purchase * 0.025 
totaltaxes = (statetaxes + countytaxes) 
totalPurchase = (purchase + totaltaxes) 

print('The amount of purchase is $'), format(purchase, ',.2f') 
print('State tax: $'), format(statetaxes, ',.2f') 
print('County tax: $'), format(countytaxes, ',.2f') 
print('Total tax: $'), format(totaltaxes, ',.2f') 
print('Total: $'), format(totalPurchase, ',.2f') 

Будет ли это быть что-то вроде этого:

def main(): 

    purchase = get_purchase 
    statetaxes = get_state 
    countytaxes = get_county 
    totaltaxes = statetaxes + countytaxes 
    totalPurchase = totaltaxes + purchase 

    print('The amount of purchase is $', purchase) 
    print('State tax: ', statetaxes) 
    print('County tax: ', countytaxes) 
    print('Total tax: ', totaltaxes) 
    print('Total: $'. totalPurchase) 

def get_purchase(): 
    purchase = float(input('Please enter the amount of purchase') 
    return purchase 

def get_state(): 
    state = purchase * 0.05 
    return statetaxes 

def get_county(): 
    countytaxes = purchase * 0.025 
    return countytaxes 

main() 

Правильно ли это? Если нет, то где я иду не так?

Я делаю это без интерпретатора python, потому что я использую планшет прямо сейчас, ожидая полета.

EDIT: То, что я пытаюсь сделать, - это разделить верхнюю программу на несколько функций. Когда я ввожу этот код:

def get_purchase(): 
    return float(input('Please enter the amount of purchase ')) 

def get_state(): 
    return purchase * 0.05 


def get_county(): 
    return purchase * 0.025 

def main(): 

    purchase = get_purchase() 
    statetaxes = get_state() 
    countytaxes = get_county() 
    totaltaxes = statetaxes + countytaxes 
    totalPurchase = totaltaxes + purchase 

    print('The amount of purchase is $', purchase) 
    print('State tax: ', statetaxes) 
    print('County tax: ', countytaxes) 
    print('Total tax: ', totaltaxes) 
    print('Total: $'. totalPurchase) 

main() 

Я получаю эту ошибку:

Please enter the amount of purchase 5000 
Traceback (most recent call last): 
    File "salestax.py", line 49, in <module> 
    main() 
    File "salestax.py", line 38, in main 
    statetaxes = get_state() 
    File "salestax.py", line 27, in get_state 
    return purchase * 0.05 
NameError: name 'purchase' is not defined 

я получаю на самолете сейчас, но буду проверять обратно на приземлении, чтобы увидеть, что я делаю неправильно.

+0

Был ли я вам полезен? –

ответ

0

Этого ответа следует правке, где вы изменили свой код и теперь получаешь исключение во время выполнения.

Функции def get_state() и get_county() ссылаются на переменную с именем purchase, которая не входит в область действия.

Вы должны пройти purchase в каждую из функций, как это:

def get_state(purchase): 
    return purchase * 0.05 

def get_county(purchase): 
    return purchase * 0.025 

def main(): 
    purchase = get_purchase() 
    statetaxes = get_state(purchase) 
    countytaxes = get_county(purchase) 

Есть и другие способы сделать это, например, основанный на классе подход, однако, как вы заявили, что вы изучаете функции, это, вероятно, путь.

2

Вы должны вызова ваши функции, путем добавления открытия/закрытия скобки:

purchase = get_purchase() 

В get_state() у вас есть state и statetaxes переменных - вы хотите использовать только один из них.

Кроме того, как mhawke mentioned, вам нужно сделать get_state и get_county принимает параметр purchase и прохода покупки от основных до тех функций, когда вы называете их.

Помимо этого, ваши функции, как представляется, правильно разделяют логические операции.

0

обзор Код:

Move основной (код) в нижней части.

def get_purchase(): 
    '''Use docstrings to describe the function''' 
    # purchase = float(input('Please enter the amount of purchase') 
    # return purchase # no need to assign and then return the assignment 
    # just return what you'd otherwise assign: 
    return float(input('Please enter the amount of purchase')) # was missing a) 

def get_state(): 
    '''calculate and return state taxes''' 
    # state = purchase * 0.05 
    # return statetaxes # see a problem here? what is statetaxes? 
    return purchase * 0.05 # there, it's fixed! 

def get_county(): 
    # countytaxes = purchase * 0.025 
    # return countytaxes 
    return purchase * 0.025 

Итак, мы переместили ваш основной() на дно.

def main(): 

    purchase = get_purchase() # now we're calling these with the()'s 
    statetaxes = get_state() 
    countytaxes = get_county() 
    totaltaxes = statetaxes + countytaxes 
    totalPurchase = totaltaxes + purchase 

    print('The amount of purchase is $', purchase) 
    print('State tax: ', statetaxes) 
    print('County tax: ', countytaxes) 
    print('Total tax: ', totaltaxes) 
    print('Total: $'. totalPurchase) 

Наконец, в нижней части модуля, не просто вызвать main(), использовать общий Python идиомы:

if __name__ == '__main__': 
    main() 

Это предотвращает выполнение кода основной(), если импортировать модуль , Когда вы импортируете модуль, его __name__ больше не '__main__' Соответствующая: What does if __name__ == "__main__": do?

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