Doug Cheffman
Doug Cheffman

Reputation: 3

Cannot get value to return

I'm trying to get the ticket to display correctly and every time it just displays '$1'. Am I not returning the value correctly? I can't figure this out.

from random import randrange


def main():
    exceeded_speed = 1
    ticket_cost = '$1'
    speed_limit = 50
    vehicle_speed = 1

    get_limit(speed_limit)

    get_speed(vehicle_speed, speed_limit)
    
    ticket_cost = ticket_calculator(speed_limit, vehicle_speed, exceeded_speed, ticket_cost)

    print('Exceeded speed limit by', ticket_cost, 'fine.')


def get_limit(limit):
        limit = int(input('Please Enter the speed limit: '))
        while limit >= 70 or limit <= 20:
            print('ERROR: Speed limit must be between 20 and 70')
            limit = int(input('Please Enter the speed limit: '))
    
        return limit


def get_speed(speed, limit):
    speed = int(input("Please enter the vehicle speed: "))
    while speed >= 200 or speed <= limit:
        print('ERROR: Vehicle speed must be between 71 and 199')
        speed = int(input("Please enter the vehicle speed: "))
    return speed, limit


def ticket_calculator(limit, speed, exceeded, cost):
    exceeded = speed - limit

    if exceeded in range (1,11):
        cost = '1-10 MPH. $50'
        exceeded = ''
    elif exceeded in range (11,16):
        cost = '11-15 MPH. $75'
    elif exceeded in range (16,21):
        cost = '16-20 MPH. $150'
    elif exceeded >= 21:
        cost = '21+ MPH. $300' 

    return cost

main()

Upvotes: 0

Views: 62

Answers (1)

Tim Roberts
Tim Roberts

Reputation: 54645

From your code, you are thinking that this:

def get_limit(limit):
    ...
    return limit

will return the value in the parameter that was passed. That's not true. Arguments always go IN. What you need is:

speed_limit = get_limit()
vehicle_speed = get_speed(speed_limit)

And then modify the function headers accordingly:

def get_limit():
    ...
def get_speed(limit):
    ...

Followup

You had get_speed returning a tuple. It only needs to return the vehicle speed. This works:

def main():
    speed_limit = get_limit()
    vehicle_speed = get_speed(speed_limit)
    ticket_cost = ticket_calculator(speed_limit, vehicle_speed)
    print('Exceeded speed limit by', ticket_cost, 'fine.')

def get_limit():
        limit = int(input('Please Enter the speed limit: '))
        while limit >= 70 or limit <= 20:
            print('ERROR: Speed limit must be between 20 and 70')
            limit = int(input('Please Enter the speed limit: '))
        return limit

def get_speed(limit):
    speed = int(input("Please enter the vehicle speed: "))
    while speed >= 200 or speed <= limit:
        print('ERROR: Vehicle speed must be between 71 and 199')
        speed = int(input("Please enter the vehicle speed: "))
    return speed

def ticket_calculator(limit, speed):
    exceeded = speed - limit

    if exceeded in range (1,11):
        cost = '1-10 MPH. $50'
        exceeded = ''
    elif exceeded in range (11,16):
        cost = '11-15 MPH. $75'
    elif exceeded in range (16,21):
        cost = '16-20 MPH. $150'
    elif exceeded >= 21:
        cost = '21+ MPH. $300' 

    return cost

main()

Simpler is:

def ticket_calculator(limit, speed):
    exceeded = speed - limit

    if exceeded >= 21:
        cost = '21+ MPH. $300' 
    elif exceeded >= 16:
        cost = '16-20 MPH. $150'
    elif exceeded >= 11:
        cost = '11-15 MPH. $75'
    elif exceeded >= 1:
        cost = '1-10 MPH. $50'
    else:
        cost = "N/A"

    return cost

Output:

C:\tmp>python x.py
Please Enter the speed limit: 50
Please enter the vehicle speed: 150
Exceeded speed limit by 21+ MPH. $300 fine.

Upvotes: 1

Related Questions