我执行计算的函数每次都返回0。我究竟做错了什么?

时间:2016-11-07 20:12:24

标签: python function calculator

在我完成其余工作之前,我只想让第一个计算工作。但每次它都会继续返回0。 我自己尝试了多种解决方案,却找不到有效的方法。

我的代码列在这里:

garden_length = 0
garden_width = 0
veg_length = 0
veg_width = 0
flower_length = 0
flower_width = 0
garden_area = 0
veg_area = 0

def GetGardenLength():
    try:
        garden_length = float(input('Please enter the gardens length in metres: '))
    except ValueError:
        print('Please enter a valid NUMBER.')
        return GetGardenLength()
    return garden_length

def GetGardenWidth():
    try:
        garden_width = float(input('Please enter the gardens width in metres: '))
    except ValueError:
        print('Please enter a valid NUMBER.')
        return GetGardenWidth()
    return garden_width

def GetVegPlotLength():
    try:
        veg_length = float(input('Please enter the vegetable plots length in metres: '))
    except ValueError:
        print('Please enter a valid NUMBER.')
        return GetVegPlotLength()

def GetVegPlotWidth():
    try:
        veg_width = float(input('Please enter the vegetable plots width in metres: '))
    except ValueError:
        print('Please enter a valid NUMBER.')
        return GetVegPlotWidth()

def GetFlowerLength():
    try:
        flower_length = float(input('Please enter the flower beds length in metres: '))
    except ValueError:
        print('Please enter a valid NUMBER.')
        return GetFlowerLength()

def GetFlowerWidth():
    try:
        flower_width= float(input('Please enter the flower beds width in metres: '))
    except ValueError:
        print('Please enter a valid NUMBER.')
        return GetFlowerWidth()

def CalculateGardenArea():
    garden_area = (garden_length * garden_width)
    print('The Area of the Garden is ' + str(garden_area))

def CalculateVegArea():
    veg_area = (veg_length * veg_width)
    print('The Area of the Vegetable Plot is ' + str(veg_area))

GetGardenLength()
GetGardenWidth()
GetVegPlotLength()
GetVegPlotWidth()
GetFlowerLength()
GetFlowerWidth()
CalculateGardenArea()
CalculateVegArea()

3 个答案:

答案 0 :(得分:1)

在Python中,分配给函数中的变量会使其始终在本地作用域。要解决此问题,您需要使用global关键字,如下所示:

def GetGardenLength():
    global garden_length
    try:
        garden_length = float(input('Please enter the gardens length in metres: '))
    except ValueError:
        print('Please enter a valid NUMBER.')
        return GetGardenLength()
    return garden_length

或者,由于您的函数已经返回一个值,只需使用返回值(不进行上述更改):

garden_length = GetGardenLength()

答案 1 :(得分:0)

函数GetFlowerLengthGetVegPlotWidthGetVegPlotLengthGetFlowerWidth不会在try语句中返回值。

您的代码应如下所示(重复其他功能):

def GetVegPlotLength():
    try:
        veg_length = float(input('Please enter the vegetable plots length in metres: '))
        return veg_length # <-- code missing
    except ValueError:
        print('Please enter a valid NUMBER.')
        return GetVegPlotLength()

答案 2 :(得分:0)

这里的问题是范围之一。 CalculateGardenArea无法访问GetGardenLengthGetGardenWidth中定义的garden_length和garden_width变量。玩这个代码来理解:

def addTwoPrint():
    a = 1
    b = 2
    print (a + b)

def addTwo():
    a = 1
    b = 2
    return (a + b)
addTwoPrint()

a = addTwo()
b = addTwo()

print (a + b)

您可以更新代码以最简单地通过编辑代码来反映这一点:

def CalculateGardenArea(garden_length, garden_width):
    garden_area = (garden_length * garden_width)
    print('The Area of the Garden is ' + str(garden_area))

gard_len = GetGardenLength()
gard_wid = GetGardenWidth()
CalculateGardenArea(gard_len, gard_wid)