You are welcome to go through our tutorials but please keep in mind that as we rely on community PRs for maintainance they may be out of date.

# Playing with variables

In this tutorial we are going to look at variables, user input and decision making.

## Creating a variable

Python allows us to store data in something called variables so that we are able to use this data at a later point. To place an item in a variable we give it a name then set its value.

Now in the REPL type:

``````>>> year = 2016
``````

In this example you have now stored the value `2016` into the variable `year`. See what happens next when you type `year’ into the REPL. Does it show it back to you?

How about saving your age into a variable or your lucky number? Have a play around with storing numbers into variables.

## Storing numbers in variables

Now that you are familiar with the use of variables, we are able to combine variables with the maths operations we learnt in the previous tutorial.

Now in the REPL type the following:

``````>>> revenue = 1000
>>> costs = 200
>>> profit = revenue - costs
``````

Now type `profit` to see the results of this calculation.

Now work out the cost of running a codebar workshop if 60 people turned up and pizza cost £8 per 2 people?

Along with pizza, students and cost, what other variables can you think of that could go into this calculation?

## Storing text in variables

As well as numbers variables are able to store text, known in Python as strings.

Now in the REPL type:

``````>>> name = 'codebar'
>>> url = "codebar.io"
``````

Now type `print(name)` and `print(url)` to see these strings shown back to you. As you can see Python allows both single and double quotes to denote a string variable. Double quotes are required if there is going to be an apostrophe in the string.

For example:

``````message = "I'm a string"
``````

Sometimes you will need to use an apostrophe within a single quote, on occasions like this it is recommended to use “string escaping”. This would look like:

``````message ='I\'m a string'
``````

Try storing a string within a variable without quotes, see what happens? Numbers do not require quotation marks, whereas they are mandatory for storing strings.

Now store some strings in variables that contain apostrophes and some that do not.

## Types & casting

Python is what’s called a “typed language”. This is to say that there are multiple types of objects that you work with in Python, and they don’t all act the same way. The three types you’ve learnt so far are integers (`int`), floats (`float`), and strings (`str`). Integers are whole numbers, floats are numbers with a decimal point, and strings are any number of characters surrounded by either “” or ‘’. This is important to know because every Python programmer has tried to do this at least once in their career:

``````"7" + 8
``````

Go ahead and try this in your REPL, it explodes with a `TypeError`. You just tried to add a number to something that isn’t a number and Python doesn’t know how to do that. Additionally, the output of this may surprise you:

``````"7" * 8
``````

This tells Python to multiply a string by 8 so you get eight sevens rather than what you might expect. This is actually a very powerful feature of Python, but when you’re just starting out, it can be pretty confusing.

For now, all you really need to know is that if you have a string that you mean to treat like a number, you have to cast it that way. This is a string:

``````"7"
``````

While this is a number:

``````int("7")
``````

This is an integer:

``````7
``````

While this is a string:

``````str(7)
``````

Go ahead an experiment with `int()`, `float()`, and `str()`. You’ll need one of these for the final part of this tutorial.

## Storing user input in variables

Now we are going to look at capturing user input using the python input command. Let’s create a variable in which to store the user input.

Now type this into your REPL:

``````>>> lucky_number = input("What is your lucky number? ")
``````

Now in the REPL type:

``````>>> food = input("What is your favourite food? ")
``````

Now we are going to put your response into another variable.

Now try:

``````>>> my_name = input("What is your name? ")
>>> greeting = "Hello " + my_name
``````

Then type `greeting` into your REPL to receive your message.

## Decision making using variables

Now that we know how to use variables and know how to store data, let’s play around with decision making and changing prints based on your answer. In Python (and many other languages), one of the most common ways in which this is done is using an `if` statement. For example:

``````>>> number = 4
>>> if number > 3:
...     print("Bigger than three")
... elif number < 3:
...     print("Smaller than three")
``````

Here we can see that if a number we have passed into this decision making code is bigger than three, we will receive a message telling us so. There is a different message if the number is smaller than three.

Also, now that we are getting more in depth with Python, we should say that Python is very particular about indentation (i.e. the spaces at the start of a line of code). With Python, if any lines are not indented correctly the code will not run. If you are running into bugs, this is a good place to start.

In this final exercise we are going to ask you the number of coffees you have drunk today and then change the statement returned to you, depending on your answer.

Let’s create a variable called `coffee` and put your coffee cup total into it:

``````>>> coffee = input("How many cups of coffee have you consumed today? ")
``````

Now we’ll use some simple if/else logic to decide what to say about your drinking habits:

``````>>> if int(coffee) > 4:
...     print("You have a coffee problem")
... else:
...     print("You do not have a coffee problem")
``````

Note the use of `int()` here to cast `coffee` as an integer. Without it, Python wouldn’t know how to properly compare `coffee` to `4`. Try setting `coffee` to different numbers and then re-typing the if/else logic to see what comes out. Next you’ll learn about functions, so you’ll be able to do this without all the re-typing.