Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Returning a false statement in function

I have a function that is supposed to validate whether a relation is a function.

This is my function:

def isFunction(A,B,f):
    ky = [i for i,j in f] ##fetching the first element of f and placing it in ky
    for i in A:
        if ky.count(i) != 1: ##checks whether the all elements of A have a unique image in B
            return False
    for i in f:
        if i not in A:
            return False
    return True

These are the taken inputs:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

A = [1, 2, 3,]   ##change inputs according to the needs
B= [4,5]
f=[[1,4],[2,5],[3 ,4], [7, 4]]
print (isFunction(A,B,f))

I should be getting a False, which is correct but if I do another test case:

A = [1, 2, 3,]
B = [4, 5]
f = [[1,4], [2,5], [3,4]]
print('Returns: ', isFunction(A, B, f))

I also get a false statement now, but I should get a True statement instead.
What is the error, and what do I do to change my function?

>Solution :

The following modifications to your program result in what I suspect is the desired behavior

Option 1 iterate through ky instead of f in the second for loop:

def isFunction(A,B,f):
    ky = [i for i,j in f] ##fetching the first element of f and placing it in ky
    for i in A:
        if ky.count(i) != 1: ##checks whether the all elements of A have a unique image in B
            return False
    for i in ky:
        if i not in A:
            return False
    return True

Here’s an alternative approach

Option 2: take i to be the first element from each pair of f rather than the entire pair.

def isFunction(A,B,f):
    ky = [i for i,j in f] ##fetching the first element of f and placing it in ky
    for i in A:
        if ky.count(i) != 1: ##checks whether the all elements of A have a unique image in B
            return False
    for i,_ in f:
        if i not in A:
            return False
    return True

Technically, both of these are flawed approaches in that they allow for functions whose domain consists only of a subset of A. For example, we get an incorrect "true" for the case of

A = [1,2]
B = [1,2]
f = [(1,1)]

Also, you seem to assume that pairs within f are distinct, i.e. each pair (i,j) can appear at most once in the "function" f.

Here’s the approach that I would take. This assumes that the domain must consist of the entire set A and that pairs within f are distinct.

def isFunction(A,B,f):
    inputs = [i for i,_ in f]
    in_set = set(inputs)
    return in_set == set(A) and\
           len(in_set) == len(inputs)

The condition in_set == set(A) returns True iff the set of inputs is equal to the entirety of the domain A, and the condition len(in_set) == len(inputs) returns True iff each input i appears only once with a pair (i,j) from f.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading