Функция не определена - PullRequest
0 голосов
/ 29 августа 2018
def winheight(height):

    try:
        height = int(raw_input('Enter the height of the window in metres: '))
    except ValueError:
        print 'Please enter an integer'
        winheight(height)

    winlength(length)

def winlength(length):

    try:
        length = int(raw_input('Enter the length of the window in metres: '))
    except ValueError:
        print 'Please enter an integer'
        winlength(length)

    pricing(height, length)

def pricing(height, length):

    height_length = height * length

    price = int(height_length) * 100

    total = int(price) + 50

    print int(total)

winheight(height)

Это мой код, я пытаюсь выполнить классное задание для компании по замене окон, за каждый квадратный метр это стоит 100 долларов + начальные 50 долларов

Однако всякий раз, когда я пытаюсь запустить этот код, я получаю сообщение об ошибке:

строка 31, в winheight (height) NameError: имя 'height' не определено

Мне нужно, чтобы высота и длина были определены глобально, чтобы я мог использовать их для окончательной стоимости, я не уверен, как решить эту проблему, любая помощь будет высоко ценится

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Ваш код должен выглядеть так:

def winheight(): #define window-height-getting function
    while True:
        try:
            height = int(raw_input("Enter the height of the window in metres: ")) #get user input for window height
            return height
        except ValueError: #catch improper inputs
            print "Please enter an integer"
def winlength(): #define window-length-getting function
    while True:
        try:
            length = int(raw_input("Enter the length of the window in metres: ")) #get user input for window length
            return length
        except ValueError: #catch improper inputs
            print "Please enter an integer"

def pricing(height, length): #define price-calculating function
    area = height * length #math to determine total price
    price = area * 100
    total = price + 50
    return total

user_height = winheight() #get window height from user
user_length = winlength() #get window length from user

total_price = pricing(user_height, user_length) #calculate total price by passing user window height and length to the pricing function

print "The total price is: $" + str(total_price) #print result
0 голосов
/ 29 августа 2018

height действительно не определено. Переменная height, которую вы определяете в своей функции, является переменной local . Он перестает существовать после завершения вызова функции. Вы можете либо вернуть его, либо использовать глобальный (а точнее, не использовать глобальный)

 def get_height():
     while True:
        try:      
          height = input()
        except ValueError:
          continue
        else:
          return height

и вызовите его из основного сценария с помощью height = get_height() (аналогично length) перед вызовом pricing(height, length).

Несколько других заметок:

  • чтобы повторить попытку input(), используйте цикл while вместо рекурсивного вызова функции (так как предыдущая функция остается открытой)
  • бессмысленно передавать переменную height и переназначать height = input. Значение, передаваемое в height, является копией, поэтому оригинал не изменяется.
...