Functions (organizing inline code)

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • bratiskovci
    New Member
    • Oct 2006
    • 14

    #1

    Functions (organizing inline code)

    1.How do I get functions to help me simplify access to the data structure.
    2. How do I get functions to encapsulate the various calculations that I have to make.
    3. How do I get functions to print out the computed information.

    Code:
    import sys
    subjects = ["A", "B", "L", "Z", "Q", "T", "V"]
    
    # Trial Data
    trials = [["Trial 1", [ 178, 206, 271, 254, 261, 218, 255]],
              ["Trial 2", [ 206, 215, 221, 244, 218, 271, 215]],
              ["Trial 3", [ 237, 298, 215, 233, 224, 216, 195]],
              ["Trial 4", [ 198, 273, 219, 241, 218, 279, 234]],
              ["Trial 5", [ 234, 226, 302, 263, 217, 275, 216]],
              ["Trial 6", [ 217, 256, 227, 227, 299, 234, 229]]
             ]
    
    
    # Print out trial averages
    for trial in trials:
        trialSum = 0.0
    
        for measures in trial[1]:
            trialSum = trialSum + measures
        print "Average for %s is %.3f mg/dL." % (trial[0], trialSum/len(trial[1]))
    
    
    # Add spacing between data groups for better visual appearance.
    print ""
    
    # print out subject averages
    for subject in subjects:
        subjectIndex = subjects.index(subject)
        subjectSum = 0.0
    
        # compute average for subject over all trials
        for trial in trials:
            subjectSum = subjectSum + trial[1][subjectIndex]
    
        # Print out average
        sys.stdout.write( "Average for subject %s is %.3f mg/dL.  " %
                          (subject, subjectSum/len(trials)))
    
        # Classify subject
        if subjectSum/len(trials)>240:
            print "Subject %s is high risk." % subject
        elif subjectSum/len(trials)>200:
            print "Subject %s is borderline high risk." % subject
        else:
            print "Subject %s is low risk." % subject
  • bartonc
    Recognized Expert Expert
    • Sep 2006
    • 6478

    #2
    This is a great question! With your code organized like this, you will be able to change the way you get your data more easily.

    Code:
    import sys
    def GetSubjects():
    	return ["A", "B", "L", "Z", "Q", "T", "V"]
    def GetTrialData():
    	# Trial Data
    	return [["Trial 1", [ 178, 206, 271, 254, 261, 218, 255]],
    			 ["Trial 2", [ 206, 215, 221, 244, 218, 271, 215]],
    			 ["Trial 3", [ 237, 298, 215, 233, 224, 216, 195]],
    			 ["Trial 4", [ 198, 273, 219, 241, 218, 279, 234]],
    			 ["Trial 5", [ 234, 226, 302, 263, 217, 275, 216]],
    			 ["Trial 6", [ 217, 256, 227, 227, 299, 234, 229]]
    			 ]
     
    def PrintTrailAverage(trials):
    	# Print out trial averages
    	for trial in trials:
    		trialSum = 0.0
    		for measures in trial[1]:
    			trialSum = trialSum + measures
    		print "Average for %s is %.3f mg/dL." % (trial[0], trialSum/len(trial[1]))
    	# Add spacing after this data group for better visual appearance.
    	print
    def PrintSubjectAverage(subjects, trials):
    	# print out subject averages
    	for subject in subjects:
    		subjectIndex = subjects.index(subject)
    		subjectSum = 0.0
    		# compute average for subject over all trials
    		for trial in trials:
    			subjectSum = subjectSum + trial[1][subjectIndex]
    		# Print out average
    		sys.stdout.write( "Average for subject %s is %.3f mg/dL. " %
    						 (subject, subjectSum/len(trials)))
    		# Classify subject
    		if subjectSum/len(trials)>240:
    			print "Subject %s is high risk." % subject
    		elif subjectSum/len(trials)>200:
    			print "Subject %s is borderline high risk." % subject
    		else:
    			print "Subject %s is low risk." % subject
    	# Add spacing after this data group for better visual appearance.
    	print
    def MainProgram():
    	s = GetSubjects()
    	td = GetTrialData()
    	PrintTrailAverage(td)
    	PrintSubjectAverage(s, td)
    MainProgram()
    Now that you see how it's done, I'll bet you can move the calculations to fuctions... Have fun and keep posting,
    Barton

    Comment

    Working...