Difference between revisions of "CSC111 Lab 2 2015"

From dftwiki3
Jump to: navigation, search
(Created page with "--~~~~ ---- __TOC__ <bluebox> This lab deals with loops in python. Feel free to work in pairs, share insights and help your neighbors during the lab. This is true of all lab...")
 
 
(33 intermediate revisions by the same user not shown)
Line 10: Line 10:
  
  
=Printing programs from Linux=
+
=Definite for-loops=
 +
<br />
 +
==Loops that use the '''range()''' function==
 +
<br />
 +
* For this section of the lab, open IDLE and create the different program sections below in the Python shell window. 
 +
<br />
 +
::<source lang="python">
 +
>>> for n in range( 4 ):
 +
print( n )
  
If you want to print your programs directly from your account on Beowulf to the printer in FH243 (next door to the lab), you need to use the '''cprint''' command. Here is how you would print a file called '''programname.py'''.
+
>>> for n in range( 1, 4 ):
 +
print( n )
  
* Get the list of the printers
+
>>> for n in range( -1, 4 ):
+
print( n )
    cprint -l            ''(that's minus-ell)''
 
 
    print lp queue location
 
    ----- -------- --------
 
    1    mc104          McConnell 104               
 
    2    fh243          Ford Hall 243               
 
    3    eng_203        Engineering 203             
 
    4    eng_203_color  Engineering 203 Color       
 
 
 
* Note that the printer in FH243 is on the line starting with '''2'''
 
  
* Print to Printer #2
+
>>> for n in range( 5, 10 ):
 +
print( n )
  
  cprint -2 programname.py
+
>>> for n in range( 0, 10, 2 ):
 +
print( n )
  
:and your listing will available at the black and white printer in FH243.  Use different numbers to print to different printers, depending on which one is closest to you.
+
>>> for n in range( 1, 10, 2 ):
 +
print( n )
  
=Single for-loops=
+
>>> for n in range( 10, 0, -2 ):
 
+
print( n )
* For this section of the lab, open two ssh/secure shell windows, edit in one of them and execute in the other.
 
 
 
* Create a new program called '''lab2.py'''
 
 
 
  # lab2.py
 
 
 
  def main():
 
        for i in range( 3, 8 ):
 
                print i
 
 
   
 
   
+
</source>
    main()
+
<br />
 +
* Do you understand how the range() function works? 
 +
** If you give it only 1 number, it will generate a series of numbers starting at 0 and going up to that number, but not including it, in steps of 1.
 +
** If you give it 2 numbers, it will use the first one as the start, and the second at the stop, and will generate all the integers between the two, in steps of 1.  The stop number is never used.
 +
** IF you give it 3 numbers, the 3rd one is the step.  It can be positive or negative.
  
* Verify that you get the correct output:
+
<br />
 +
{| style="width:100%; background:silver"
 +
|-
 +
|
  
  <u>'''python lab2.py'''</u>
+
==Challenge #1: Range-Controlled Loops==
  3
+
|}
  4
+
[[Image:QuestionMark1.jpg|right|120px]]
  5
+
<br />
  6
+
Now, your turn:
  7
 
 
 
 
 
* Now, your turn!
 
 
 
;List of numbers, Version 2
 
: Modify your loop so that it does not use the ''range( )'' funciton (Hint: you have to list all the values)
 
  
 
; List of even numbers:  
 
; List of even numbers:  
: write a loop that prints all the even numbers between 4 and 20, 4, and 20 included (you can use range or list all the numbers).
+
: write a loop that prints all the even numbers between 4 and 20; 4, and 20 included.
  
 
;List of odd numbers:  
 
;List of odd numbers:  
 
:write a loop that prints all the odd numbers between -3 and 19, -3, and 19 included.
 
:write a loop that prints all the odd numbers between -3 and 19, -3, and 19 included.
  
;User-controlled loops (more difficult):  
+
;List odd numbers in reverse order:
:Write a new Python program that prints a series of numbers, after having asked the user where the series should start, and where it should end.  
+
: write a loop that prints all the odd numbers starting at 9 and going down to 1, included.
  
:Here is an example of how it should run (the user input is iunderlined):
+
<br />
+
==Definite For-Loops that use Lists==
      <U>'''Python userLoop.py'''</U>
+
<br />
 
+
* We can use explicit lists to generate similar outputs. For example, the output of the first two examples in the previous section  could have been generated by the following loops:
      I will print a list of numbers for you.
+
<br />
 
+
::<source lang="python">
      Where should I start? <u>'''3'''</u>
+
>>>for n in [0, 1, 2, 3]:
   
+
            print( n )
      What is the last number of the series? <u>'''10'''</u>
 
 
      3 4 5 6 7 8 9 10
 
 
 
:Go ahead and write it. What happens if you ask the program to count from -5 to 5? Does it work correctly?
 
 
 
:Does your program work if you ask your program to go from 1 to 1?
 
 
 
:Can you predict what will be printed if you ask your program to count from 10 to 1?
 
  
=Lists and Operations on Lists=
+
>>>for n in [1, 2, 3]:
 +
            print( n )
 +
</source>
 +
<br />
 +
<br />
 +
{| style="width:100%; background:silver"
 +
|-
 +
|
  
* Try the following Python statements in the Python shell (interactive mode).
+
==Challenge #2: List-Controlled Loops==
 
+
|}
      >>> students = [ "alice", "kate", "renee"]
+
[[Image:QuestionMark2.jpg|right|120px]]
   
+
<br />
      >>> students
+
Solve the 3 problems of Challenge 1 above, using lists instead of the '''range()''' function.
+
<br />
      >>> students.append( "monique" )
+
<br />
+
<br />
      >>> students
+
<br />
+
<br />
      >>> students = []
+
<br />
+
<br />
      >>> students
+
<br />
 
      >>> students = [ "alice", "jack" ] + [ "monique", "chris", "andrea" ]
 
 
      >>> students
 
 
 
      >>> students[ 0 ]
 
 
      >>> students[ 1 ]
 
 
      >>> students[ -1 ]
 
 
      >>> students[ -2 ]          ''(try to figure out how negative indices work)''
 
  
 +
<br />
 
=For-Loops ready for modification=
 
=For-Loops ready for modification=
 
+
<br />
 
* Create the following python program (we're not working in interactive mode at this point). Don't hesitate to copy and paste to go faster!
 
* Create the following python program (we're not working in interactive mode at this point). Don't hesitate to copy and paste to go faster!
 
+
::<source lang="python">
      # lab2seq.py
+
# lab2seq.py
      #  
+
#  
      # initialize the farm with animals
 
      farm = [ "dog", "cat", "horse" ]
 
 
   
 
   
      # print the contents of the farm
+
# print the contents of the farm
      for animal in farm:
+
for animal in [ "dog", "cat", "horse" ]:
        print animal
+
    print animal
 +
</source>
 +
<br />
  
:'''Farm''' and '''animal''' are variables. One contains a list, the other one contains a string.
+
*Add a '''pig''' to your list of animals, and make sure it gets listed by the program.
  
*Add a '''pig''' to your farm, and make sure it gets listed by the program.
 
  
* When you are done with the addition of the pig, observe another way for the program to do the same thing:
+
;Modification #1: Change the for-loop of your program so that it reads:
 
+
<br />
      # lab2seq2.py
+
<source lang="python">
      #
 
      farm = []              # create an empty farm
 
      farm.append( "dog" )  # add a dog to it
 
      farm.append( "cat" )  # then a cat
 
      farm.append( "horse" ) # then a horse
 
      farm.append( "pig" )  # and a pig
 
 
      # print the contents of the farm
 
      for animal in farm:
 
          print animal
 
 
 
;Modification #1:
 
:Edit this second program so that instead of always adding the same animals to the farm, it will get four names of animals from the user, and add them to the farm. It will then print the contents of the farm on the screen. (Hint: use raw_input)
 
 
 
;Modification #2: Change the for-loop of your program so that it reads:
 
 
       counter = 0
 
       counter = 0
       for animal in farm:
+
       for animal in [ "dog", "cat", "horse", "pig" ]:
           print counter, animal
+
           print( counter, animal )
 
           counter = counter + 1
 
           counter = counter + 1
         
+
</source>
 +
<br />
 
* Run the program. Observe its output. From this observation, modify the program so that its output now reads something like this (user input is in underlined):
 
* Run the program. Observe its output. From this observation, modify the program so that its output now reads something like this (user input is in underlined):
 
        python lab2seq3.py
 
 
   
 
   
        animal? <u>'''sheep'''</u>
+
         Your farm contains
        animal? <u>'''dog'''</u>
+
         animal # 1 : a sheep
        animal? <u>'''bear'''</u>
+
         animal # 2 : a dog
        animal? <u>'''mouse'''</u>
+
         animal # 3 : a bear
+
         animal # 4 : a mouse
         Your farm now contains
 
         animal #1 : a sheep
 
         animal #2 : a dog
 
         animal #3 : a bear
 
         animal #4 : a mouse
 
  
 
=Old MacDonald's Farm=
 
=Old MacDonald's Farm=
  
Old MacDonald's farm is a song (almost) all American kids learn at one point in their life. I certainly never heard it when I grew up in France, but I think most of you will be familiar with it.  
+
Old MacDonald's farm is a song most American kids learn at one point in their life. I certainly never heard it when I grew up in France, but I think most of you will be familiar with it.  
 
<center>
 
<center>
 
<videoflash>7_mol6B9z00</videoflash>
 
<videoflash>7_mol6B9z00</videoflash>
Line 184: Line 142:
  
 
Here's the beginning program which you have to modify:
 
Here's the beginning program which you have to modify:
 +
<br />
 +
::<source lang="python">   
 +
# display the names of the animals
 +
for animal in  [ "horse", "pig", "dog", "cat" ]:
 +
      print animal
 +
</source>
 +
<br />
  
    def main():
+
{| style="width:100%; background:silver"
        # start with four animals in the farm
+
|-
        farm = [ "horse", "pig", "dog", "cat" ]
+
|
   
+
 
        # display the names of the animals
+
==Challenge #3: Output Song Lyrics==
        for animal in farm:
+
|}
            print animal
+
[[Image:QuestionMark3.jpg|right|120px]]
+
<br />
    main()
 
 
==First modification==
 
  
* Modify this program so that the output looks like the lyrics of the song:
+
* Modify the program above so that it uses the loop, and outputs the lyrics of the song:
  
 
     Old MacDonald had a farm, E-I-E-I-O
 
     Old MacDonald had a farm, E-I-E-I-O
     And on his farm he had a horse, E-I-E-I-O
+
     And on his farm he had a horse E-I-E-I-O
     Here a horse, there a horse, everywhere a horse!
+
     Here a horse, there a horse, everywhere a horse !
 
      
 
      
 
     Old MacDonald had a farm, E-I-E-I-O
 
     Old MacDonald had a farm, E-I-E-I-O
     And on his farm he had a pig, E-I-E-I-O
+
     And on his farm he had a pig E-I-E-I-O
     Here a pig, there a pig, everywhere a pig!
+
     Here a pig, there a pig, everywhere a pig !
 
      
 
      
 
     Old MacDonald had a farm, E-I-E-I-O
 
     Old MacDonald had a farm, E-I-E-I-O
     And on his farm he had a dog, E-I-E-I-O
+
     And on his farm he had a dog E-I-E-I-O
     Here a dog, there a dog, everywhere a dog!
+
     Here a dog, there a dog, everywhere a dog !
 
      
 
      
 
     Old MacDonald had a farm, E-I-E-I-O
 
     Old MacDonald had a farm, E-I-E-I-O
     And on his farm he had a cat, E-I-E-I-O
+
     And on his farm he had a cat E-I-E-I-O
     Here a cat, there a cat, everywhere a cat!
+
     Here a cat, there a cat, everywhere a cat !
  
 
(don't worry if you get extra spaces in your output)
 
(don't worry if you get extra spaces in your output)
  
==Second modification==
+
=The '''input()''' Function=
 +
<br />
 +
Try the following statements in the console window.  Again, some of these might generate errors.  It is important for you to understand why these errors occur.
 +
 
 +
<br />
 +
<code><pre>
 +
>>> firstName = input( "Enter your first name: " )
 +
>>> firstName
 +
 
 +
>>> lastName = input( "Enter your last name: " )
 +
>>> lastName
 +
 
 +
>>> print( firstName, lastName )
 +
 
 +
>>> x = input( "enter a number: " )
 +
>>> x
 +
 
 +
>>> x + 5
 +
 
 +
>>> x = input( "Enter a number: " )
 +
>>> x
 +
 
 +
>>> x = eval( answer )
 +
>>> x
 +
>>> x + 5
 +
 
 +
>>> y = eval(  "314.56789" )
 +
>>> y
 +
</pre></code>
 +
<br />
 +
 
 +
<br />
 +
{| style="width:100%; background:silver"
 +
|-
 +
|
 +
==Challenge #4: Gathering  student information==
 +
|}
 +
[[Image:QuestionMark4.jpg|right|120px]]
 +
<br />
 +
Write a python program that asks the user for her name, box number, 99-Id number, and phone number, and that outputs it back on the screen nicely formatted. 
 +
 
 +
Example (the information entered by the user is in boldface):
  
* Modify your program some more, and make it prompt the user for the names of four animals first, and then make it display the lyrics as shown above with the user's selected animals.
+
your first name? '''Allie'''
 +
your last name? '''Gator'''
 +
your box number? '''1234'''
 +
your phone number? '''413 456 7890'''
 +
your Smith Id? '''990123456'''
 +
 +
 +
Name:  Allie Gator (990123456)
 +
box #:  1234
 +
phone:  413 456 7890
  
==Hard problem of the day==
+
<br />
 +
<br />
 +
{| style="width:100%; background:silver"
 +
|-
 +
|
  
* This problem is a bit harder, and requires some thinking...
+
==Challenge #5:  Printing the student information it in a (half) box==
 +
|}
 +
[[Image:QuestionMark5.jpg|right|120px]]
 +
<br />
 +
* Same idea as with the previous challenge but after inputing the information from the user, the program outputs it in a half-box! 
 +
Example (user input in in boldface):
 +
<br />
 +
your first name?  '''Mickey'''
 +
your last name?    '''Mouse'''
 +
your box number?  '''1234'''
 +
your phone number? '''413 456 7890'''
 +
your Id number?    '''990111222'''
 +
 +
+---------------------------------------
 +
| Name:  Mickey Mouse ( 990111222 )
 +
| Box:    1234
 +
| Phone:  413 456 7890
 +
+---------------------------------------
  
* Write a program that
+
<br />
** asks the user for number between 0 and 20
+
* The length of the bars is unimportant.
** Assume the user enters 7.
 
** The program then prints 7 stars (*) on the line, followed by 13 exclamation marks (!)
 
** In general, the program prints a number of stars equal to the number entered by the user, and continues with exclamation marks such that the total number of stars plus exclamation marks is 20.  Always.
 
  
* Examples of how your program should work (user input underlined):
+
<br />
 +
<br />
 +
{| style="width:100%; background:silver"
 +
|-
 +
|
  
      How many stars? <u>'''10'''</u>
+
==Challenge #6: Temperature Converter==
      * * * * * * * * * * ! ! ! ! ! ! ! ! ! !
+
|}
 +
[[Image:QuestionMark8.jpg|right|120px]]
 +
<br />
 +
* Write a program that prompts the user for a temperature expressed in Fahrenheit, and outputs the equivalent temperature in Celsius.
 +
 
 +
* The equation for temperature conversion is:  Celsius  = ( Fahrenheit -32 ) * 5 / 9
 +
 
 +
* Here is an example of the way your program will work (the user input is in boldface):
 +
 
 +
Please enter temperature in Fahrenheit: '''12'''
 +
 
 +
12 degrees Fahrenheit is -11.11111111111111 Celsius.
 
   
 
   
      How many stars? <u>'''20'''</u>
+
 
      * * * * * * * * * * * * * * * * * * * *
+
:(We will not worry about the extra length of the Celsius number for this lab.)
 
   
 
   
      How many stars? <u>'''1'''</u>
+
<br />
      * ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
+
 
 +
<br />
 +
=Moodle Submission=
 +
<br />
 +
* Write a program that prompts the user for 2 integer numbers representing a low and a high temperature, expressed in Farhenheit, and outputs all the temperatures in between, with their equivalent Celsius.
 +
 
 +
* Below is an example of interaction between the user and her program:
 +
<br />
 +
:::<source lang="text">
 +
Enter low temperature: 20
 +
Enter high temperature: 40
 +
 
 +
Fahrenheit Celsius
 +
20        -6.66666666667
 +
21        -6.11111111111
 +
22        -5.55555555556
 +
23        -5.0
 +
24        -4.44444444444
 +
25        -3.88888888889
 +
26        -3.33333333333
 +
27        -2.77777777778
 +
28        -2.22222222222
 +
29        -1.66666666667
 +
30        -1.11111111111
 +
31        -0.555555555556
 +
32        0.0
 +
33        0.555555555556
 +
34        1.11111111111
 +
35        1.66666666667
 +
36        2.22222222222
 +
37        2.77777777778
 +
38        3.33333333333
 +
39        3.88888888889
 +
40        4.44444444444
 +
</source>
 +
<br />
 +
* Note: The space between the temperatures printed on the same line can be created by a simple string of 7 spaces.
 +
* Submit your program to Moodle, in the Lab 2 section.
 +
 
 +
<br />
 +
<br />
 +
<showafterdate after="20150207 00:00" before="20150601 00:00">
 +
<br />
 +
=Solution Programs=
 +
<br />
 +
<source lang="python">
 +
# lab2.py
 +
# D. Thiebaut
 +
# The program prompts the user for 2 integer temperatures
 +
# and outputs a table of all temperatures ranging between the
 +
# two values, last value included.
 +
temp1 = eval( input( "Enter low temperature: " ) )
 +
temp2 = eval( input( "Enter high temperature: " ) )
 +
print()
 +
print( "Fahrenheit Celsius" )
 +
for temp in range( temp1, temp2+1 ):
 +
    print( temp, "      ", (temp-32)*5/9 )
 +
 
 +
 
 +
</source>
 +
<br />
 +
</showafterdate>
 +
<br />
 +
<onlydft>
 +
=Moodle VPL Module=
 +
<br />
 +
==vpl_run.sh==
 +
<br />
 +
<source lang="bash">
 +
#! /bin/bash
 +
 
 +
cat > vpl_execution <<EOF
 +
#! /bin/bash
 +
 
 +
prog=lab2.py
 +
python=/usr/local/bin/python3.4
 +
 
 +
\$python \$prog
 +
 
 +
EOF
 +
 
 +
chmod +x vpl_execution
 +
 
 +
</source>
 +
<br />
 +
==vpl_evaluate.sh==
 +
<source lang="bash">
 +
#! /bin/bash
 +
# D. Thiebaut
 +
 
 +
cat > vpl_execution <<EEOOFF
 +
#! /bin/bash
 +
#set -x
 +
 +
# --- program tested (no extension) ---
 +
prog=lab2.py
 +
solutionProg=lab2sol.py
 +
 
 +
# --- Python ----
 +
#python=/usr/local/bin/python3.4
 +
python=/usr/bin/python3.3
 +
 
 +
# =================================================
 +
# Pick 2 random inputs to test program with
 +
TEMP1=\$RANDOM
 +
let "TEMP1 %= 30"
 +
let "TEMP2 = TEMP1 + 6"
 +
 
 +
#echo "TEMP1 = \$TEMP1"
 +
#echo "TEMP2 = \$TEMP2"
 +
 
 +
echo \$TEMP1 > input
 +
echo \$TEMP2 >> input
 +
 
 +
# =================================================
 +
# generate user output and exptect output
 +
\$python \$prog < input > userOut
 +
\$python \$solutionProg < input > expectedOut
 +
 
 +
 
 +
# =================================================
 +
# function that prints the difference between user and expected output
 +
incorrectOutput() {
 +
        echo "Comment :=>>- Your output is incorrect."
 +
        #--- display test file ---
 +
        echo "<|--"
 +
        echo "Your program tested with"
 +
        echo "temperatures ranging from"
 +
        echo "\$TEMP1 to \$TEMP2"
 +
        echo "--|>"
 +
 
 +
        echo "Comment :=>> ---------------"
 +
        echo "Comment :=>>- Your output:"
 +
        echo "Comment :=>> ---------------"
 +
        echo "<|--"
 +
        cat userOut
 +
        echo "--|>"
 +
        echo ""
 +
        echo "Comment :=>> ---------------"
 +
        echo "Comment :=>>- Expected output: "
 +
        echo "Comment :=>> ---------------"
 +
        echo "<|--"
 +
        cat expectedOut
 +
        echo "--|>"
 +
 
 +
}
 +
 
 +
# function that tells user of program crash or infinite loop, and what the test was.
 +
timeoutOutput() {
 +
    if [ "\$1" ]; then  # if there's a parameter
 +
        i=\$1
 +
        echo "Comment :=>>- Your program has timed out or crashed."
 +
 
 +
        #--- display test file ---
 +
        echo "Comment :=>>- Your program tested with:"
 +
        echo "<|--"
 +
        cat data\${i}.txt
 +
        echo "--|>"
 +
    fi
 +
}
 +
 
 +
# function that removes non-digits, extra spaces, and extra blank lines from text file.
 +
cleanup () {
 +
    if [ "\$1" ]; then  # if there's a parameter
 
          
 
          
 +
        #--- remove non numbers and non minus---
 +
        cat \$1 | sed 's/[^0-9*.0-9\ -]*//g' > dummy.out
 +
        mv dummy.out \$1
 +
 +
        #--- remove multiple spaces ---
 +
        cat \$1 | sed 's/  */ /g' > dummy.out
 +
        mv dummy.out \$1
 +
 +
        #--- remove blank lines ---
 +
        cat \$1 | sed '/^\s*\$/d' > dummy.out
 +
        mv dummy.out \$1
 +
  fi
 +
}
 +
 +
cleanup userOut
 +
cleanup expectedOut
 +
 +
#echo "userOut = "
 +
#cat userOut
 +
 +
#echo "expectedOut = "
 +
#cat expectedOut
 +
 +
#--- compute difference ---
 +
diff -y -w --ignore-all-space userOut expectedOut > diff.out
 +
 +
#--- reject if different ---
 +
if ((\$? > 0)); then
 +
      incorrectOutput
 +
      grade=70
 +
      # --------------------- REWARD IF CORRECT OUTPUT -----------------
 +
else
 +
      #--- good output ---
 +
      echo "Comment :=>>- Congrats, your output is correct."
 +
      echo "Comment :=>> --------------------------------."
 +
      echo "<|--"                                                                           
 +
      echo "Your program tested with"                                                       
 +
      echo "temperatures ranging from"                                                     
 +
      echo "\$TEMP1 to \$TEMP2"                                                             
 +
      echo ""
 +
      cat userOut
 +
      echo "--|>"
 +
      grade=100
 +
fi
 +
 +
# =================================================
 +
# Report grade
 +
if (( grade > 100 )); then
 +
  grade=100
 +
fi
 +
echo "Grade :=>> \$grade"
 +
 +
 +
exit
 +
 +
 +
 +
 +
EEOOFF
 +
 +
chmod +x vpl_execution
  
 +
</source>
 +
<br />
 +
==lab2sol.py==
 +
<br />
 +
<source lang="python">
 +
def prompt2():
 +
    temp1 = eval( input( "Enter low temperature: " ) )
 +
    temp2 = eval( input( "Enter high temperature: " ) )
 +
    print()
 +
    print( "Fahrenheit Celsius" )
 +
    for temp in range( temp1, temp2+1 ):
 +
        print( temp, "      ", (temp-32)*5/9 )
  
  
 +
prompt2()
  
 +
</source>
 +
<br />
 +
</onlydft>
 
[[Category:CSC111]][[Category:Labs]]
 
[[Category:CSC111]][[Category:Labs]]

Latest revision as of 20:18, 3 February 2015

--D. Thiebaut (talk) 17:01, 3 February 2015 (EST)


This lab deals with loops in python. Feel free to work in pairs, share insights and help your neighbors during the lab. This is true of all labs. While some homework assignments will have to be done as individual work, the labs are a good time to cooperate with neighbors or work in pairs.


Definite for-loops


Loops that use the range() function


  • For this section of the lab, open IDLE and create the different program sections below in the Python shell window.


>>> for n in range( 4 ):
	print( n )

>>> for n in range( 1, 4 ):
	print( n )

>>> for n in range( -1, 4 ):
	print( n )

>>> for n in range( 5, 10 ):
	print( n )

>>> for n in range( 0, 10, 2 ):
	print( n )

>>> for n in range( 1, 10, 2 ):
	print( n )

>>> for n in range( 10, 0, -2 ):
	print( n )


  • Do you understand how the range() function works?
    • If you give it only 1 number, it will generate a series of numbers starting at 0 and going up to that number, but not including it, in steps of 1.
    • If you give it 2 numbers, it will use the first one as the start, and the second at the stop, and will generate all the integers between the two, in steps of 1. The stop number is never used.
    • IF you give it 3 numbers, the 3rd one is the step. It can be positive or negative.


Challenge #1: Range-Controlled Loops

QuestionMark1.jpg


Now, your turn:

List of even numbers
write a loop that prints all the even numbers between 4 and 20; 4, and 20 included.
List of odd numbers
write a loop that prints all the odd numbers between -3 and 19, -3, and 19 included.
List odd numbers in reverse order
write a loop that prints all the odd numbers starting at 9 and going down to 1, included.


Definite For-Loops that use Lists


  • We can use explicit lists to generate similar outputs. For example, the output of the first two examples in the previous section could have been generated by the following loops:


>>>for n in [0, 1, 2, 3]:
            print( n )

>>>for n in [1, 2, 3]:
            print( n )



Challenge #2: List-Controlled Loops

QuestionMark2.jpg


Solve the 3 problems of Challenge 1 above, using lists instead of the range() function.








For-Loops ready for modification


  • Create the following python program (we're not working in interactive mode at this point). Don't hesitate to copy and paste to go faster!
# lab2seq.py
# 
 
# print the contents of the farm
for animal in  [ "dog", "cat", "horse" ]:
     print animal


  • Add a pig to your list of animals, and make sure it gets listed by the program.


Modification #1
Change the for-loop of your program so that it reads:


       counter = 0
       for animal in  [ "dog", "cat", "horse", "pig" ]:
           print( counter, animal )
           counter = counter + 1


  • Run the program. Observe its output. From this observation, modify the program so that its output now reads something like this (user input is in underlined):
       Your farm contains
       animal # 1 : a sheep
       animal # 2 : a dog
       animal # 3 : a bear
       animal # 4 : a mouse

Old MacDonald's Farm

Old MacDonald's farm is a song most American kids learn at one point in their life. I certainly never heard it when I grew up in France, but I think most of you will be familiar with it.

If you don't know it, this YouTube video will get you acquainted with it. :-)

The goal of this problem is for you to add a section to the program below so that it prints parts of the lyrics of the famous song using a for-loop.

Here's the beginning program which you have to modify:

     
# display the names of the animals
for animal in  [ "horse", "pig", "dog", "cat" ]:
      print animal


Challenge #3: Output Song Lyrics

QuestionMark3.jpg


  • Modify the program above so that it uses the loop, and outputs the lyrics of the song:
    Old MacDonald had a farm, E-I-E-I-O
    And on his farm he had a horse E-I-E-I-O
    Here a horse, there a horse, everywhere a horse !
    
    Old MacDonald had a farm, E-I-E-I-O
    And on his farm he had a pig E-I-E-I-O
    Here a pig, there a pig, everywhere a pig !
    
    Old MacDonald had a farm, E-I-E-I-O
    And on his farm he had a dog E-I-E-I-O
    Here a dog, there a dog, everywhere a dog !
    
    Old MacDonald had a farm, E-I-E-I-O
    And on his farm he had a cat E-I-E-I-O
    Here a cat, there a cat, everywhere a cat !

(don't worry if you get extra spaces in your output)

The input() Function


Try the following statements in the console window. Again, some of these might generate errors. It is important for you to understand why these errors occur.


>>> firstName = input( "Enter your first name: " )
>>> firstName

>>> lastName = input( "Enter your last name: " )
>>> lastName

>>> print( firstName, lastName )

>>> x = input( "enter a number: " )
>>> x

>>> x + 5

>>> x = input( "Enter a number: " )
>>> x

>>> x = eval( answer )
>>> x
>>> x + 5

>>> y = eval(  "314.56789" )
>>> y



Challenge #4: Gathering student information

QuestionMark4.jpg


Write a python program that asks the user for her name, box number, 99-Id number, and phone number, and that outputs it back on the screen nicely formatted.

Example (the information entered by the user is in boldface):

your first name? Allie
your last name? Gator
your box number? 1234
your phone number? 413 456 7890
your Smith Id? 990123456


Name:   Allie Gator (990123456)
box #:  1234
phone:  413 456 7890



Challenge #5: Printing the student information it in a (half) box

QuestionMark5.jpg


  • Same idea as with the previous challenge but after inputing the information from the user, the program outputs it in a half-box!

Example (user input in in boldface):

your first name?   Mickey
your last name?    Mouse
your box number?   1234
your phone number? 413 456 7890
your Id number?    990111222

+---------------------------------------
| Name:   Mickey Mouse ( 990111222 )
| Box:     1234
| Phone:  413 456 7890 
+---------------------------------------


  • The length of the bars is unimportant.



Challenge #6: Temperature Converter

QuestionMark8.jpg


  • Write a program that prompts the user for a temperature expressed in Fahrenheit, and outputs the equivalent temperature in Celsius.
  • The equation for temperature conversion is: Celsius = ( Fahrenheit -32 ) * 5 / 9
  • Here is an example of the way your program will work (the user input is in boldface):
Please enter temperature in Fahrenheit: 12
 
12 degrees Fahrenheit is -11.11111111111111 Celsius.

(We will not worry about the extra length of the Celsius number for this lab.)



Moodle Submission


  • Write a program that prompts the user for 2 integer numbers representing a low and a high temperature, expressed in Farhenheit, and outputs all the temperatures in between, with their equivalent Celsius.
  • Below is an example of interaction between the user and her program:


Enter low temperature: 20
Enter high temperature: 40

Fahrenheit Celsius
20         -6.66666666667
21         -6.11111111111
22         -5.55555555556
23         -5.0
24         -4.44444444444
25         -3.88888888889
26         -3.33333333333
27         -2.77777777778
28         -2.22222222222
29         -1.66666666667
30         -1.11111111111
31         -0.555555555556
32         0.0
33         0.555555555556
34         1.11111111111
35         1.66666666667
36         2.22222222222
37         2.77777777778
38         3.33333333333
39         3.88888888889
40         4.44444444444


  • Note: The space between the temperatures printed on the same line can be created by a simple string of 7 spaces.
  • Submit your program to Moodle, in the Lab 2 section.



<showafterdate after="20150207 00:00" before="20150601 00:00">

Solution Programs


# lab2.py
# D. Thiebaut
# The program prompts the user for 2 integer temperatures
# and outputs a table of all temperatures ranging between the
# two values, last value included.
temp1 = eval( input( "Enter low temperature: " ) )
temp2 = eval( input( "Enter high temperature: " ) )
print()
print( "Fahrenheit Celsius" )
for temp in range( temp1, temp2+1 ):
     print( temp, "       ", (temp-32)*5/9 )


</showafterdate>


...