Difference between revisions of "CSC111 Programming Examples Week 2"

From dftwiki3
Jump to: navigation, search
(Step 3)
(Step 4)
Line 125: Line 125:
 
</source>
 
</source>
  
 +
<br />
 
==Step 4==
 
==Step 4==
 +
<br />
 +
Now we start to have some more sophisticated code to come up with.  We need to space out the first name, last name and Id in the box, and figure out the right number of spaces between them.  I use as many variables as make sense for this problem.  I try to give them names that will help somebody reading the code understand what quantities they contain.
 +
<br />
 +
 
<source lang="python">
 
<source lang="python">
 
# define constants
 
# define constants
Line 154: Line 159:
  
 
</source>
 
</source>
 +
 
==Step 5==
 
==Step 5==
 
<source lang="python">
 
<source lang="python">

Revision as of 20:21, 7 February 2015

--D. Thiebaut (talk) 09:12, 6 February 2015 (EST)


Problem


Here's a problem, below. Read it. And then figure out how you could write a short program that would just be the seed for a solution. Then try to write that small program. And then, in a series of successive small step, you get closer and closer to the solution. I have shown at the bottom of the page my own progression, going from a very simple seed to a fool blown solution. The trick is to do add something fairly simple at every step.

Problem
  • Get first name, last name, Id from student, and final grade, as a number (0-100).
  • Also known is class average, as a number (0-100).
  • Display student information in a box, and horizontal bar graph of 2 grades.


Example of Interaction with the User


 First name?  Dominique
 Last name?   Thiebaut
 Id?          990123456
 Final grade? 90
 +———————————————————————————————————-———————————-+
 |Dominique Thiebaut                    990123456 | 
 +———————————————————————————————————-———————————-+
       00...10...20...30...40...50...60...70...80...90...100
 grade: #############################################
 class: ########################################

(The class average is set by the program, internally. The value used here in 80.)


Decomposition


Below are various steps showing how to progress through the writing of a solution program.


Step 1


Here I try to get the information from the user and display it back. I also spend the time incorporating a header, and various comments that will lay down the outline of where the code will eventually go.

# Exercise1.py
# D. Thiebaut
# 2/6/15
# This program prompts the user for some student information
# including name, Id, and final grade, and displays the result
# nicely formatted.
# Example of output:
#
#+———————————————————————————————————-———————————-+
#|Alex Andra                            990123456 |
#+———————————————————————————————————————————-———-+
#          00...10...20...30...40...50...60...70...80...90...100
#grade: #########################
#class:  #####################
#

# define constants
classAverage = 70

# get user data
fName      = input( "First name?  " )
lName      = input( "Last name?   " )
Id         = input( "Id?          " )
grade   = eval( input( "Final grade? " ) )

# display result
print( fName, lName, Id )
print( grade )
print( classAverage )


Step 2


After verifying that the program works and gets the information well, I realize that I will spend a lot of time entering a the user information as I am debugging the program. So I right away modify the program, so that when I am debugging, I don't have to enter anything. I simply comment out the input statements by putting a #-sign in front of them. This way they actually disappear from the program for the interpreter. Instead I assign constant strings and numbers to the variables.

# (header removed)
# define constants
classAverage = 70

# get user data
fName      =  "Alex" #input( "First name?  " )
lName      = "Andra" #input( "Last name?   " )
Id         = "990123456" #input( "Id?          " )
grade      = 80 #eval( input( "Final grade? " ) )

# display result
print( fName, lName, Id )
print( grade )
print( classAverage )

Step 3


Next I copy/paste the top and bottom bars of the box and make them strings by putting double-quotes around them.
I also print the scale.

# define constants
classAverage = 70

# get user data
fName      =  "Alex" #input( "First name?  " )
lName      = "Andra" #input( "Last name?   " )
Id         = "990123456" #input( "Id?          " )
grade      = 80 #eval( input( "Final grade? " ) )

# display result
print( "+———————————————————————————————————-———————————-+" )
print( fName, lName, Id )
print( "+———————————————————————————————————-———————————-+" )
print( "          00...10...20...30...40...50...60...70...80...90...100" )
print( grade )
print( classAverage )


Step 4


Now we start to have some more sophisticated code to come up with. We need to space out the first name, last name and Id in the box, and figure out the right number of spaces between them. I use as many variables as make sense for this problem. I try to give them names that will help somebody reading the code understand what quantities they contain.

# define constants
classAverage = 70

# get user data
fName      =  "Alex" #input( "First name?  " )
lName      = "Andra" #input( "Last name?   " )
Id         = "990123456" #input( "Id?          " )
grade      = 80 #eval( input( "Final grade? " ) )

# create header
bar = "+———————————————————————————————————-———————————-+"
barLen = len( bar )
userLen = len( "|" + fName+ " " + lName + Id + " |" )
noSpaces = barLen - userLen
infoLine = "|" + fName + " " + lName + (" "*noSpaces) + Id + " |"

# display header
print( bar )
print( infoLine )
print( bar )

# display bar graph
print( "          00...10...20...30...40...50...60...70...80...90...100" )
print( grade )
print( classAverage )

Step 5

# define constants
classAverage = 100

# get user data
fName      =  "Alex" #input( "First name?  " )
lName      = "Andra" #input( "Last name?   " )
Id         = "990123456" #input( "Id?          " )
grade      = 80 #eval( input( "Final grade? " ) )

# create header
bar = "+———————————————————————————————————-———————————-+"
barLen = len( bar )
userLen = len( "|" + fName+ " " + lName + Id + " |" )
noSpaces = barLen - userLen
infoLine = "|" + fName + " " + lName + (" "*noSpaces) + Id + " |"

# create bar graph
padding = "       "
scale   = "00...10...20...30...40...50...60...70...80...90...100"

# create user bar
noHashTags = int( grade/2 )
studentBar = noHashTags * '#'

# create class bar
noHashTags = int( classAverage/2 )
classBar = noHashTags * '#'

# display header
print( bar )
print( infoLine )
print( bar )

# display bar graph
print( padding + scale )
print( "grade: " + studentBar )
print( "class: " + classBar )


We note that the scale is not quite accurate and needs to be "pushed" a bit to the right...

Step 6

# Exercise1.py
# D. Thiebaut
# 2/6/15
# This program prompts the user for some student information
# including name, Id, and final grade, and displays the result
# nicely formatted.
# Example of output:
#
#+———————————————————————————————————-———————————-+
#|Alex Andra                            990123456 |
#+———————————————————————————————————————————-———-+
#       00...10...20...40...50...60...70...80...90...100
#grade: #######################################
#class: ##################################
#

# define constants
classAverage = 80

# get user data
fName      =  "Alex" #input( "First name?  " )
lName      = "Andra" #input( "Last name?   " )
Id         = "990123456" #input( "Id?          " )
grade      = 70 #eval( input( "Final grade? " ) )

# create header
bar = "+———————————————————————————————————-———————————-+"
barLen = len( bar )
userLen = len( "|" + fName+ " " + lName + Id + " |" )
noSpaces = barLen - userLen
infoLine = "|" + fName + " " + lName + (" "*noSpaces) + Id + " |"

# create bar graph
padding = "      "
scale   = "00...10...20...30...40...50...60...70...80...90...100"

# create user bar
noHashTags = int( grade/2 )
studentBar = noHashTags * '#'

# create class bar
noHashTags = int( classAverage/2 )
classBar = noHashTags * '#'

# display header
print( bar )
print( infoLine )
print( bar )

# display bar graph
print( padding + scale )
print( "grade: " + studentBar )
print( "class: " + classBar )

Step 7

# Exercise1.py
# D. Thiebaut
# 2/6/15
# This program prompts the user for some student information
# including name, Id, and final grade, and displays the result
# nicely formatted.
# Example of output:
#
#+———————————————————————————————————-———————————-+
#|Alex Andra                            990123456 |
#+———————————————————————————————————————————-———-+
#       00...10...20...40...50...60...70...80...90...100
#grade: #######################################
#class: ##################################
#

# define constants
classAverage = 80

# get user data
fName      =  "Alex" #input( "First name?  " )
lName      = "Andra" #input( "Last name?   " )
Id         = "990123456" #input( "Id?          " )
grade      = 70 #eval( input( "Final grade? " ) )

# create header
bar = "+———————————————————————————————————-———————————-+"
barLen = len( bar )
userLen = len( "|" + fName+ " " + lName + Id + " |" )
noSpaces = barLen - userLen
infoLine = "|" + fName + " " + lName + (" "*noSpaces) + Id + " |"

# create bar graph
padding = "      "
scale   = "00...10...20...30...40...50...60...70...80...90...100"

# create user bar
noHashTags = int( grade/2 )
studentBar = noHashTags * '#'

# create class bar
noHashTags = int( classAverage/2 )
classBar = noHashTags * '#'

# display header
print( bar )
print( infoLine )
print( bar )

# display bar graph
print( padding + scale )
print( "grade: " + studentBar )
print( "class: " + classBar )

Step 8


Activate the input() statements, again.

# Exercise1.py
# D. Thiebaut
# 2/6/15
# This program prompts the user for some student information
# including name, Id, and final grade, and displays the result
# nicely formatted.
# Example of output:
#
#+———————————————————————————————————-———————————-+
#|Alex Andra                            990123456 |
#+———————————————————————————————————————————-———-+
#       00...10...20...40...50...60...70...80...90...100
#grade: #######################################
#class: ##################################
#

# define constants
classAverage = 80

# get user data
fName      = input( "First name?  " )
lName      = input( "Last name?   " )
Id         = input( "Id?          " )
grade      = eval( input( "Final grade? " ) )

# create header
bar = "+———————————————————————————————————-———————————-+"
barLen = len( bar )
userLen = len( "|" + fName+ " " + lName + Id + " |" )
noSpaces = barLen - userLen
infoLine = "|" + fName + " " + lName + (" "*noSpaces) + Id + " |"

# create bar graph
padding = "      "
scale   = "00...10...20...30...40...50...60...70...80...90...100"

# create user bar
noHashTags = int( grade/2 )
studentBar = noHashTags * '#'

# create class bar
noHashTags = int( classAverage/2 )
classBar = noHashTags * '#'

# display header
print( bar )
print( infoLine )
print( bar )

# display bar graph
print( padding + scale )
print( "grade: " + studentBar )
print( "class: " + classBar )