время не определено, почему? - PullRequest
0 голосов
/ 17 ноября 2018

Я очень плохо знаком с Python. Пытаюсь делать упражнения из разных книг. Следующий код работал, пока я не разбил его на разделы для создания функций. Почему переменные больше не распознаются? Это часто случается со мной в этот момент.

def pay_param():
    while True:
        try:
            time = int(input('Enter Hours: '))
        except:
            print('please enter a number')
            continue
        break
    while True:
        try:
            wage = int(input('Enter Wage: '))
        except:
            print('please enter a number')
            continue
        break

def computepay():
    pay_param()
    ot = time - 40

    if time >= 41:
        pay = (40 * wage) + (1.5 * wage * ot)
    elif time < 41:
        pay = time * (wage)
    print(pay)

computepay()

Ответы [ 5 ]

0 голосов
/ 17 ноября 2018

Потому что Python не знает, что такое time, когда встречает это утверждение ot = time - 40 (аналогично, wage). Вы присвоили time в функции, и ее область действия остается локальной только для этой функции. Что вам нужно, это вернуться к функции вызывающей стороны.

def pay_param():
    while True:
        # ......
        break
    return time, wage

В computepay() вам необходимо получить возвращаемое значение следующим образом:

def computepay():
    time, wage = pay_param()
    ot = time - 40
    # Rest code as it is...
0 голосов
/ 17 ноября 2018

Проблема в том, что time и wage являются локальными переменными.Они не входят в область действия pay_param. Может быть, кратко прочитать .

Вы можете вернуть ввод, чтобы иметь доступ к значениям.Например:

def pay_param(prompt_message):
    while True:
        try:
            return int(input(prompt_message))
        except:
            print('please enter a number')
            continue

def computepay():

    time = pay_param('Enter Hours: ')
    wage = pay_param('Enter Wage: ')

    ot = time - 40

    if time >= 41:
        pay = (40 * wage) + (1.5 * wage * ot)
    elif time < 41:
        pay = time * (wage)
    print(pay)

computepay()
0 голосов
/ 17 ноября 2018

Проблема в том, что переменная времени определена в первой функции pay_param() и доступна только в пределах ее области (то есть вы не можете получить к ней доступ в другой функции).Я предлагаю вам вернуть переменные заработной платы и времени.

0 голосов
/ 17 ноября 2018

Вы хотите прочитать о переменных областях . Поскольку ваша переменная 'time' используется внутри функции, она не может быть доступна вне функции. Это local variable в рамках функции.

0 голосов
/ 17 ноября 2018

добавить возвращаемое значение к pay_param

return time, wage

, и вы можете получить значения:

time, wage = pay_param()
...