Eric Evans – Planboard Lesson – Mar 21 2018 Computer Science 1 – Section 1

# Tag: CS1

## CS1 19-Mar-2018

## CS1 08-Mar-2018

## Coding Bat Logic Problems – Day 2

Last class we looked at the first of 4 logic problems on Coding Bat in Computer Science 1 ( http://funmultiplies.com/coding-bat-logic-problems-day-1 ). We’re now looking at the last 4 logic problems of that Coding Bat set in CS1 as we get ready to depart for Spring Break.

#### alarm clock

http://codingbat.com/prob/p119867

Here is the setup of this problem:

*Given a day of the week encoded as 0=Sun, 1=Mon, 2=Tue, …6=Sat, and a boolean indicating if we are on vacation, return a string of the form “7:00” indicating when the alarm clock should ring. Weekdays, the alarm should be “7:00” and on the weekend it should be “10:00”. Unless we are on vacation — then on weekdays it should be “10:00” and weekends it should be “off”.*

def alarm_clock(day, vacation): if (day == 0 or day == 6) and vacation == True: return "off" elif (day == 0 or day == 6) and vacation == False: return "10:00" elif (day == 1 or day == 2 or day == 3 or day == 4 or day == 5) and vacation == False: return "7:00" else: return "10:00"

This one is not hard, but just involved with conditional statements. The major things to keep an eye out for are the spelling of the return “off” is all lower-case and the week starts on day 0 with Sunday.

#### love 6

http://codingbat.com/prob/p100958

Here is the setup for this problem:

*The number 6 is a truly great number. Given two int values, a and b, return True if either one is 6. Or if their sum or difference is 6. Note: the function abs(num) computes the absolute value of a number.*

def love6(a, b): if (a) == 6 or (b) == 6: return True elif (a) + (b) == 6 or (b) + (a) == 6: return True elif (a) - (b) == 6 or (b) - (a) == 6: return True else: return False

I personally do not like this problem because of the “Note” at the end. It throws many programmers off. Yes, you can solve this using absolute values, but it’s not necessary.

Once you get other that “distractor”, this is a simple conditional logic problem.

#### In 1 to 10

http://codingbat.com/prob/p158497

Here is the setup for this problem:

*Given a number n, return True if n is in the range 1..10, inclusive. Unless outside_mode is True, in which case return True if the number is less or equal to 1, or greater or equal to 10.*

def in1to10(n, outside_mode): if outside_mode == False and (n >= 1 and n <= 10): return True elif outside_mode == True and (n <= 1 or n >= 10): return True else: return False

This is a pretty simple conditional logic problem. If the Boolean flag is False, we are looking for numbers between 1 and 10 (inclusive) and if the Boolean flag is True, we are looking for numbers outside of 1 and 10 (inclusive).

On this particular question, I awarded extra credit if my students could explain mathematically why when the *outside_mode* Boolean flag is True, the Boolean operator must be OR.

The reason is that while the Boolean flag is False, *num* is to be between 1 and 10 inclusive. A number can be simultaneously between 1 and 10. As such, the Boolean AND is used in this statement.

Conversely, when the Boolean flag is True, *num* is to be outside of 1 and 10 inclusive. A number CANNOT be simultaneously less than 1 and greater than 10. As such, the Boolean OR is needed for this statement.

#### near ten

http://codingbat.com/prob/p165321

Here is the setup for this problem:

*Given a non-negative number “num”, return True if num is within 2 of a multiple of 10. Note: (a % b) is the remainder of dividing a by b, so (7 % 5) is 2.*

def near_ten(num): if num % 10 == 0 or num % 10 == 1 or num % 10 == 2 or num % 10 == 8 or num % 10 == 9: return True else: return False

This particular one needs a little bit of explanation on the algorithm that was used. The general concept is pretty straightforward, but the formula may not be.

Here, we are looking at the modulus of num by 10. In this case, that will always return a 0, 1, or 2 if the number is a multiple of 10, or 1 greater than a multiple of 10, or 2 greater than a multiple of 10 respectively.

On the other side, we will always return an 8 or 9 if the number is 2 less than a multiple of 10, or 1 less than a multiple of 10 respectively.

Beyond the algorithm, the problem is a simple logic conditional program.

## Coding Bat Logic Problems – Day 1

Today, we looked at logic problems in Coding Bat in Computer Science 1. Students had to use Boolean logic operators and conditional if/else an if/elif/else statements.

#### Cigar Party

http://codingbat.com/prob/p195669

Here is the setup of the problem:

*When squirrels get together for a party, they like to have cigars. A squirrel party is successful when the number of cigars is between 40 and 60, inclusive. Unless it is the weekend, in which case there is no upper bound on the number of cigars. Return True if the party with the given values is successful, or False otherwise.*

def cigar_party(cigars, is_weekend): if is_weekend == True and cigars >=40: return True elif is_weekend == False and cigars >=40 and cigars <=60: return True else: return False

Here, we used the Boolean AND operator to check the number of cigars in relation to the value of is_weekend.

Lines 2 – 3 address if it is a weekend AND are there at least 40 cigars. If so, a TRUE is returned.

Lines 4 – 5 address if is is NOT a weekend AND there are between 40 and 60 cigars. If so, a TRUE is returned.

Lines 6 – 7 address everything else as the default case and return a FALSE.

#### Date Fashion

http://codingbat.com/prob/p129125

Here is the setup of the problem:

*You and your date are trying to get a table at a restaurant. The parameter “you” is the stylishness of your clothes, in the range 0..10, and “date” is the stylishness of your date’s clothes. The result getting the table is encoded as an int value with 0=no, 1=maybe, 2=yes. If either of you is very stylish, 8 or more, then the result is 2 (yes). With the exception that if either of you has style of 2 or less, then the result is 0 (no). Otherwise the result is 1 (maybe).*

def date_fashion(you, date): if you <=2 or date <=2: return 0 elif you >= 8 or date >= 8: return 2 else: return 1

Here, the order of the conditions is EXTREMELY important. Let’s look at the case of you = 9 and date = 1.

In the code above, we would reach the first the first conditional statement with you <=2 is FALSE but date <=2 is TRUE. Since a Boolean OR is being used, only one of them must be true for the associated code to run. So, we return a value of 0 and exit the conditional loop, which is the correct response for the problem.

Now, let’s change the code to the following:

def date_fashion(you, date): if you >= 8 or date >= 8: return 2 elif you <=2 or date <=2: return 0 else: return 1

All that we have done is swap the conditions between lines 2 and 4 with each other. Let’s examine the case of you = 9 and date = 1 again.

We enter at the first conditional statement with you >= 8 is TRUE but date >= is FALSE. Since a Boolean OR is being used, only one of them must be true for the associated code to run. So, we return a value of 2 and exit the conditional loop, which is the incorrect response for the problem.

The order of our conditional statements is EXTREMELY important!

#### Squirrel Play

http://codingbat.com/prob/p135815

Here is the setup of the problem:

*The squirrels in Palo Alto spend most of the day playing. In particular, they play if the temperature is between 60 and 90 (inclusive). Unless it is summer, then the upper limit is 100 instead of 90. Given an int temperature and a boolean is_summer, return True if the squirrels play and False otherwise.*

def squirrel_play(temp, is_summer): if is_summer == True and temp >= 60 and temp <= 100: return True elif is_summer == False and temp >= 60 and temp <= 90: return True else: return False

Lines 2 – 3 check if it is summer. If it is, we then check to see if the temperature is between 60 and 100 degrees inclusive. If it passes all 3 of these tests (Boolean AND), we return the value of TRUE.

Lines 4 – 5 check if it is NOT summer. If it is NOT summer, we then check to see if the temperature is between 60 and 90 degrees inclusive. If it passes all 3 of these tests (Boolean AND), we return the value of TRUE.

Lines 6 -7 are the default case if neither of the above tests can be passed and returns the value of FALSE.

#### Caught Speeding

http://codingbat.com/prob/p137202

Here is the setup of the problem:

*You are driving a little too fast, and a police officer stops you. Write code to compute the result, encoded as an int value: 0=no ticket, 1=small ticket, 2=big ticket. If speed is 60 or less, the result is 0. If speed is between 61 and 80 inclusive, the result is 1. If speed is 81 or more, the result is 2. Unless it is your birthday — on that day, your speed can be 5 higher in all cases.*

def caught_speeding(speed, is_birthday): if is_birthday == True and speed <= 65: return 0 elif is_birthday == False and speed <= 60: return 0 elif is_birthday == True and speed >= 66 and speed <=85: return 1 elif is_birthday == False and speed >=61 and speed <= 80: return 1 else: return 2

Much like the problem before earlier, we a set of Boolean AND statements. When using the Boolean AND we must remember that ALL conditions must be satisfied for the statement to be considered TRUE and to thereby execute the associated instructions.

Lines 2 – 3 and 6 – 7 are working with when is_birthday is TRUE while lines 4 – 5 and 8 – 9 are working with when is_birthday is FALSE. All of these lines are using comparative operators for the speeds.

## CS1 06-Mar-2018

## Finishing the Matrix

Today, we finished the assignment over a matrix (2-dimensional array) in Python by calculating the ranking points for the teams in the FIRST Tech Challenge El Dorado League of North Texas for the 2017/2018 season.

As you may recall from the previous post titled “Continuing the Matrix“, when there is a tie in the qualifying points, the 3 highest ranking points for each team are summed together to break the tie. The team with the higher sum wins the tie-break.

I am going to remove lines 147 to 157 from last class, which was a test print and am going to replace them with the following to calculate the sum of the 3 highest ranking points.

teams[0][13] = (teams[0][5] + teams[0][7] + teams[0][9] + teams[0][11]) - min(teams[0][5], teams[0][7], teams[0][9], teams[0][11]) teams[1][13] = (teams[1][5] + teams[1][7] + teams[1][9] + teams[1][11]) - min(teams[1][5], teams[1][7], teams[1][9], teams[1][11]) teams[2][13] = (teams[2][5] + teams[2][7] + teams[2][9] + teams[2][11]) - min(teams[2][5], teams[2][7], teams[2][9], teams[2][11]) teams[3][13] = (teams[3][5] + teams[3][7] + teams[3][9] + teams[3][11]) - min(teams[3][5], teams[3][7], teams[3][9], teams[3][11]) teams[4][13] = (teams[4][5] + teams[4][7] + teams[4][9] + teams[4][11]) - min(teams[4][5], teams[4][7], teams[4][9], teams[4][11]) teams[5][13] = (teams[5][5] + teams[5][7] + teams[5][9] + teams[5][11]) - min(teams[5][5], teams[5][7], teams[5][9], teams[5][11]) teams[6][13] = (teams[6][5] + teams[6][7] + teams[6][9] + teams[6][11]) - min(teams[6][5], teams[6][7], teams[6][9], teams[6][11]) teams[7][13] = (teams[7][5] + teams[7][7] + teams[7][9] + teams[7][11]) - min(teams[7][5], teams[7][7], teams[7][9], teams[7][11]) teams[8][13] = (teams[8][5] + teams[8][7] + teams[8][9] + teams[8][11]) - min(teams[8][5], teams[8][7], teams[8][9], teams[8][11]) teams[9][13] = (teams[9][5] + teams[9][7] + teams[9][9] + teams[9][11]) - min(teams[9][5], teams[9][7], teams[9][9], teams[9][11]) teams[10][13] = (teams[10][5] + teams[10][7] + teams[10][9] + teams[10][11]) - min(teams[10][5], teams[10][7], teams[10][9], teams[10][11])

Let’s take a look at what we have going on here by just taking a look at the first line in this code segment:

teams[0][13] = (teams[0][5] + teams[0][7] + teams[0][9] + teams[0][11]) - min(teams[0][5], teams[0][7], teams[0][9], teams[0][11])

As you can see, we start by saying that we are going to populate column with 13 with some data. That data is the value of columns 5, 7, 9, & 11 added together and then the smallest of those values subtracted from that sum.

Remember, only the top 3 scores are used in the calculation and it we add the 4 scores together and then subtract the smallest (min) from that total, we get the data we need.

We now need to display our data.

print(teams[0][0] + " - " + teams[0][1] + " - " + str(teams[0][12]) + " (" + str(teams[0][13]) + ")") print(teams[1][0] + " - " + teams[1][1] + " - " + str(teams[1][12]) + " (" + str(teams[1][13]) + ")") print(teams[2][0] + " - " + teams[2][1] + " - " + str(teams[2][12]) + " (" + str(teams[2][13]) + ")") print(teams[3][0] + " - " + teams[3][1] + " - " + str(teams[3][12]) + " (" + str(teams[3][13]) + ")") print(teams[4][0] + " - " + teams[4][1] + " - " + str(teams[4][12]) + " (" + str(teams[4][13]) + ")") print(teams[5][0] + " - " + teams[5][1] + " - " + str(teams[5][12]) + " (" + str(teams[5][13]) + ")") print(teams[6][0] + " - " + teams[6][1] + " - " + str(teams[6][12]) + " (" + str(teams[6][13]) + ")") print(teams[7][0] + " - " + teams[7][1] + " - " + str(teams[7][12]) + " (" + str(teams[7][13]) + ")") print(teams[8][0] + " - " + teams[8][1] + " - " + str(teams[8][12]) + " (" + str(teams[8][13]) + ")") print(teams[9][0] + " - " + teams[9][1] + " - " + str(teams[9][12]) + " (" + str(teams[9][13]) + ")") print(teams[10][0] + " - " + teams[10][1] + " - " + str(teams[10][12]) + " (" + str(teams[10][13]) + ")")

Let’s take a look at what we have going on here by just taking a look at the first line in this code segment:

print(teams[0][0] + " - " + teams[0][1] + " - " + str(teams[0][12]) + " (" + str(teams[0][13]) + ")")

Here, we are displaying a concatenation of the team number from column 0, with a space/hyphen/space, with the team name from column 1, with a space/hyphen/space, with the sum of the qualifying points for the team from column 12, with a space, with the sum of the three highest ranking points in parenthesis from column 13.

The output should look like the following:

Python 3.6.1 (default, Dec 2015, 13:05:11) [GCC 4.8.2] on linux 127 - The Fighting Pickles - 23 (867) 5443 - Synergy - 18 (737) 9402 - Hive of Steel - 15 (739) 9403 - CyberSwarm - 29 (932) 10143 - Bits & Bots - 14 (763) 11085 - Mad Hackers - 16 (718) 11242 - ERROR 451 - 28 (812) 12645 - S.C.R.E.W. Ups - 19 (874) 12650 - Cannot Compute - 12 (673) 12992 - Vindicators - 6 (316) 13915 - Eagles Robotics - 14 (407)

Following is a complete overview of the code that was created over the 3 days of this lesson:

w = 14 #Width of matrix h = 11 #Height of matrix teams = [[0 for x in range(w)] for y in range(h)] teams[0][0] = "127" teams[1][0] = "5443" teams[2][0] = "9402" teams[3][0] = "9403" teams[4][0] = "10143" teams[5][0] = "11085" teams[6][0] = "11242" teams[7][0] = "12645" teams[8][0] = "12650" teams[9][0] = "12992" teams[10][0] = "13915" teams[0][1] = "The Fighting Pickles" teams[1][1] = "Synergy" teams[2][1] = "Hive of Steel" teams[3][1] = "CyberSwarm" teams[4][1] = "Bits & Bots" teams[5][1] = "Mad Hackers" teams[6][1] = "ERROR 451" teams[7][1] = "S.C.R.E.W. Ups" teams[8][1] = "Cannot Compute" teams[9][1] = "Vindicators" teams[10][1] = "Eagles Robotics" teams[0][2] = "Ben Barber Innovation Academy" teams[1][2] = "Harmony School of Innovation" teams[2][2] = "Henderson Junior High School" teams[3][2] = "Henderson Junior High School" teams[4][2] = "Harmony School of Innovation" teams[5][2] = "Mansfield High School" teams[6][2] = "Ferris High School" teams[7][2] = "Ferris High School" teams[8][2] = "Ferris Junior High School" teams[9][2] = "Italy High School" teams[10][2] = "Faith Family Academy" teams[0][3] = "Mansfield, TX" teams[1][3] = "Ft. Worth, TX" teams[2][3] = "Stephenville, TX" teams[3][3] = "Stephenville, TX" teams[4][3] = "Ft. Worth, TX" teams[5][3] = "Mansfield, TX" teams[6][3] = "Ferris, TX" teams[7][3] = "Ferris, TX" teams[8][3] = "Ferris, TX" teams[9][3] = "Italy, TX" teams[10][3] = "Waxahachie, TX" teams[0][4] = 6 teams[1][4] = 0 teams[2][4] = 2 teams[3][4] = 6 teams[4][4] = 6 teams[5][4] = 4 teams[6][4] = 10 teams[7][4] = 6 teams[8][4] = 6 teams[9][4] = 4 teams[10][4] = 0 teams[0][5] = 210 teams[1][5] = 105 teams[2][5] = 132 teams[3][5] = 183 teams[4][5] = 212 teams[5][5] = 184 teams[6][5] = 220 teams[7][5] = 156 teams[8][5] = 160 teams[9][5] = 164 teams[10][5] = 0 teams[0][6] = 6 teams[1][6] = 4 teams[2][6] = 4 teams[3][6] = 10 teams[4][6] = 2 teams[5][6] = 0 teams[6][6] = 6 teams[7][6] = 4 teams[8][6] = 4 teams[9][6] = 0 teams[10][6] = 0 teams[0][7] = 257 teams[1][7] = 257 teams[2][7] = 220 teams[3][7] = 314 teams[4][7] = 205 teams[5][7] = 0 teams[6][7] = 238 teams[7][7] = 277 teams[8][7] = 224 teams[9][7] = 0 teams[10][7] = 0 teams[0][8] = 6 teams[1][8] = 6 teams[2][8] = 6 teams[3][8] = 6 teams[4][8] = 4 teams[5][8] = 6 teams[6][8] = 6 teams[7][8] = 6 teams[8][8] = 0 teams[9][8] = 2 teams[10][8] = 6 teams[0][9] = 188 teams[1][9] = 168 teams[2][9] = 156 teams[3][9] = 218 teams[4][9] = 160 teams[5][9] = 202 teams[6][9] = 244 teams[7][9] = 184 teams[8][9] = 156 teams[9][9] = 152 teams[10][9] = 140 teams[0][10] = 5 teams[1][10] = 8 teams[2][10] = 3 teams[3][10] = 7 teams[4][10] = 2 teams[5][10] = 6 teams[6][10] = 6 teams[7][10] = 3 teams[8][10] = 2 teams[9][10] = 0 teams[10][10] = 8 teams[0][11] = 400 teams[1][11] = 312 teams[2][11] = 363 teams[3][11] = 400 teams[4][11] = 346 teams[5][11] = 332 teams[6][11] = 330 teams[7][11] = 413 teams[8][11] = 289 teams[9][11] = 0 teams[10][11] = 267 teams[0][12] = teams[0][4] + teams[0][6] + teams[0][8] + teams [0][10] teams[1][12] = teams[1][4] + teams[1][6] + teams[1][8] + teams [1][10] teams[2][12] = teams[2][4] + teams[2][6] + teams[2][8] + teams [2][10] teams[3][12] = teams[3][4] + teams[3][6] + teams[3][8] + teams [3][10] teams[4][12] = teams[4][4] + teams[4][6] + teams[4][8] + teams [4][10] teams[5][12] = teams[5][4] + teams[5][6] + teams[5][8] + teams [5][10] teams[6][12] = teams[6][4] + teams[6][6] + teams[6][8] + teams [6][10] teams[7][12] = teams[7][4] + teams[7][6] + teams[7][8] + teams [7][10] teams[8][12] = teams[8][4] + teams[8][6] + teams[8][8] + teams [8][10] teams[9][12] = teams[9][4] + teams[9][6] + teams[9][8] + teams [9][10] teams[10][12] = teams[10][4] + teams[10][6] + teams[10][8] + teams [10][10] teams[0][13] = (teams[0][5] + teams[0][7] + teams[0][9] + teams[0][11]) - min(teams[0][5], teams[0][7], teams[0][9], teams[0][11]) teams[1][13] = (teams[1][5] + teams[1][7] + teams[1][9] + teams[1][11]) - min(teams[1][5], teams[1][7], teams[1][9], teams[1][11]) teams[2][13] = (teams[2][5] + teams[2][7] + teams[2][9] + teams[2][11]) - min(teams[2][5], teams[2][7], teams[2][9], teams[2][11]) teams[3][13] = (teams[3][5] + teams[3][7] + teams[3][9] + teams[3][11]) - min(teams[3][5], teams[3][7], teams[3][9], teams[3][11]) teams[4][13] = (teams[4][5] + teams[4][7] + teams[4][9] + teams[4][11]) - min(teams[4][5], teams[4][7], teams[4][9], teams[4][11]) teams[5][13] = (teams[5][5] + teams[5][7] + teams[5][9] + teams[5][11]) - min(teams[5][5], teams[5][7], teams[5][9], teams[5][11]) teams[6][13] = (teams[6][5] + teams[6][7] + teams[6][9] + teams[6][11]) - min(teams[6][5], teams[6][7], teams[6][9], teams[6][11]) teams[7][13] = (teams[7][5] + teams[7][7] + teams[7][9] + teams[7][11]) - min(teams[7][5], teams[7][7], teams[7][9], teams[7][11]) teams[8][13] = (teams[8][5] + teams[8][7] + teams[8][9] + teams[8][11]) - min(teams[8][5], teams[8][7], teams[8][9], teams[8][11]) teams[9][13] = (teams[9][5] + teams[9][7] + teams[9][9] + teams[9][11]) - min(teams[9][5], teams[9][7], teams[9][9], teams[9][11]) teams[10][13] = (teams[10][5] + teams[10][7] + teams[10][9] + teams[10][11]) - min(teams[10][5], teams[10][7], teams[10][9], teams[10][11]) print(teams[0][0] + " - " + teams[0][1] + " - " + str(teams[0][12]) + " (" + str(teams[0][13]) + ")") print(teams[1][0] + " - " + teams[1][1] + " - " + str(teams[1][12]) + " (" + str(teams[1][13]) + ")") print(teams[2][0] + " - " + teams[2][1] + " - " + str(teams[2][12]) + " (" + str(teams[2][13]) + ")") print(teams[3][0] + " - " + teams[3][1] + " - " + str(teams[3][12]) + " (" + str(teams[3][13]) + ")") print(teams[4][0] + " - " + teams[4][1] + " - " + str(teams[4][12]) + " (" + str(teams[4][13]) + ")") print(teams[5][0] + " - " + teams[5][1] + " - " + str(teams[5][12]) + " (" + str(teams[5][13]) + ")") print(teams[6][0] + " - " + teams[6][1] + " - " + str(teams[6][12]) + " (" + str(teams[6][13]) + ")") print(teams[7][0] + " - " + teams[7][1] + " - " + str(teams[7][12]) + " (" + str(teams[7][13]) + ")") print(teams[8][0] + " - " + teams[8][1] + " - " + str(teams[8][12]) + " (" + str(teams[8][13]) + ")") print(teams[9][0] + " - " + teams[9][1] + " - " + str(teams[9][12]) + " (" + str(teams[9][13]) + ")") print(teams[10][0] + " - " + teams[10][1] + " - " + str(teams[10][12]) + " (" + str(teams[10][13]) + ")")

## CS1 02-Mar-2018

## Continuing the Matrix

Today, we continued the matrix (2-dimensional array) in Python in Computer Science 1. We added an additional 88 data points to the existing 44 we started with. This brings the total number of points to 132.

See the post entitled “Starting a Matrix in Python” for the first part of the program code.

Now, we are going to remove lines 48 through 58 of the code to continue entering data.

teams[0][4] = 6 teams[1][4] = 0 teams[2][4] = 2 teams[3][4] = 6 teams[4][4] = 6 teams[5][4] = 4 teams[6][4] = 10 teams[7][4] = 6 teams[8][4] = 6 teams[9][4] = 4 teams[10][4] = 0 teams[0][5] = 210 teams[1][5] = 105 teams[2][5] = 132 teams[3][5] = 183 teams[4][5] = 212 teams[5][5] = 184 teams[6][5] = 220 teams[7][5] = 156 teams[8][5] = 160 teams[9][5] = 164 teams[10][5] = 0

Here, we are adding the scores for each team from the first league meet of the 2017/2018 season as new columns 4 and 5 to the array. You can see these are being entered as integers as we will be doing some math with them later.

teams[0][6] = 6 teams[1][6] = 4 teams[2][6] = 4 teams[3][6] = 10 teams[4][6] = 2 teams[5][6] = 0 teams[6][6] = 6 teams[7][6] = 4 teams[8][6] = 4 teams[9][6] = 0 teams[10][6] = 0 teams[0][7] = 257 teams[1][7] = 257 teams[2][7] = 220 teams[3][7] = 314 teams[4][7] = 205 teams[5][7] = 0 teams[6][7] = 238 teams[7][7] = 277 teams[8][7] = 224 teams[9][7] = 0 teams[10][7] = 0

We are now adding the scores from each team from the second league meet of the 2017/2018 season as new columns 6 and 7 to the array.

teams[0][8] = 6 teams[1][8] = 6 teams[2][8] = 6 teams[3][8] = 6 teams[4][8] = 4 teams[5][8] = 6 teams[6][8] = 6 teams[7][8] = 6 teams[8][8] = 0 teams[9][8] = 2 teams[10][8] = 6 teams[0][9] = 188 teams[1][9] = 168 teams[2][9] = 156 teams[3][9] = 218 teams[4][9] = 160 teams[5][9] = 202 teams[6][9] = 244 teams[7][9] = 184 teams[8][9] = 156 teams[9][9] = 152 teams[10][9] = 140

We are now adding the scores from each teams from the third league meet of the 2017/2018 season as new columns 8 and 9 to the array.

teams[0][10] = 5 teams[1][10] = 8 teams[2][10] = 3 teams[3][10] = 7 teams[4][10] = 2 teams[5][10] = 6 teams[6][10] = 6 teams[7][10] = 3 teams[8][10] = 2 teams[9][10] = 0 teams[10][10] = 8 teams[0][11] = 400 teams[1][11] = 312 teams[2][11] = 363 teams[3][11] = 400 teams[4][11] = 346 teams[5][11] = 332 teams[6][11] = 330 teams[7][11] = 413 teams[8][11] = 289 teams[9][11] = 0 teams[10][11] = 267

We now add the results from the league tournament final qualifying rounds of the 2017/2018 season as new columns 10 and 11 to the array.

Now, what we need to do is calculate the total qualifying points, which determines placement. This is done by calculating the sum of all qualifying points for each team individually. This was stored in columns 4, 6, 8, & 10 in the array.

In the event of a tie in the qualifying points, we take the sum of the 3 highest ranking points scores for each team. The team with the higher ranking points wins the tie-break. The ranking points are stored in columns 5, 7, 9, & 11 in the array.

Calculating the qualifying points for each team is somewhat easy and can be done using simple arithmetic functions.

teams[0][12] = teams[0][4] + teams[0][6] + teams[0][8] + teams [0][10] teams[1][12] = teams[1][4] + teams[1][6] + teams[1][8] + teams [1][10] teams[2][12] = teams[2][4] + teams[2][6] + teams[2][8] + teams [2][10] teams[3][12] = teams[3][4] + teams[3][6] + teams[3][8] + teams [3][10] teams[4][12] = teams[4][4] + teams[4][6] + teams[4][8] + teams [4][10] teams[5][12] = teams[5][4] + teams[5][6] + teams[5][8] + teams [5][10] teams[6][12] = teams[6][4] + teams[6][6] + teams[6][8] + teams [6][10] teams[7][12] = teams[7][4] + teams[7][6] + teams[7][8] + teams [7][10] teams[8][12] = teams[8][4] + teams[8][6] + teams[8][8] + teams [8][10] teams[9][12] = teams[9][4] + teams[9][6] + teams[9][8] + teams [9][10] teams[10][12] = teams[10][4] + teams[10][6] + teams[10][8] + teams [10][10]

As you can see, we have added column 12 to the array and it holds the sum of columns 4, 6, 8, & 10 for the given row. This is the total qualifying points.

We can add a “test-print” using the following:

print(teams[0][0] + " - " + str(teams[0][12])) print(teams[1][0] + " - " + str(teams[1][12])) print(teams[2][0] + " - " + str(teams[2][12])) print(teams[3][0] + " - " + str(teams[3][12])) print(teams[4][0] + " - " + str(teams[4][12])) print(teams[5][0] + " - " + str(teams[5][12])) print(teams[6][0] + " - " + str(teams[6][12])) print(teams[7][0] + " - " + str(teams[7][12])) print(teams[8][0] + " - " + str(teams[8][12])) print(teams[9][0] + " - " + str(teams[9][12])) print(teams[10][0] + " - " + str(teams[10][12]))

You can see that we are displaying the team number from column 0, concatenated with a space a hyphen and space, which is then concatenated with the values from column 12 cast as a string.

The output looks similar to the following:

Python 3.6.1 (default, Dec 2015, 13:05:11) [GCC 4.8.2] on linux 127 - 23 5443 - 18 9402 - 15 9403 - 29 10143 - 14 11085 - 16 11242 - 28 12645 - 19 12650 - 12 12992 - 6 13915 - 14

Next class, we will take a look at how to calculate the tie-breaker. As you can see, it will be needed as there is a tie between FTC 10143 and FTC 13915.