Quiz 2 back, write answers in cs21/examples/quiz2.py
import
Libraries and modules are already-written python code you can use in your
programs. Some, like math
and random
, come with python, but still need
to be imported if you want to use them. Others, like graphics
, which we
will use next week, need to be downloaded from the web, then imported. We will
also learn later how to write our own modules. This is another example of
code reuse: why write code again if there is already a well-tested library
or module you can use?
To use any common math functions, like sqrt()
, sin()
, cos()
, or even
constants like pi
, you must first import the python math library:
>>> sqrt(16)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'sqrt' is not defined
>>> from math import *
>>> sqrt(16)
4.0
Side Note: another way to import modules is just import math
. If you do that,
then you need to call any function in the math
module with math.
in front
of the function:
>>> import math
>>> sqrt(16)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'sqrt' is not defined
>>> math.sqrt(16)
4.0
You can import modules either way. In this class, we will probably always use
the from math import *
syntax. If you go out in the real world and write
real programs, using import math
is probably better...
Random numbers and picking things randomly (like from a list) can make our
programs more interesting. Python has a library of functions dealing with random
numbers and random choices. Two functions we often use are randrange()
and choice()
.
Here are examples of each:
>>> from random import *
>>> randrange(1,11)
2
>>> randrange(1,11)
2
>>> randrange(1,11)
1
>>> randrange(1,11)
10
>>> randrange(1,11)
3
>>> names = ["jeff","carlo","zach","charlotte","lauri","andy"]
>>> choice(names)
'lauri'
>>> choice(names)
'zach'
>>> choice(names)
'carlo'
randrange()
is similar to range()
, except it just chooses one number from
the range of values. choice()
picks randomly from a list or a string.
Here is a simple example that simulates flipping a 'coin':
>>> coin = ["heads","tails"]
>>> choice(coin)
'heads'
>>> choice(coin)
'tails'
>>> choice(coin)
'tails'
while
) loopsSuppose we wanted to keep flipping a coin, until we got 3-in-a-row.
$ python flip5heads.py
1. tails
2. tails
3. heads
4. tails
5. heads
6. tails
7. heads
...
...
44. heads
45. tails
46. heads
47. heads
48. heads
49. heads
50. heads
That time it took 50 flips. If I ran it again, it might take 7, or 96, or who knows how many...
The point is, there is a loop in that program, but it is not a for
loop, because
we don't know ahead of time how many iterations are needed.
The syntax for the above loop is something like this:
inarow = 0
while inarow < 5:
flip coin
print results of flip
keep track of how many in a row (update inarow)
This says, as long as inarow
is less than 5, keep flipping the coin.
The official syntax for a while loop is:
while some_condition_is_true:
do this
and this
and this
So the indented code block, which can be 1 or any number of lines, is executed
if the condition is True
. Then we go back to the top of the loop and see if
the condition is still True
. If it is, execute the code block again. If not,
the loop is done.
$ python whileloopgame.py
.......... (10)
char (u/d): u
........... (11) level UP
char (u/d): u
............ (12) level UP
char (u/d): d
........... (11) level down
char (u/d): d
.......... (10) level down
char (u/d): d
......... ( 9) level down
char (u/d): d
........ ( 8) level down
char (u/d): d
....... ( 7) level down
char (u/d): pony
Please type u or d!
char (u/d): donkey
You can read...right?
char (u/d): d
...... ( 6) level down
The game starts at level 10. If the user enters u
, go up a level. If they
enter d
, go down a level. Keep going until they get to level zero (not a very
exciting game...I know!). And only accept u
and d
from the user. If you have
time, add random insults. :)