Showing posts with label functions. Show all posts
Showing posts with label functions. Show all posts

Friday, April 25, 2014

Exercise 12: List Ends

Exercise

Write a program that takes a list of numbers (for example, a = [5, 10, 15, 20, 25]) and makes a new list of only the first and last elements of the given list. For practice, write this code inside a function.

Concepts to practice

  • Lists and properties of lists
  • List comprehensions (maybe)
  • Functions

Happy coding!

Forgot how to submit exercises?

Thursday, April 24, 2014

SOLUTION Exercise 11: Check Primality and Functions

Exercise

Ask the user for a number and determine whether the number is prime or not. (For those who have forgotten, a prime number is a number that has no divisors.). You can (and should!) use your answer to Exercise 4 to help you.

Sample solution

There are many ways of solving this problem, so here are a sample solutions:
The first, one possibility for using functions:
And this one is a different breakdown of functions to solve the problem. The strings between three ''' marks are comments in the code that describe what each function does.

And here is a solution without using functions. It is also a correct solution that accomplishes the given task, just without the use of functions.

Wednesday, April 16, 2014

Exercise 11: Check Primality and Functions

Exercise

Ask the user for a number and determine whether the number is prime or not. (For those who have forgotten, a prime number is a number that has no divisors.). You can (and should!) use your answer to Exercise 4 to help you. Take this opportunity to practice using functions, described below.

Discussion

Concepts for this week:
  • Functions
  • Reusable functions
  • Default arguments

Functions


One of the tools programming gives us is the ability to break down problems into easier (or perhaps previously solved) or reusable subproblems. It is good practice to have a function have a single purpose, and the name of that function should hint at it's purpose in some way.
Most programming languages have this idea of a function, subroutine, or subprogram. In Python, a function is a programming construct that allows exactly that.

Let's look at a simple example:
def get_integer():
    return int(input("Give me a number: "))
In this small example, we used the same code that asks a user for input as a tabbed line underneath this def statement. The def means that everything tabbed underneath is a function. The name get_integer() is just a name that I (the programmer) made up. If I just include this code inside a Python file and run it, nothing will happen - all I have done so far is wrapped my code inside of a function; I never told my program to actually RUN my function.
def get_integer():
    return int(input("Give me a number: "))

age = get_integer()
school_year = get_integer()
if age > 15:
    print("You are over the age of 15")
print("You are in grade " + str(school_year))
What I have done here is called the function (told it to run) by writing age = get_integer(). When this line of code runs, what happens is the program will execute (run) the function by asking me for a number, then returning it (giving it back to me) by saving it inside the variable age. Now when I want to ask the user for another number (this time representing the school year), I do the same thing with the variable school_year.

Reusable functions


This is all well and good, but I can make my function do much more for me. Right now, my function will always ask the user for a number by printing the string "Give me a number: ". What if I want to print a different string every time I ask the user for a number, but otherwise use the same idea for the function? In other words, I want a variable parameter in my function that changes every time I call the function based on something I (the programmer) want to be different.

I can do this by passing (giving) my function a variable. Like this:
def get_integer(help_text):
    return int(input(help_text))
Now what I can do when I call the function is something like this:
def get_integer(help_text):
    return int(input(help_text))

age = get_integer("Tell me your age: ")
school_year = get_integer("What grade are you in? ")
if age > 15:
    print("You are over the age of 15")
print("You are in grade " + str(school_year))
Now it is easier for a user to use the program, because the help text is different.
These variables you pass to functions are called variables, parameters, or arguments.

Default arguments


In the example above, once I have added an argument to my function, I always have to give an argument when I call the function. I can't forget to give the get_integer() function from above a string to print to the screen. In some cases, I want there to be a "default" behavior for my function that happens when I create an argument for it but don't give it any.

In the example above, if I don't give a custom string (which may be 95% of the time I use this function), I just want the input() line to say "Give me a number: " and I want to save myself the trouble of writing this every single time I call the function. So what I can do is give my function default arguments. Like so:
def get_integer(help_text="Give me a number: "):
    return int(input(help_text))
What happens now is I can use the function in two ways: by giving it an argument and by NOT giving it an argument.
def get_integer(help_text):
    return int(input(help_text))

age = get_integer("Tell me your age: ")
school_year = get_integer()
if age > 15:
    print("You are over the age of 15")
print("You are in grade " + str(school_year))
The first time I call the function, it will print "Tell me your age: ", but the second time, it will print "Give me a number: ", because I did not give it a string and it will execute the default behavior.

Recap


What a function does is wrap a piece of code that we want to reuse, labels it, and allows us to use it again relatively easily. You can add variables to the functions to make your code even MORE reusable, and you can add default arguments to these variables.

Functions are a bit strange to deal with at first, but once you master them, they will be your savior in programming. Besides, the whole point of learning programming is abstraction, problem solving, breaking down problems, and that's exactly what functions are all about.

Happy coding!

Forgot how to submit exercises?