Question: This code executes, however, an error message " NameError: name 'p' is not defined in lines 7 and 11 - I tried adding float( ) around everything - same error - any ideas ????

```
def computepay(hrs,rate):

    if 0 < hrs <=40:
        print (hrs * rate)
    elif hrs > 40:
        print (40 * rate + (hrs-40)*rate*1.5)
    return p   <********  editor claims not defined here

    hrs = float(input("Enter Hours:"))
rate = float(input("Enter Rate per Hour:"))
p = computepay(hrs,rate)  <********  editor claims not defined here
print ("Pay", p)

```

Answer: 
You try to return `p` in a function where p is not declared. I think you want to do this:

```
def computepay(hrs,rate):
    if 0 < hrs <=40:
        p = (hrs * rate)
    elif hrs > 40:
        p = (40 * rate + (hrs-40)*rate*1.5)
    print p
    return p 

```

PS. The line `hrs = float(input("Enter Hours:"))` has a wrong indentation. Remove all white spaces before it.
If you read your script from top to bottom:

```
def computepay(hrs,rate):

```

The interpreter uses this to define a local function with name `computepay`. It then ignores everything in the block:

```
if 0 < hrs <=40:
    print (hrs * rate)
elif hrs > 40:
    print (40 * rate + (hrs-40)*rate*1.5)
return p

```

Then it executes `input`, converts the result into a *float* object using `float`, and creates a name `rate` which points to the *float* object:

```
rate = float(input("Enter Rate per Hour:"))

```

Then it executes `computepay` which does its thing and tries to return `p`, however, the intepreter has not yet seen any definition of `p` in the local scope. Even if we said `global p` to tell the interpreter to look in the global scope, it has not yet created the [**`NAME`**](https://docs.python.org/2/reference/executionmodel.html#naming-and-binding) which points to any object. So you get a [**`NameError`**](https://docs.python.org/2/library/exceptions.html#exceptions.NameError):

```
p = computepay(hrs,rate)

```