Исправление "глобальной" проблемы с программой? - PullRequest
0 голосов
/ 04 октября 2018

Изначально у меня были «глобальные» выписки внутри функций ввода и вывода.Мой профессор сказал мне, что я не могу использовать глобальные утверждения для этого задания.Вверху есть переменная, созданная Codio, и я не могу ее переместить.Мне нужно получить доступ к этой переменной в моих функциях, что я и сделал.Теперь мне нужно, чтобы мои функции возвращались таким образом, чтобы переменная «account_balance» обновлялась после каждого снятия и внесения депозита.В настоящее время код функционирует в основном нормально, но после каждой операции с деньгами я набираю «b» для функции баланса, а предыдущие операции стираются, и я возвращаюсь к балансу по умолчанию.Что я здесь не так делаю?Код ниже:

    import sys

#account balance 
account_balance = float(500.25)


#<--------functions go here-------------------->
#printbalance function
def balance():
  print('Your current balance:\n%.2f' % account_balance)


#deposit function
def deposit(temp):
  deposit_amount = float(input('How much would you like to deposit today?\n'))
  temp = temp + deposit_amount
  print('Deposit was $%.2f, current balance is  $%.2f' % (deposit_amount, temp))
  return temp

#withdraw function
def withdraw(temp2):

  withdrawal_amount = float(input('How much would you like to withdraw today?\n'))
  if withdrawal_amount > temp2:
    print('$%.2f is greater than your account balance of $%.2f ' % (withdrawal_amount, temp2))
  else:
    temp2 -= withdrawal_amount
    account_balance = temp2
    print('Withdrawal amount was $%.2f, current balance is $%.2f' % (withdrawal_amount, temp2))
    return temp2

#User Input goes here, use if/else conditional statement to call function based on user input

userchoice = ''

while userchoice!= 'Q':
  userchoice = input('What would you like to do?\n(B)alance?, (W)ithdraw?, (D)eposit?, (Q)uit?\n')
  userchoice = userchoice.upper()

  if (userchoice == 'B'):
    balance ()
  elif userchoice == 'W':
    withdraw (account_balance)
  elif userchoice == 'D':
    deposit (account_balance)
  elif userchoice == 'Q':
    print('Thank you for banking with us.')
    break

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Поскольку вам не разрешено использовать глобальные переменные, вам необходимо использовать переменные, возвращаемые функциями внесения и снятия.

while userchoice!= 'Q':
userchoice = input('What would you like to do?\n(B)alance?, (W)ithdraw?, (D)eposit?, (Q)uit?\n')
userchoice = userchoice.upper()

if (userchoice == 'B'):
  balance ()
elif userchoice == 'W':
    new_balance = withdraw(account_balance)
    if new_balance:
        account_balance = new_balance
elif userchoice == 'D':
    account_balance = deposit (account_balance)
elif userchoice == 'Q':
    print('Thank you for banking with us.')
    break

Функция изъятия либо возвращает баланс нового счета, либо печатает, чтоу вас недостаточно денег на счету.После вызова функции изъятия () вы проверяете, вернул ли он что-нибудь.Если это так, вы обновляете account_balance возвращаемым значением, сохраненным в new_balance.

Для функции депозита вам просто нужно обновить account_balance значением, возвращаемым функцией.

0 голосов
/ 04 октября 2018

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

  1. Использовать глобальный оператор внутри функций
  2. Сохранить возвращаемое значение из функций в глобальной переменной

Первый вариант

Я так понимаю, это то, что, по словам вашего профессора, запрещено:

def deposit():
  global account_balance
  deposit_amount = float(input('How much would you like to deposit today?\n'))
  account_balance = account_balance + deposit_amount
  print('Deposit was $%.2f, current balance is  $%.2f' % (deposit_amount, temp))
  return account_balance

Второй вариант

while userchoice!= 'Q':
  userchoice = input('What would you like to do?\n(B)alance?, (W)ithdraw?, (D)eposit?, (Q)uit?\n')
  userchoice = userchoice.upper()

  if (userchoice == 'B'):
    balance ()
  elif userchoice == 'W':
    account_balance = withdraw (account_balance)
  elif userchoice == 'D':
    account_balance = deposit (account_balance)
  elif userchoice == 'Q':
    print('Thank you for banking with us.')
    break
...