A few suggestions: * “only either can be used at a time not both” – nothing in the function enforces that at most one of these input parameters has been set. Something like this: if (cpl_id is not None) and (target_no is not None): raise ValueError("At most one of cpl_id and target_no should be supplied") would ensure that at most one of them can be specified by the user. * You have several lines of the form found_target = foo == bar I’d put some parentheses around the condition, because I think it makes it easier to read: found_target = (foo == bar) Later in the function you have two lines of the form found_target = True if foo == bar else False which can be reduced to the construction above. * You have one function that does both business logic (checking whether the plane is correct) and doing some work (printing to screen). You should really separate these two – this function should return True/False, and then the caller should handle printing an appropriate message. * This line: if qo == 'callsign' or qo == 'squawk': is a bit unwieldy because you have to add an extra `or` statement every time you add a new possibility for qo. Better to do something like: if qo in ['callsign', 'squawk']: which is easy to extend with more values. (Although it's not clear why you're doing this check at all, given that qo will always be `squawk` in the function as defined.) * There are no comments or docstrings. I don’t know anything about planes, so I just have to trust that the conditionals are correct. It would be good to provide some explanation of what this all means – for example, what’s a CPL ID, or what is the qo_ prefix for?