Logic With Functions

We had performed some logical operations before , but now let us do the same inside a function . Let us create a function that returns a True boolean value if it finds the number( given as argument) to be even else it returns False.

def even_check(n):    if n%2==0:      return True    else:      return False    print(even_check(4))

output:
True

Let us do something more complex. In the example given below , we will be passing a list to our function and the function return a new list containing only the odd numbers.

def odd_numbers(my_list):    new_list = []    for x in my_list:      if x%2!=0:        new_list.append(x)      else:        continue    return new_list      print(odd_numbers([1,2,3,4,5,6,7,8,9,10]))   print(odd_numbers([x for x in range (500)]))

output:
[1, 3, 5, 7, 9]  [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113, 115, 117, 119, 121, 123, 125, 127, 129, 131, 133, 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 383, 385, 387, 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, 411, 413, 415, 417, 419, 421, 423, 425, 427, 429, 431, 433, 435, 437, 439, 441, 443, 445, 447, 449, 451, 453, 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 481, 483, 485, 487, 489, 491, 493, 495, 497, 499]

Note that once a return statement is executed , the interpreter exits the function and the rest of code inside the function will never get executed( unless the function is called again with appropriate conditions ).

In the code given below , we pass a list to a function and we want our function to return a True value if there is even a single even number inside the whole list and if there isn’t a single even number then return False.

First we will look at the incorrect way of doing this problem .

def even_numbers(my_list):    for x in my_list:      if x%2==0:        return True      else:        return False    print(even_numbers([1,2,3,4,5]))     

output:
False

Notice the output of the code . is it right? well , NO! because our list does contain even numbers so it should have returned True value instead. A number can either be even or odd. So out of the two conditions ,one of them will always be true. And because we have return statement inside each condition , our result will be solely based on the first element of the list. Python will never be able to iterate over to the next element because it exits the function ( because of the return statement ) . So that is why it returned False simply because the first element of the list was odd.

Let us look at the correct way of solving the above problem.

def even_numbers(my_list):    for x in my_list:      if x%2==0:        return True      else:        continue    return False      print(even_numbers([1,2,3,4,5]))    print(even_numbers([1,3,5,7,9]))  print(even_numbers([2,4,6,8]))

output:
True  False  True

Well now it is working as expected . All we had to do was to make sure that the else statement had no return statement. Instead have a return statement out of the loop so that if there were no even numbers inside the list , we’ll return False.