Non-Programmer's Tutorial for Python 2.6/Count to 10

While loops

edit

Here we present our first control structure. Ordinarily, the computer starts with the first line and then goes down from there. However, control structures change the order of how the statements are executed and/or decide if a certain statement(s) will be run. Here's the source for a program that uses the while control structure:

a = 0
while a < 10:
    a = a + 1
    print (a)

And here is the extremely exciting output:

1
2
3
4
5
6
7
8
9
10

And you thought it couldn't get any worse after turning your computer into a five dollar calculator?

So what does the program do? First, it sees the line a = 0 which tells the computer to sets a to the value of zero. Then, it sees while a < 10: which tells the computer to check whether a < 10. The first time the computer sees this while statement, a is equal to zero, which means a is less than 10, so the computer proceeds to run the succeeding indented, or tabbed in, statements. After the last statement, print (a), within this while "loop" is run, the computer goes back up again to the while a < 10 to check the current value of a. In other words, as long as a is less than ten, the computer will run the tabbed in statements. With a = a + 1 repeatedly adding one to a, eventually the while loop makes a equal to ten, and makes the a < 10 no longer true. Reaching that point, the program will not run the indented lines any longer.

Always remember to put a colon ":" after the "while" statement!

Here is another example of the use of while:

a = 1
s = 0
print ('Enter Numbers to add to the sum.')
print ('Enter 0 to quit.')
while a != 0:
    print 'Current Sum:', s
    a = input('Number? ')
    s = s + a
print 'Total Sum =', round(s, 2)
Enter Numbers to add to the sum.
Enter 0 to quit.
Current Sum: 0
Number? 200
Current Sum: 200
Number? -15.25
Current Sum: 184.75
Number? -151.85
Current Sum: 32.9
Number? 10.00
Current Sum: 42.9
Number? 0
Total Sum = 42.9

Notice how print 'Total Sum =', s is only run at the end. The while statement only affects the lines that are indented with whitespace. The != means "does not equal" so "while a != 0:" means: "until a is zero, run the tabbed statements that follow."

Infinite loops

edit

Now that we have while loops, it is possible to have programs that run forever. An easy way to do this is to write a program like this:

while 1 == 1:
   print "Help, I'm stuck in a loop."

The "==" operator is used to test equality of the expressions on the two sides of the operator, just as "<" was used for "less than" before (you will get a complete list of all comparison operators in the next chapter).

This program will output Help, I'm stuck in a loop. until the heat death of the universe or until you stop it, because 1 will forever be equal to 1. The way to stop it is to hit the Control (or Ctrl) button and C (the letter) at the same time. This will kill the program. (Note: sometimes you will have to hit enter after the Control-C.)

Examples

edit

Fibonacci.py

# This program calculates the Fibonacci sequence
a = 0
b = 1
count = 0
max_count = 20
while count < max_count:
    count = count + 1
    # we need to keep track of a since we change it
    old_a = a
    old_b = b
    a = old_b
    b = old_a + old_b
    # Notice that the , at the end of a print statement keeps it
    # from switching to a new line
    print(old_a),

Output:

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181

Note the output on a single line by use of a comma at the end of the print statement.

Password.py

# Waits until a password has been entered.  Use Control-C to break out without
# the password

# Note that this must not be the password so that the 
# while loop runs at least once.
password = "no password"

# note that != means not equal
while password != "unicorn":
    password = raw_input("Password: ")
print "Welcome in"

Sample run:

Password: auo
Password: y22
Password: password
Password: open sesame
Password: unicorn
Welcome in

Exercises

edit

Write a program that asks the user for a Login Name and password. Then when they type "lock", they need to type in their name and password to unlock the program.

Solution

Write a program that asks the user for a Login Name and password. Then when they type "lock", they need to type in their name and password to unlock the program.

name = raw_input("What is your UserName: ")
password = raw_input("What is your Password: ")
print "To lock your computer type lock."
command = ""
input1 = ""
input2 = ""
while command != "lock":
    command = raw_input("What is your command: ")
while input1 != name:
    input1 = raw_input("What is your username: ")
while input2 != password:
    input2 = raw_input("What is your password: ")
print "Welcome back to your system!"

If you would like the program to run continuously, just add a while 1 == 1: loop around the whole thing. You will have to indent the rest of the program when you add this at the top of the code, but don't worry, you don't have to do it manually for each line! Just highlight everything you want to indent and click on "Indent" under "Format" in the top bar of the python window. Note that you can use empty strings like this: "".

Another way of doing this could be:

name = raw_input('Set name: ')
password = raw_input('Set password: ')
while 1 == 1:
    nameguess=passwordguess=key=""   # multiple assignment
    while (nameguess != name) or (passwordguess != password):
        nameguess = raw_input('Name? ')
        passwordguess = raw_input('Password? ')
    print "Welcome,", name, ". Type lock to lock."
    while key != "lock":
        key = raw_input("")

Notice the or in while (name != "user") or (password != "pass"):, which we haven't yet introduced. You can probably figure out how it works.

login = "john"
password = "tucker"
logged=2

while logged != 0:
    while login != "Phil":    
            login = raw_input("Login : ")
    while password != "McChicken":
            password = raw_input("Password: ")
    logged = 1

    print "Welcome!"
    print "To leave type lock "

    while logged == 1:
        leave = raw_input (">> ")
        if leave == "lock":
            logged = 0
print "Goodbye!!"

This method, although a bit more crude also works. Notice it uses the as of yet un-introduced if function.