Contents | Previous (1.1 Python) | Next (1.3 Numbers)

1.2 A First Program

This section discusses the creation of your first program, running the interpreter, and some basic debugging.

Running Python

Python programs always run inside an interpreter.

The interpreter is a “console-based” application that normally runs from a command shell.

python3
Python 3.6.1 (v3.6.1:69c0db5050, Mar 21 2017, 01:21:04)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

Expert programmers usually have no problem using the interpreter in this way, but it’s not so user-friendly for beginners. You may be using an environment that provides a different interface to Python. That’s fine, but learning how to run Python terminal is still a useful skill to know.

Interactive Mode

When you start Python, you get an interactive mode where you can experiment.

If you start typing statements, they will run immediately. There is no edit/compile/run/debug cycle.

>>> print('hello world')
hello world
>>> 37*42
1554
>>> for i in range(5):
...     print(i)
...
0
1
2
3
4
>>>

This so-called read-eval-print-loop (or REPL) is very useful for debugging and exploration.

STOP: If you can’t figure out how to interact with Python, stop what you’re doing and figure out how to do it. If you’re using an IDE, it might be hidden behind a menu option or other window. Many parts of this course assume that you can interact with the interpreter.

Let’s take a closer look at the elements of the REPL:

The ... prompt may or may not be shown depending on your environment. For this course, it is shown as blanks to make it easier to cut/paste code samples.

The underscore _ holds the last result.

>>> 37 * 42
1554
>>> _ * 2
3108
>>> _ + 50
3158
>>>

This is only true in the interactive mode. You never use _ in a program.

Creating programs

Programs are put in .py files.

# hello.py
print('hello world')

You can create these files with your favorite text editor.

Running Programs

To execute a program, run it in the terminal with the python command. For example, in command-line Unix:

bash % python hello.py
hello world
bash %

Or from the Windows shell:

C:\SomeFolder>hello.py
hello world

C:\SomeFolder>c:\python36\python hello.py
hello world

Note: On Windows, you may need to specify a full path to the Python interpreter such as c:\python36\python. However, if Python is installed in its usual way, you might be able to just type the name of the program such as hello.py.

A Sample Program

Let’s solve the following problem:

One morning, you go out and place a dollar bill on the sidewalk by the Sears tower in Chicago. Each day thereafter, you go out double the number of bills. How long does it take for the stack of bills to exceed the height of the tower?

Here’s a solution:

# sears.py
bill_thickness = 0.11 * 0.001 # Meters (0.11 mm)
sears_height = 442 # Height (meters)
num_bills = 1
day = 1

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
    day = day + 1
    num_bills = num_bills * 2

print('Number of days', day)
print('Number of bills', num_bills)
print('Final height', num_bills * bill_thickness)

When you run it, you get the following output:

bash % python3 sears.py
1 1 0.00011
2 2 0.00022
3 4 0.00044
4 8 0.00088
5 16 0.00176
6 32 0.00352
...
21 1048576 115.34336
22 2097152 230.68672
Number of days 23 
Number of bills 4194304 
Final height 461.37344

Using this program as a guide, you can learn a number of important core concepts about Python.

Statements

A python program is a sequence of statements:

a = 3 + 4
b = a * 2
print(b)

Each statement is terminated by a newline. Statements are executed one after the other until control reaches the end of the file.

Comments

Comments are text that will not be executed.

a = 3 + 4
# This is a comment
b = a * 2
print(b)

Comments are denoted by # and extend to the end of the line.

Variables

A variable is a name for a value. You can use letters (lower and upper-case) from a to z. As well as the character underscore _. Numbers can also be part of the name of a variable, except as the first character.

height = 442 # valid
_height = 442 # valid
height2 = 442 # valid
2height = 442 # invalid

Types

Variables do not need to be declared with the type of the value. The type is associated with the value on the right hand side, not name of the variable.

height = 442           # An integer
height = 442.0         # Floating point
height = 'Really tall' # A string

Python is dynamically typed. The perceived “type” of a variable might change as a program executes depending on the current value assigned to it.

Case Sensitivity

Python is case sensitive. Upper and lower-case letters are considered different letters. These are all different variables:

name = 'Jake'
Name = 'Elwood'
NAME = 'Guido'

Language statements are always lower-case.

while x < 0:   # OK
WHILE x < 0:   # ERROR

Looping

The while statement executes a loop.

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
    day = day + 1
    num_bills = num_bills * 2

print('Number of days', day)

The statements indented below the while will execute as long as the expression after the while is true.

Indentation

Indentation is used to denote groups of statements that go together. Consider the previous example:

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
    day = day + 1
    num_bills = num_bills * 2

print('Number of days', day)

Indentation groups the following statements together as the operations that repeat:

    print(day, num_bills, num_bills * bill_thickness)
    day = day + 1
    num_bills = num_bills * 2

Because the print() statement at the end is not indented, it does not belong to the loop. The empty line is just for readability. It does not affect the execution.

Indentation best practices

Python’s only requirement is that indentation within the same block be consistent. For example, this is an error:

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
        day = day + 1 # ERROR
    num_bills = num_bills * 2

Conditionals

The if statement is used to execute a conditional:

if a > b:
    print('Computer says no')
else:
    print('Computer says yes')

You can check for multiple conditions by adding extra checks using elif.

if a > b:
    print('Computer says no')
elif a == b:
    print('Computer says yes')
else:
    print('Computer says maybe')

Printing

The print function produces a single line of text with the values passed.

print('Hello world!') # Prints the text 'Hello world!'

You can use variables. The text printed will be the value of the variable, not the name.

x = 100
print(x) # Prints the text '100'

If you pass more than one value to print they are separated by spaces.

name = 'Jake'
print('My name is', name) # Print the text 'My name is Jake'

print() always puts a newline at the end.

print('Hello')
print('My name is', 'Jake')

This prints:

Hello
My name is Jake

The extra newline can be suppressed:

print('Hello', end=' ')
print('My name is', 'Jake')

This code will now print:

Hello My name is Jake

User input

To read a line of typed user input, use the input() function:

name = input('Enter your name:')
print('Your name is', name)

input prints a prompt to the user and returns their response. This is useful for small programs, learning exercises or simple debugging. It is not widely used for real programs.

pass statement

Sometimes you need to specify an empty code block. The keyword pass is used for it.

if a > b:
    pass
else:
    print('Computer says false')

This is also called a “no-op” statement. It does nothing. It serves as a placeholder for statements, possibly to be added later.

Exercises

This is the first set of exercises where you need to create Python files and run them. From this point forward, it is assumed that you are editing files in the practical-python/Work/ directory. To help you locate the proper place, a number of empty starter files have been created with the appropriate filenames. Look for the file Work/bounce.py that’s used in the first exercise.

Exercise 1.5: The Bouncing Ball

A rubber ball is dropped from a height of 100 meters and each time it hits the ground, it bounces back up to 3/5 the height it fell. Write a program bounce.py that prints a table showing the height of the first 10 bounces.

Your program should make a table that looks something like this:

1 60.0
2 36.0
3 21.599999999999998
4 12.959999999999999
5 7.775999999999999
6 4.6655999999999995
7 2.7993599999999996
8 1.6796159999999998
9 1.0077695999999998
10 0.6046617599999998

Note: You can clean up the output a bit if you use the round() function. Try using it to round the output to 4 digits.

1 60.0
2 36.0
3 21.6
4 12.96
5 7.776
6 4.6656
7 2.7994
8 1.6796
9 1.0078
10 0.6047

Exercise 1.6: Debugging

The following code fragment contains code from the Sears tower problem. It also has a bug in it.

# sears.py

bill_thickness = 0.11 * 0.001    # Meters (0.11 mm)
sears_height   = 442             # Height (meters)
num_bills      = 1
day            = 1

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
    day = days + 1
    num_bills = num_bills * 2

print('Number of days', day)
print('Number of bills', num_bills)
print('Final height', num_bills * bill_thickness)

Copy and paste the code that appears above in a new program called sears.py. When you run the code you will get an error message that causes the program to crash like this:

Traceback (most recent call last):
  File "sears.py", line 10, in <module>
    day = days + 1
NameError: name 'days' is not defined

Reading error messages is an important part of Python code. If your program crashes, the very last line of the traceback message is the actual reason why the the program crashed. Above that, you should see a fragment of source code and then an identifying filename and line number.

Contents | Previous (1.1 Python) | Next (1.3 Numbers)