Python “固定”;“全球”;程序有问题吗?

Python “固定”;“全球”;程序有问题吗?,python,function,global,Python,Function,Global,最初,我在存款和取款功能中有“全局”语句。我的教授告诉我,我不能在这项任务中使用全局语句。顶部有一个由Codio创建的变量,我无法移动它。 我必须在函数中访问该变量,我做到了。现在我需要让我的函数以这样的方式返回,“account\u balance”变量在每次取款和存款后都会更新。目前,代码的功能基本正常,但每次对货币进行操作后,我都会为balance函数键入“b”,之前的操作都会被删除,我会回到默认余额。我做错了什么?代码如下: import sys #account balanc

最初,我在存款和取款功能中有“全局”语句。我的教授告诉我,我不能在这项任务中使用全局语句。顶部有一个由Codio创建的变量,我无法移动它。 我必须在函数中访问该变量,我做到了。现在我需要让我的函数以这样的方式返回,“account\u balance”变量在每次取款和存款后都会更新。目前,代码的功能基本正常,但每次对货币进行操作后,我都会为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
导入系统 #帐户余额 账户余额=浮动(500.25) # #打印平衡函数 def balance(): 打印('您当前的余额:\n%.2f'%1帐户\u余额) #存款功能 def沉积(温度): 存款金额=浮动(输入('您今天想存多少?\n')) 温度=温度+存款金额 打印('存款为%.2f,当前余额为%.2f'(存款金额,临时)) 返回温度 #收回功能 def提取(临时2): 取款金额=浮动(输入('您今天想取款多少?\n')) 如果取款金额>临时2: 打印(“$%.2f大于您的帐户余额$%.2f%”(取款金额,临时2)) 其他: temp2-=提款金额 账户余额=临时2 打印('支取金额为%.2f,当前余额为%.2f'(支取金额,临时2)) 返回时间2 #用户输入在这里,使用if/else条件语句根据用户输入调用函数 用户选择=“” 而userchoice!='Q': userchoice=input('您想做什么?\n(B)alance?,(W)itshdraw?,(D)eposit?,(Q)uit?\n') userchoice=userchoice.upper() 如果(userchoice='B'): 余额() elif userchoice==“W”: 提取(账户余额) elif userchoice==“D”: 存款(账户余额) elif userchoice==“Q”: 打印('感谢您与我们进行银行业务往来') 打破
问题在于传递给函数的值是副本,而不是对原始值的引用。您可以做以下两件事之一:

  • 在函数中使用全局语句
  • 将函数的返回值存储到全局变量中
  • 第一选择 我想这是你教授说的不允许的:

    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
    
    第二种选择
    问题是传递给函数的值是副本,而不是对原始值的引用。您可以做以下两件事之一:

  • 在函数中使用全局语句
  • 将函数的返回值存储到全局变量中
  • 第一选择 我想这是你教授说的不允许的:

    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':
        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
    
    取款函数要么返回新的帐户余额,要么打印出帐户中没有足够的钱。调用draw函数()后,检查它是否返回任何内容。如果是,则使用存储在新的账户余额中的返回值更新账户余额


    对于存款功能,您只需使用该功能返回的值更新帐户余额。

    由于不允许使用全局变量,您需要使用存款和取款功能返回的变量

    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
    
    取款函数要么返回新的帐户余额,要么打印出帐户中没有足够的钱。调用draw函数()后,检查它是否返回任何内容。如果是,则使用存储在新的账户余额中的返回值更新账户余额


    对于存款功能,您只需使用该功能返回的值更新帐户余额。

    如果您了解了课程,这将是一个使用这些课程的好地方……如果您了解了课程,这将是一个使用这些课程的好地方……欢迎来到SO。虽然我们感谢您的回答,但如果它能在其他答案的基础上提供额外的价值,那就更好了。在这种情况下,您的答案不会提供额外的价值,因为另一个用户已经发布了该解决方案。如果之前的答案对你有帮助,你应该在你有足够的声誉后投票决定。谢谢。我确实为他的一项职能提供了额外的见解。当函数返回“无”而不是数字时,其他答案将不予考虑。@sorinsighe感谢您的帮助。我现在有两种不同的方法让我的程序工作,所以我有一些回旋的余地。真棒的解释欢迎来到SO。虽然我们感谢您的回答,但如果它能在其他答案的基础上提供额外的价值,那就更好了。在这种情况下,您的答案不会提供额外的价值,因为另一个用户已经发布了该解决方案。如果之前的答案对你有帮助,你应该在你有足够的声誉后投票决定。谢谢。我确实为他的一项职能提供了额外的见解。当函数返回“无”而不是数字时,其他答案将不予考虑。@sorinsighe感谢您的帮助。我现在有两种不同的方法让我的程序工作,所以我有一些回旋的余地。真棒的解释