【问题标题】:What is wrong with this python function?这个python函数有什么问题?
【发布时间】:2020-05-17 01:51:33
【问题描述】:

我看不出哪里出错了 - 其他答案似乎表明这是在函数中不当使用全局变量,但我很确定我没有以这种方式犯罪。

当我运行此代码时,它成功提示我输入所有数据行,但是一旦它尝试运行第一个函数就会发生错误...

谁能指出我做错了什么?

我得到的错误信息是:

UnboundLocalError: local variable 'monthlyValue' referenced before assignment on line 17 in main.py

我的整个程序是这样的:

def calcMonthlyYearlyValues(weeklyVsYearlyVsQuarterly,initialValue):
  if(weeklyVsYearlyVsQuarterly.upper() == "W"):
    yearlyValue = initialValue * 52
    monthlyValue = round(float(yearlyValue / 12),2)
  elif (weeklyVsYearlyVsQuarterly.upper() == "Y"):
    yearlyValue = initialValue
    monthlyValue = round(float(yearlyValue / 12),2)
  elif (weeklyVsYearlyVsQuarterly.upper() == "Q"):
    yearlyValue = initialValue * 4
    monthlyValue = round(float(yearlyValue / 12),2)
  return monthlyValue, yearlyValue

def inputRowValues(rowDescription):
  print rowDescription
  rowName = input("Enter Item Name: ")
  rowPeriodType = input("W/ M/ Q/ Y for Weekly/ Monthly/ Quarterly or Yearly:")
  rowValue = float(input("Enter Amount: "))
  print ""
  return rowName, rowPeriodType, rowValue

row1Name, row1PeriodType, row1Value = inputRowValues("Row 1")
row2Name, row2PeriodType, row2Value = inputRowValues("Row 2")
row3Name, row3PeriodType, row3Value = inputRowValues("Row 3")
row4Name, row4PeriodType, row4Value = inputRowValues("Row 4")
row5Name, row5PeriodType, row5Value = inputRowValues("Row 5")
row1Monthly, row1Yearly  = calcMonthlyYearlyValues(row1PeriodType,row1Value)
row2Monthly, row2Yearly  = calcMonthlyYearlyValues(row2PeriodType,row2Value)
row3Monthly, row3Yearly  = calcMonthlyYearlyValues(row3PeriodType,row3Value)
row4Monthly, row4Yearly  = calcMonthlyYearlyValues(row4PeriodType,row4Value)
row5Monthly, row5Yearly  = calcMonthlyYearlyValues(row5PeriodType,row5Value)
column1 = "Item"
column2 = "Month"
column3 = "Year"

print "Monthly Budget"
print "========================================"
print "{0:<15}  {1:^10}  {2:^10}".format(column1, column2, column3)
print "========================================"
print "{0:<15} ${1:>10,.2f}  ${2:>10,.2f}".format(row1Name, row1Monthly, row1Yearly)
print "{0:<15} ${1:>10,.2f}  ${2:>10,.2f}".format(row2Name, row2Monthly, row2Yearly)
print "{0:<15} ${1:>10,.2f}  ${2:>10,.2f}".format(row3Name, row3Monthly, row3Yearly)
print "{0:<15} ${1:>10,.2f}  ${2:>10,.2f}".format(row4Name, row4Monthly, row4Yearly)
print "{0:<15} ${1:>10,.2f}  ${2:>10,.2f}".format(row5Name, row5Monthly, row5Yearly)

【问题讨论】:

  • weeklyVsYearlyVsQuarterlyM 时,您不会为monthlyValueyearlyValue 赋值
  • 谢谢!只见树木不见森林!有点疏忽。感谢您的快速回答!
  • 有时你只需要第二双眼睛......

标签: python global-variables local-variables


【解决方案1】:

感谢尼克的评论 - 我意识到我错过了一个 elif,如下所示:

def calcMonthlyYearlyValues(weeklyVsYearlyVsQuarterly,initialValue):
  if(weeklyVsYearlyVsQuarterly.upper() == "W"):
    yearlyValue = initialValue * 52
    monthlyValue = round(float(yearlyValue / 12),2)
  elif (weeklyVsYearlyVsQuarterly.upper() == "Y"):
    yearlyValue = initialValue
    monthlyValue = round(float(yearlyValue / 12),2)
  elif (weeklyVsYearlyVsQuarterly.upper() == "M"):
    yearlyValue = initialValue * 12
    monthlyValue = initialValue
  elif (weeklyVsYearlyVsQuarterly.upper() == "Q"):
    yearlyValue = initialValue * 4
    monthlyValue = round(float(yearlyValue / 12),2)
  return monthlyValue, yearlyValue

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-22
    • 2023-01-09
    • 1970-01-01
    • 2017-03-26
    • 2014-06-29
    • 2011-02-13
    • 2011-04-24
    • 2011-08-26
    相关资源
    最近更新 更多