2015-05-13 1 views
0

Итак, мне нужно создать что-то, что обновляет банковский счет (глобальная переменная). Мои инструкции таковы:Функция python 3.0 в функции

def setBalance(amt):  # Defines (but doesn't print) the value of the account balance 
def printBalance():  # Displays current balance as a money value with a heading 
def printLedgerLine(date, amount, details): # with items (and the balance) spaced and formatted 
def deposit (date, details, amount): # Alter the balance and print ledger line  
def withdraw(date, details, amount): # Alter the balance and print ledger line 

Так что, когда я делаю что-то подобное;

deposit ("23-12-2012", "Income", 225) 
withdraw("24-12-2012", "Presents", 99.02) 
printBalance() 

Он вернется;

23-12-2012 Income    $ 225.00  $ 575.01 
24-12-2012 Presents   $ 99.02  $ 475.99 
Current Balance is $ 475.99 

Я не уверен, как это сделать. На данный момент я определяю printLedgerLine, чтобы просто получить информацию и распечатать ее с вкладками, чтобы она выглядела хорошо. Затем я вызываю его либо изъятием, либо с депозитом, и пытается распечатать (новый) баланс в конце.

def deposit(date, details, amount): 
    global balance 
    balance = float(balance) + float(amount) 
    printLedgerLine(date,amount,details) 
    print(str(balance) 

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

print(printLedgerLine(date,amount,details),str(balance)) 

затем печатает Отсутствует баланс.

Должен ли я вместо этого возвращать printLedgerLine, но если я это сделаю, то как мне «форматировать» его без печати? Разочарование, кажется, что оно есть прямо там, и я смущен тем, насколько это просто! Извините за долгие запутывающие вопросы, трудно объяснить, когда ваш любитель! Благодаря

+0

Поступая 'печать (printLedgerLine (дату, сумму, подробность), ул (баланс))' печати возвращаемого значения 'printLedgetLine', который, вероятно,' None'. Как выглядит функция 'printLedgerLine'? Выводит ли только строки с разделителями табуляции, а также строку «Текущий баланс»? Или просто «Текущий баланс» без фактического баланса? –

+0

приветствует оба ответа! Формат был тем, что нужно T, до этого я просто печатал его[email protected]_k - функция printLedgerLine не инициализировала баланс первоначально, только когда был использован депозит/вывод –

+0

Из описания '# с элементами (и балансом), расположенными на расстоянии и отформатированными', кажется, что 'printLedgerLine' всегда должен распечатайте баланс, поэтому он должен быть частью этой функции, а не «отзывать» или «депозит» –

ответ

1

Трудно сказать, что именно не так, не видя вашу printLedgerLine функцию, но из вашего вопроса, кажется, что вы печатаете только даты, детали и сумму без окончательного баланса, и распечатать баланс в функциях deposit и withdraw вместо ,

Вместо этого вы должны просто переместить это значение в printLedgerLine и просто вызвать эту функцию в deposit и withdraw. Что-то вроде этого:

def deposit(date, details, amount): 
    global balance 
    balance = float(balance) + float(amount) 
    printLedgerLine(date,amount,details) 

def printLedgerLine(date,amount,details): 
    print("{}\t{}\t$ {:.02f}\t$ {:.02f}".format(date, details, amount, balance)) 
2

Вместо print(printLedgerLine(date,amount,details),str(balance))

Вы можете сделать изменения printLedgerLine к getLedgerLine и сделать его возвращают значение, например

def getLedgerLine(date, amount, details): 
    return '{0}\t{1}\t{2}'.format(date, amount, details) 

, а затем использовать

print('{0}\t{1}'.format(printLedgerLine(date,amount,details),str(balance))) 

Или вы могли бы вероятно, замените всю функцию printLedgerLine:

def deposit(date, details, amount): 
    global balance 
    balance = float(balance) + float(amount) 
    print('{date}\t{amount}\t{details}\t{balance}'.format(
     date=date, 
     amount=amount, 
     details=details, 
     balance=balance 
    )) 
Смежные вопросы