Variables and Assignment
Overview
Teaching: 15 min
Exercises: 10 minQuestions
How can I store data in programs?
Objectives
Write programs that assign scalar values to variables and perform calculations with those values.
Correctly trace value changes in programs that use scalar assignment.
Python is a programming Language
- Bash is another programming language, used for the shell
- Like Bash, python operates on the read-evaulate-print loop (REPL). When you enter an expression, python reads your code, evaulates and executes it, prints the output, and then loops back to the next line or block of code.
Python can be used as a simple calculator
- The usual mathematical operations are supported (we will go into more detail on this later)
- Two main kinds of number:
int
for integers, andfloat
for numbers with decimals. - Exponents use
**
In [1]: 1 + 3
Out[1]: 4
In [2]: 4 * 5
Out[2]: 20
In [3]: 1/2
Out[3]: 0.5
In [4]: 2**3
Out[4]: 8
- The usual order of operations are obeyed
In [5]: 6/2 + 3 * 5**2
Out[5]: 78.0
- You can also type arbitrary sequences of characters in quotes, called strings.
- You can perform operations on those strings
In [6]: 'hello'
Out[6]: 'hello'
In [7]: 'hello' + 'world'
Out[7]: 'helloworld'
In [8]: 3 * 'hello'
OUt[8]: 'hellohellohello'
- Operations are generally intuitive.
- Some do not work because they do not make sense (we will discuss this more here)
In [9]: 'hello' + 3
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-9-c9c9952ff2b4> in <module>
----> 1 'hello' + 3
TypeError: Can't convert 'int' object to str implicitly
- This is the first of many errors we will encounter in python.
- The last line of an error message is usually the most informative.
- We will look at error messages in detail later.
Use variables to store values.
- Variables are names for values.
- In Python the
=
symbol assigns the value on the right to the name on the left. - The variable is created when a value is assigned to it.
- Here, Python assigns an age to a variable
age
and a name in quotes to a variablefirst_name
.
In [1]: age = 42
In [2]: first_name = 'Ahmed'
- Variable names
- can only contain letters, digits, and underscore
_
(typically used to separate words in long variable names) - cannot start with a digit
- can only contain letters, digits, and underscore
- Variable names that start with underscores like
__alistairs_real_age
have a special meaning so we won’t do that until we understand the convention.
Use print
to display values in the midst of your script.
- Python has a built-in function called
print
that prints things as text. - Call the function (i.e., tell Python to run it) by using its name.
- Provide values to the function (i.e., the things to print) in parentheses.
- To add a string to the printout, wrap the string in single or double quotes.
- The values passed to the function are called arguments
In [3]: print(first_name, 'is', age, 'years old')
Ahmed is 42 years old
print
automatically puts a single space between items to separate them.- And wraps around to a new line at the end.
- Also note the lack of quotes around the strings.
Variables must be created before they are used.
- If a variable doesn’t exist yet, or if the name has been mis-spelled, Python reports an error. (Unlike some languages, which “guess” a default value.)
In [1]: last_name
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-1-e1aeda7b4fde> in <module>
----> 1 last_name
NameError: name 'last_name' is not defined
Variables can be used in calculations.
- We can use variables in calculations just as if they were values.
- Remember, we assigned the value
42
toage
a few lines ago.
- Remember, we assigned the value
age = age + 3
age
45
Use an index to get a single character from a string.
- The characters (individual letters, numbers, and so on) in a string are
ordered. For example, the string
'AB'
is not the same as'BA'
. Because of this ordering, we can treat the string as a list of characters. - Each position in the string (first, second, etc.) is given a number. This number is called an index or sometimes a subscript.
- Indices are numbered from 0.
- Use the position’s index in square brackets to get the character at that position.
atom_name = 'helium'
atom_name[0]
'h'
Use a slice to get a substring.
- A part of a string is called a substring. A substring can be as short as a single character.
- An item in a list is called an element. Whenever we treat a string as if it were a list, the string’s elements are its individual characters.
- A slice is a part of a string (or, more generally, any list-like thing).
- We take a slice by using
[start:stop]
, wherestart
is replaced with the index of the first element we want andstop
is replaced with the index of the element just after the last element we want. - Mathematically, you might say that a slice selects
[start:stop)
. - The difference between
stop
andstart
is the slice’s length. - Taking a slice does not change the contents of the original string. Instead, the slice is a copy of part of the original string.
atom_name = 'sodium'
atom_name[0:3]
'sod'
Use the built-in function len
to find the length of a string.
len('helium')
6
- Nested functions are evaluated from the inside out, like in mathematics.
Python is case-sensitive.
- Python thinks that upper- and lower-case letters are different,
so
Name
andname
are different variables. - There are conventions for using upper-case letters at the start of variable names so we will use lower-case letters for now.
Use meaningful variable names.
- Python doesn’t care what you call variables as long as they obey the rules (alphanumeric characters and the underscore).
flabadab = 42
ewr_422_yY = 'Ahmed'
print(ewr_422_yY, 'is', flabadab, 'years old')
- Use meaningful variable names to help other people understand what the program does.
- The most important “other person” is your future self.
Swapping Values
Fill the table showing the values of the variables in this program after each statement is executed.
# Command # Value of x # Value of y # Value of swap # x = 1.0 # y = 3.0 # swap = x # x = y # y = swap #
Solution
# Command # Value of x # Value of y # Value of swap # x = 1.0 # 1.0 not defined not defined y = 3.0 # 1.0 3.0 not defined swap = x # 1.0 3.0 1.0 x = y # 3.0 3.0 1.0 y = swap # 3.0 1.0 1.0
These three lines exchange the values in
x
andy
using theswap
variable for temporary storage. This is a fairly common programming idiom.
Predicting Values
What is the final value of
position
in the program below? (Try to predict the value without running the program, then check your prediction.)initial = 'left' position = initial initial = 'right'
Solution
'left'
The
initial
variable is assigned the value'left'
. In the second line, theposition
variable also receives the string value'left'
. In third line, theinitial
variable is given the value'right'
, but theposition
variable retains its string value of'left'
.
Challenge
If you assign
a = 123
, what happens if you try to get the second digit ofa
viaa[1]
?Solution
Numbers are not strings or sequences and Python will raise an error if you try to perform an index operation on a number. In the next lesson on types and type conversion we will learn more about types and how to convert between different types. If you want the Nth digit of a number you can convert it into a string using the
str
built-in function and then perform an index operation on that string.a = 123 a[1]
TypeError: 'int' object is not subscriptable
a = str(123) a[1]
'2'
Choosing a Name
Which is a better variable name,
m
,min
, orminutes
? Why? Hint: think about which code you would rather inherit from someone who is leaving the lab:
ts = m * 60 + s
tot_sec = min * 60 + sec
total_seconds = minutes * 60 + seconds
Solution
minutes
is better becausemin
might mean something like “minimum” (and actually is an existing built-in function in Python that we will cover later).
Slicing practice
What does the following program print?
atom_name = 'carbon' print('atom_name[1:3] is:', atom_name[1:3])
Solution
atom_name[1:3] is: ar
Slicing concepts
- What does
thing[low:high]
do?- What does
thing[low:]
(without a value after the colon) do?- What does
thing[:high]
(without a value before the colon) do?- What does
thing[:]
(just a colon) do?- What does
thing[number:some-negative-number]
do?- What happens when you choose a
high
value which is out of range? (i.e., tryatom_name[0:15]
)Solutions
thing[low:high]
returns a slice fromlow
to the value beforehigh
thing[low:]
returns a slice fromlow
all the way to the end ofthing
thing[:high]
returns a slice from the beginning ofthing
to the value beforehigh
thing[:]
returns all ofthing
thing[number:some-negative-number]
returns a slice fromnumber
tosome-negative-number
values from the end ofthing
- If a part of the slice is out of range, the operation does not fail.
atom_name[0:15]
gives the same result asatom_name[0:]
.
Key Points
Use variables to store values.
Values are displayed as output.
Use
Variables must be created before they are used.
Variables can be used in calculations.
Use an index to get a single character from a string.
Use a slice to get a substring.
Use the built-in function
len
to find the length of a string.Python is case-sensitive.
Use meaningful variable names.