Learning Python 3 with the Linkbot/Using Modules
Here's this chapter's typing exercise (name it cal.py (import
actually looks for a file named calendar.py and reads it in. If the file is named calendar.py and it sees a "import calendar" it tries to read in itself which works poorly at best.)):
import calendar
year = int(input("Type in the year number: "))
calendar.prcal(year)
And here is part of the output I got:
Type in the year number: 2001 2001 January February March Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 1 2 3 4 1 2 3 4 8 9 10 11 12 13 14 5 6 7 8 9 10 11 5 6 7 8 9 10 11 15 16 17 18 19 20 21 12 13 14 15 16 17 18 12 13 14 15 16 17 18 22 23 24 25 26 27 28 19 20 21 22 23 24 25 19 20 21 22 23 24 25 29 30 31 26 27 28 26 27 28 29 30 31
(I skipped some of the output, but I think you get the idea.) So what does the program do? The first line import calendar
uses a new command import
. The command import
loads a module (in this case the calendar
module). To see the commands available in the standard modules either look in the library reference for python (if you downloaded it) or go to http://docs.python.org/library/. If you look at the documentation for the calendar module, it lists a function called prcal
that prints a calendar for a year. The line calendar.prcal(year)
uses this function. In summary to use a module import
it and then use module_name.function
for functions in the module. Another way to write the program is:
from calendar import prcal
year = int(input("Type in the year number: "))
prcal(year)
This version imports a specific function from a module. Here is another program that uses the Python Library (name it something like clock.py) (press Ctrl and the 'c' key at the same time to terminate the program):
from time import time, ctime
prev_time = ""
while True:
the_time = ctime(time())
if prev_time != the_time:
print("The time is:", ctime(time()))
prev_time = the_time
With some output being:
The time is: Sun Aug 20 13:40:04 2000 The time is: Sun Aug 20 13:40:05 2000 The time is: Sun Aug 20 13:40:06 2000 The time is: Sun Aug 20 13:40:07 2000 Traceback (innermost last): File "clock.py", line 5, in ? the_time = ctime(time()) KeyboardInterrupt
The output is infinite of course so I canceled it (or the output at least continues until Ctrl+C is pressed). The program just does a infinite loop (True
is always true, so while True:
goes forever) and each time checks to see if the time has changed and prints it if it has. Notice how multiple names after the import statement are used in the line from time import time, ctime
.
The Python Library contains many useful functions. These functions give your programs more abilities and many of them can simplify programming in Python.
The following Barobo Linkbot program demonstrates multiple modules that are used to create some fun examples of playing with the Linkbot functionality. Comments have been added to the program to explain what the link is doing as you read. Once again the while True:
puts the program in an infinite loop that can be exited when Ctrl+C is pressed.
import barobo #imports the module with the Linkbot commands
import time #imports the module to use time.sleep
import random #imports a random integer generator
dongle = barobo.Dongle() #this block uses the 'barobo' module to connect the Linkbot
dongle.connect() #and the dongle that is plugged into the computer
robotID = input('Enter robot ID: ') #prompts user to enter Linkbot ID
robot = dongle.getLinkbot(robotID)
def callback(mask, buttons, data):
if buttons & 0x02:
robot.setLEDColor( #calls setLEDColor from 'barobo' module
random.randint(0, 255), #uses the 'random' integer generator from
random.randint(0, 255), #the random module to set colors
random.randint(0, 255)
)
robot.enableButtonCallback(callback)
while True:
time.sleep(1) #uses the 'time' module to call time.sleep command
Check out the range of colors and intensity the Linkbot is capable of generating with its built in RGB LED.
Exercises
[edit | edit source]Rewrite the high_low.py
program from section Decisions to use an random integer between 0 and 99 instead of the hard-coded 78. Use the Python documentation to find an appropriate module and function to do this.
Rewrite the high_low.py
program from section Decisions to use an random integer between 0 and 99 instead of the hard-coded 78. Use the Python documentation to find an appropriate module and function to do this.
from random import randint
number = randint(0, 99)
guess = -1
while guess != number:
guess = int(input ("Guess a number: "))
if guess > number:
print("Too high")
elif guess < number:
print("Too low")
print("Just right")