2016-11-07 3 views
-2

Я просто пытаюсь выполнить первый расчет, прежде чем я сделаю все остальное. Но каждый раз, когда он продолжает возвращаться 0. Я сам пробовал несколько решений, но не могу найти ничего, что сработает.Мои функции, выполняющие мои вычисления, возвращают 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() 

ответ

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() 
0

Функции GetFlowerLength, GetVegPlotWidth, GetVegPlotLength и GetFlowerWidth не возвращают значение внутри оператора 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() 
+1

Просто, чтобы вы знаете, встроенные комментарии в Python использует '#' not '//' :) –

+1

@leaf мой плохой. Проблемы с переключением JS на Python :) – leo7r

0

Проблема здесь одна из области видимости. CalculateGardenArea не имеет доступа к переменным garden_length и garden_width, которые были определены в GetGardenLength и GetGardenWidth. Поиграйте с этим кодом, чтобы понять, что:

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) 

 Смежные вопросы

  • Нет связанных вопросов^_^