From d84b34493d71291dd14597ac99d3a2a84484c2fc Mon Sep 17 00:00:00 2001 From: lolabird Date: Sat, 23 Sep 2023 18:03:40 -0600 Subject: [PATCH] Add Chapter 7 Exercises --- thinkcspy/Exercises/Exercises.md | 248 ++++++++++++++++++++++ thinkcspy/Exercises/Exercises/1_image.png | Bin 0 -> 10222 bytes thinkcspy/Exercises/Exercises/2_image.png | Bin 0 -> 4122 bytes thinkcspy/Exercises/Exercises/3_image.png | Bin 0 -> 3787 bytes thinkcspy/Exercises/Exercises/image.png | Bin 0 -> 11048 bytes 5 files changed, 248 insertions(+) create mode 100644 thinkcspy/Exercises/Exercises.md create mode 100644 thinkcspy/Exercises/Exercises/1_image.png create mode 100644 thinkcspy/Exercises/Exercises/2_image.png create mode 100644 thinkcspy/Exercises/Exercises/3_image.png create mode 100644 thinkcspy/Exercises/Exercises/image.png diff --git a/thinkcspy/Exercises/Exercises.md b/thinkcspy/Exercises/Exercises.md new file mode 100644 index 0000000..f63727b --- /dev/null +++ b/thinkcspy/Exercises/Exercises.md @@ -0,0 +1,248 @@ +# Exercises +Problem 4 +--------- + +> Modify the turtle bar chart program from the previous chapter so that the bar for any value of 200 or more is filled with red, values between \[100 and 200) are filled yellow, and bars representing values less than 100 are filled green. + +Back at it with the turtle bar! See the last problem in chapter 6 for context.  + +This one was more involved than I expected. Plus there is some unexpected behavior that I haven't quite figured out. When I tried to assign color to `alex`, it would write every number except the one to the furthest right. I have no idea why, at least not yet. My Solution was just to not include `alex` in the `getColor` function. To be honest, it looks better that why, but it's still bothering me that the last number gets left out like that. + +```text-x-python +# Runestone.Academy thinkcspy course +# Chapter 7 +# Problem 4 + +import turtle + +def getColor(tf, tw, height): + if height >= 200: + tf.fillcolor("red") + elif height >= 100: + tf.fillcolor("yellow") + else: + tf.fillcolor("green") + +def writeData(tt, height): + tt.up() + tt.left(90) + tt.forward(height+10) + tt.right(90) + tt.forward(10) + tt.write(str(height)) + tt.forward(30) + tt.right(90) + tt.forward(height+10) + tt.left(90) + + +def drawBar(t, height): + """ Get turtle t to draw one bar, of height. """ + t.begin_fill() # start filling this shape + t.left(90) + t.forward(height) + t.right(90) + t.forward(40) + t.right(90) + t.forward(height) + t.left(90) + t.end_fill() # stop filling this shape + + + +xs = [48, 117, 200, 240, 160, 260, 220] # here is the data +maxheight = max(xs)+10 +numbars = len(xs) +border = 10 + +wn = turtle.Screen() # Set up the window and its attributes +wn.setworldcoordinates(0-border, 0-border, 40*numbars+border, maxheight+border) +wn.bgcolor("lightblue") +wn.tracer(100) + +tess = turtle.Turtle() # create tess and set some attributes +tess.color("black") +tess.pensize(3) + +alex = turtle.Turtle() + +for a in xs: + getColor(tess, alex, a) + drawBar(tess, a) + writeData(alex, a) + + +wn.exitonclick() +``` + +Result: + +![](Exercises/image.png) + +Problem 5 +--------- + +> In the turtle bar chart program, what do you expect to happen if one or more of the data values in the list is negative? Go back and try it out. Change the program so that when it prints the text value for the negative bars, it puts the text above the base of the bar (on the 0 axis) + +No new functions this time, but I did have to adjust the `writeData` function, the world coordinates and the data, itself, of course.  + +```text-x-python +# Runestone.Academy thinkcspy course +# Chapter 7 +# Problem 5 + +import turtle + +def getColor(tf, tw, height): + if height >= 200: + tf.fillcolor("red") + elif height >= 100: + tf.fillcolor("yellow") + else: + tf.fillcolor("green") + +def writeData(tt, height): + if height < 0: + writeHeight = 0 + else: + writeHeight = height + + tt.up() + tt.left(90) + tt.forward(writeHeight+10) + tt.right(90) + tt.forward(10) + tt.write(str(height)) + tt.forward(30) + tt.right(90) + tt.forward(writeHeight+10) + tt.left(90) + + +def drawBar(t, height): + """ Get turtle t to draw one bar, of height. """ + t.begin_fill() # start filling this shape + t.left(90) + t.forward(height) + t.right(90) + t.forward(40) + t.right(90) + t.forward(height) + t.left(90) + t.end_fill() # stop filling this shape + + + +xs = [48, 117, -200, 240, 160, -260, 220] # here is the data +maxheight = max(xs)+10 +minheight = min(xs)-10 +numbars = len(xs) +border = 10 + +wn = turtle.Screen() # Set up the window and its attributes +wn.setworldcoordinates(0-border, 0+minheight, 40*numbars+border, maxheight+border) +wn.bgcolor("lightblue") +wn.tracer(100) + +tess = turtle.Turtle() # create tess and set some attributes +tess.color("black") +tess.pensize(3) + +alex = turtle.Turtle() + +for a in xs: + getColor(tess, alex, a) + drawBar(tess, a) + writeData(alex, a) + + +wn.exitonclick() +``` + +Result: + +![](Exercises/1_image.png) + +Problem 13 +---------- + +> Implement the calculator for the date of Easter. +> +> The following algorithm computes the date for Easter Sunday for any year between 1900 to 2099. +> +> Ask the user to enter a year. Compute the following: +> +> 1. a = year % 19 +> 2. b = year % 4 +> 3. c = year % 7 +> 4. d = (19 \* a + 24) % 30 +> 5. e = (2 \* b + 4 \* c + 6 \* d + 5) % 7 +> 6. dateofeaster = 22 + d + e +> +> Special note: The algorithm can give a date in April. Also, if the year is one of four special years (1954, 1981, 2049, or 2076) then subtract 7 from the date. +> +> Your program should print an error message if the user provides a date that is out of range. + +We had to figure out the leap year in problem 12: + +> 3 criteria must be taken into account to identify leap years: +> +> The year is evenly divisible by 4; +> +> If the year can be evenly divided by 100, it is NOT a leap year, unless; +> +> The year is also evenly divisible by 400. Then it is a leap year. +> +> Write a function that takes a year as a parameter and returns `True` if the year is a leap year, `False` otherwise. + +```text-x-python +# Runestone.Academy thinkcspy course +# Chapter 7 +# Problem 13 + +def isLeap(year): + # your code here + if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0: + return True + else: + return False + +def easter(year): + a = year % 19 + b = year % 4 + c = year % 7 + d = (19 * a + 24) % 30 + e = (2 * b + 4 * c + 6 * d + 5) % 7 + + if year >= 1900 and year <= 2099: + if isLeap(year): + dateofeaster = 22 + d + e - 7 + else: + dateofeaster = 22 + d + e + else: + dateofeaster = 0 + + return dateofeaster + +def convertDate(year): + date = easter(year) + + if date == 0: + print("Error: Date is out of range.") + elif date <= 30: + print("In", year, "Easter falls on March", date - 1, ".") + else: + print("In", year, "Easter falls on April", date - 31, ".") + +userYear = int(input("Enter a year between 1900 and 2099.")) + +convertDate(userYear) +``` + +Result in range: + +![](Exercises/2_image.png) + +Result out of range: + +![](Exercises/3_image.png) \ No newline at end of file diff --git a/thinkcspy/Exercises/Exercises/1_image.png b/thinkcspy/Exercises/Exercises/1_image.png new file mode 100644 index 0000000000000000000000000000000000000000..5033c63f6908b2a7c365cf7279559ba37e2331c1 GIT binary patch literal 10222 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 JDm3gP{sWq!J`w-` literal 0 HcmV?d00001 diff --git a/thinkcspy/Exercises/Exercises/image.png b/thinkcspy/Exercises/Exercises/image.png new file mode 100644 index 0000000000000000000000000000000000000000..98e5a7bc61e0619777b65738de0375419461b8b7 GIT binary patch literal 11048 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 literal 0 HcmV?d00001