From 3f04fb8cbb01e211f4e1d512a35e93d08bd96923 Mon Sep 17 00:00:00 2001 From: robert Date: Mon, 10 Aug 2020 10:51:08 -0400 Subject: [PATCH 01/25] fc --- web/help/ztest.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 web/help/ztest.md diff --git a/web/help/ztest.md b/web/help/ztest.md new file mode 100644 index 000000000..30d74d258 --- /dev/null +++ b/web/help/ztest.md @@ -0,0 +1 @@ +test \ No newline at end of file From b60a0fe185dec68eee8aede482fc285fba8471db Mon Sep 17 00:00:00 2001 From: robert Date: Mon, 10 Aug 2020 14:45:03 -0400 Subject: [PATCH 02/25] sc --- web/help/ztest.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/help/ztest.md b/web/help/ztest.md index 30d74d258..bdf08de0f 100644 --- a/web/help/ztest.md +++ b/web/help/ztest.md @@ -1 +1 @@ -test \ No newline at end of file +test file \ No newline at end of file From eec32955f1c3a68d7ba58aa044d3a74c13e02476 Mon Sep 17 00:00:00 2001 From: robert Date: Sun, 16 Aug 2020 16:23:25 -0400 Subject: [PATCH 03/25] notes1 --- web/help/rlt-notes-unit1.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 web/help/rlt-notes-unit1.md diff --git a/web/help/rlt-notes-unit1.md b/web/help/rlt-notes-unit1.md new file mode 100644 index 000000000..f5505d5df --- /dev/null +++ b/web/help/rlt-notes-unit1.md @@ -0,0 +1,14 @@ +If you do not leave a space before and after the & the popup does not show +If the student makes change and clicks an example they get a warning. It might be beneficial to mention something about this and/or saving. + +Should variable really be constant since you cannot re-assign it a new value? +Ex. program=xxx +nameTag=xxx +nameTag=yyy + +Might want to mention the red x error shows when using a variable before it's defined. + + + + + From 466e082e8903f3fa8bf01ddf1af507bd2a41a2fc Mon Sep 17 00:00:00 2001 From: robert Date: Sun, 16 Aug 2020 16:26:22 -0400 Subject: [PATCH 04/25] One third. First pass editing --- web/help/GuideUnit1.md | 66 ++++++++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 25 deletions(-) diff --git a/web/help/GuideUnit1.md b/web/help/GuideUnit1.md index 999c3af67..2caa7bac0 100644 --- a/web/help/GuideUnit1.md +++ b/web/help/GuideUnit1.md @@ -47,26 +47,23 @@ Here's the code you just wrote and what its parts mean. | My program | is | a drawing of | the CodeWorld logo. | | * `program` is the **variable** that you're defining. A variable is a name for - something. In most math, variables are just one letter long, and they stand - for numbers. In CodeWorld, though, variables can name many different types of - values: numbers, pictures, colors, text, and even whole programs. Because - you will use so many of them, you can name variables with whole words, - always starting with a *lower-case* letter. + something. Usually in math, variables are just one letter long and store + numbers. In CodeWorld, though, variables can store many different types of + things: numbers, pictures, colors, text, and even whole programs. Because + you will use so many of them, you can name variables with whole words. There are some rules for naming variables. Most importantly, they must start with a *lower-case* letter and cannot contain spaces. !!! collapsible: Camel case Sometimes, you may want more than one word to name a variable! The - computer needs each variable to be a single word starting with a lower-case - letter--so leave out the spaces. To make it easier to tell when a new word - starts, you can capitalize the *second* and *later* words. + computer needs each variable to be a single word or collection of words starting with a lower-case + letter. But leave out spaces between words. To make it easier to tell when a new word starts, you can capitalize the *second* and *later* words. ![](camel.png width="30%") - In your first programs, `drawingOf` and `codeWorldLogo` were written in + In your first program, `drawingOf` and `codeWorldLogo` were written in this way. It's often called **camel case**. Why? Because the variable name has humps! -* The **equal sign** means "is" and tells the computer that two expressions mean - the same thing. It is used to connect a variable with its definition. +* The **equal sign** means "is" and assigns the expressions on the right to the variable on the left. The variable must always be on the left. * `drawingOf` is called a **function**. You'll use functions a lot, and you'll learn more about them later! This particular function, `drawingOf`, tells the @@ -84,13 +81,13 @@ Building a nametag Of course, you can do a lot more in CodeWorld than just look at the CodeWorld logo! Next, you can build a digital nametag for yourself. To do this, you'll start by telling your computer that your program should be a drawing -of a nametag. +of a nametag. Type (or just click on) this code: ~~~~~ . clickable program = drawingOf(nametag) ~~~~~ -**This program doesn't work!** If you've typed everything correctly, you should +**This program doesn't work!** When you click the **Run** button, you should see an error message: `Variable not in scope: nametag :: Picture`. This is your computer telling you that it doesn't know what `nametag` means! @@ -124,14 +121,18 @@ nametag = lettering("Camille") You've used a new function: **`lettering`**. This function describes a picture with letters (or any other kind of text) on it. +Did you notice the word **Compiling** popped up and went away? This is the computer reading your instructions to make sure they are correct before executing them. + Next, you can add a border to your nametag. You might be tempted to add a new line like `nametag = ...` to your code, but you can't! Remember, your code is like a dictionary, and each definition in it should give the whole definition for that word. To include a second shape in your -nametag, you'll use **`&`**, which you can read as "and" or "in front +nametag, you'll use an *operator*, **`&`**, which you can read as "and" or "in front of". To describe the border itself, two more functions -- **`circle`** and **`rectangle`** -- are useful. +An **operator**, as you will see later, allows you to perform an operation. In this case, combine two things together. + Here's a name tag with a border: ~~~~~ . clickable @@ -186,7 +187,7 @@ Try these examples to learn more: the computer will be confused and think you're defining a new variable. This can cause a `Parse error` message. -Once you've understood these examples, try your own combinations as well. +Once you've understood these examples, try changing the numbers or making other changes. Understanding mistakes ---------------------- @@ -239,7 +240,8 @@ went wrong. ~~~~~ . clickable program = drawingOf(nametag) - nametag = lettering("Emma") & circle(10) + nametag = lettering("Emma") & + circle(10) ~~~~~ This error can also tell you that you have an open parethesis -- **(** -- @@ -355,9 +357,7 @@ favoriteColor = blue More on that later! -Each of these lines is an **equation**, which says that two expressions are -*equal*, or have the same value. In math, you use equations in many -ways, but in CodeWorld they are used specifically to *define variables*. +Each of these is a type of **equation**, which says assign the value on the right to the name on the left. You have seen this type of equation in math, often with variables x and y. For example, in math, you might see x=10 and y=20. When you define a variable, you can use it in the rest of your code. @@ -395,7 +395,7 @@ border = circle(5) If you run the code, you might be surprised to find there is no border! You've told your computer what the word `border` means, but you didn't -say you wanted one in your program! +say you wanted to use it in your program! You might try this instead: @@ -427,7 +427,7 @@ doesn't know, it will look up *those* words, and so on. Remember: a definition only matters if the variable you're defining is *used*, either directly or indirectly, in the definition of `program`. That is, in the definition of `program`, or the definition of another -variable that's used in the definition of program, or so on. +variable that's used in the definition of program, and so on. !!! Tip: Warnings When you write code that is correct, but could be improved, you will @@ -517,6 +517,16 @@ letters of the function you want, you can narrow down the list. The type signatures tell you what types of information you need to provide to apply the function and what type you can expect to end up with. +**Important**: The names of functions are *reserved*. That means you cannot use them as variable names. You would not be able to write program like this: + +program=drawingOf(circle) +circle=circle(5) + +Wherease this would be okay: + +program=drawingOf(myCircle) +myCircle=circle(5) + For practice, see if you can write code using each of the following functions. Start by looking up their domain and range, using Shift-Space or Ctrl-Space, and see if you can use them with just that hint. If you need @@ -660,10 +670,9 @@ Coloring -------- The first transformation you will use is coloring. The `colored` function -changes the color of a picture. This function expects two arguments: the -preimage, and a new color. The colors of the preimage don't matter at +changes (transforms) the color of a picture. This function expects two arguments: the preimage, and a new color. The colors of the preimage don't matter at all -- only the shapes involved. The result of the `colored` function is a new -picture, which is just like the preimage, except for the different color. +picture, which is just like the preimage, except for the different color. It has been transformed! ~~~~~ . clickable program = drawingOf(redWheel) @@ -796,7 +805,14 @@ the point (0, 0) -- on the coordinate plane, so you should measure your x and y distances from there. As you define your own pictures, it's a good idea to continue this practice. -For example, suppose you wanted a circle representing the sun in the top left +To see a circle with radius 5 drawn on the corrdinate plane, use this code: + + ~~~~~ . clickable + program = drawingOf(coordinatePlane & circle(5)) + ~~~~~ + + +Suppose you wanted a circle representing the sun in the top left corner of the screen. First, you could look at the *x* *axis*, and see that negative numbers are used to move a shape to the left. You might pick -5, which is five units left on the screen. Next, you could look at the From 9c401c528e0639a6ae5d2649568bedb57033c311 Mon Sep 17 00:00:00 2001 From: robert Date: Thu, 20 Aug 2020 07:29:57 -0400 Subject: [PATCH 05/25] Edits after first pull request --- web/help/GuideUnit1.md | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/web/help/GuideUnit1.md b/web/help/GuideUnit1.md index 2caa7bac0..aae68871c 100644 --- a/web/help/GuideUnit1.md +++ b/web/help/GuideUnit1.md @@ -47,15 +47,15 @@ Here's the code you just wrote and what its parts mean. | My program | is | a drawing of | the CodeWorld logo. | | * `program` is the **variable** that you're defining. A variable is a name for - something. Usually in math, variables are just one letter long and store - numbers. In CodeWorld, though, variables can store many different types of - things: numbers, pictures, colors, text, and even whole programs. Because - you will use so many of them, you can name variables with whole words. There are some rules for naming variables. Most importantly, they must start with a *lower-case* letter and cannot contain spaces. + something. Usually in math, variables are just one letter long and stand for + numbers. In CodeWorld, though, variables can name many different types of + values: numbers, pictures, colors, text, and even whole programs. Because + you will use so many of them, you can name variables with whole words. + There are some rules for naming variables. Most importantly, they must start + with a *lower-case* letter and cannot contain spaces. !!! collapsible: Camel case - Sometimes, you may want more than one word to name a variable! The - computer needs each variable to be a single word or collection of words starting with a lower-case - letter. But leave out spaces between words. To make it easier to tell when a new word starts, you can capitalize the *second* and *later* words. + Sometimes, you may want more than one word to name a variable! Since variables cannot have spaces, you should leave them out and just run words together. To make it easier to tell when a new word starts, you can capitalize the *second* and *later* words. ![](camel.png width="30%") @@ -121,8 +121,6 @@ nametag = lettering("Camille") You've used a new function: **`lettering`**. This function describes a picture with letters (or any other kind of text) on it. -Did you notice the word **Compiling** popped up and went away? This is the computer reading your instructions to make sure they are correct before executing them. - Next, you can add a border to your nametag. You might be tempted to add a new line like `nametag = ...` to your code, but you can't! Remember, your code is like a dictionary, and each definition in it should give From a17a7a5105f79688a71492eb0fa306f6ffac3cfd Mon Sep 17 00:00:00 2001 From: robert Date: Fri, 21 Aug 2020 08:16:16 -0400 Subject: [PATCH 06/25] Removed references to variable stores and assigns --- web/help/GuideUnit1.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web/help/GuideUnit1.md b/web/help/GuideUnit1.md index aae68871c..2067dd007 100644 --- a/web/help/GuideUnit1.md +++ b/web/help/GuideUnit1.md @@ -63,7 +63,8 @@ Here's the code you just wrote and what its parts mean. this way. It's often called **camel case**. Why? Because the variable name has humps! -* The **equal sign** means "is" and assigns the expressions on the right to the variable on the left. The variable must always be on the left. +* The **equal sign** means "is" and tells the computer that the two expressions mean the + same thing. It is used to connect a variable with its definition. * `drawingOf` is called a **function**. You'll use functions a lot, and you'll learn more about them later! This particular function, `drawingOf`, tells the From 03f4d68180907fd9152262c080885e0c0dc67427 Mon Sep 17 00:00:00 2001 From: robert Date: Fri, 21 Aug 2020 08:23:36 -0400 Subject: [PATCH 07/25] Removed premature reference to operator --- web/help/GuideUnit1.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/web/help/GuideUnit1.md b/web/help/GuideUnit1.md index 2067dd007..3ef7290d0 100644 --- a/web/help/GuideUnit1.md +++ b/web/help/GuideUnit1.md @@ -130,8 +130,6 @@ nametag, you'll use an *operator*, **`&`**, which you can read as "and" or "in f of". To describe the border itself, two more functions -- **`circle`** and **`rectangle`** -- are useful. -An **operator**, as you will see later, allows you to perform an operation. In this case, combine two things together. - Here's a name tag with a border: ~~~~~ . clickable From deb5c38bdc12355f0decdb8a5b96298ef9326373 Mon Sep 17 00:00:00 2001 From: robert Date: Sat, 22 Aug 2020 07:40:37 -0400 Subject: [PATCH 08/25] Cleared prior notes added one --- web/help/rlt-notes-unit1.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/web/help/rlt-notes-unit1.md b/web/help/rlt-notes-unit1.md index f5505d5df..aababb4a2 100644 --- a/web/help/rlt-notes-unit1.md +++ b/web/help/rlt-notes-unit1.md @@ -1,12 +1,14 @@ -If you do not leave a space before and after the & the popup does not show -If the student makes change and clicks an example they get a warning. It might be beneficial to mention something about this and/or saving. +Did you mean to reference a butterfly but not draw one? +I understand your point. Just wondering if the student might be +expecting a butterfly? Probably not if they understand polyline +at this point but just making sure. + + A neat trick is to use the coordinate plane as you write your code. Say you want to draw a butterfly. You might start by writing: + +program = drawingOf(butterfly & coordinatePlane) +butterfly = polyline([ ]) -Should variable really be constant since you cannot re-assign it a new value? -Ex. program=xxx -nameTag=xxx -nameTag=yyy -Might want to mention the red x error shows when using a variable before it's defined. From f051f9400425eb8493aeb6943c01bdf7648d2ad4 Mon Sep 17 00:00:00 2001 From: robert Date: Wed, 26 Aug 2020 10:10:44 -0400 Subject: [PATCH 09/25] Add butterfly --- web/help/GuideUnit1.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/web/help/GuideUnit1.md b/web/help/GuideUnit1.md index 3ef7290d0..10344eded 100644 --- a/web/help/GuideUnit1.md +++ b/web/help/GuideUnit1.md @@ -1842,7 +1842,9 @@ you want to draw a butterfly. You might start by writing: ~~~~~ . clickable program = drawingOf(butterfly & coordinatePlane) -butterfly = polyline([ ]) +butterfly=leftWing & rightWing +leftWing = polyline([(0,0),(-1,2),(-3,4),(-4,4),(-5,3),(-5,-3),(-4,-4),(-3,-4),(-1,-2),(0,0) ]) +rightWing= polyline([(0,0),(1,2),(3,4),(4,4),(5,3),(5,-3),(4,-4),(3,-4),(1,-2),(0,0) ]) ~~~~~ Now run your program, and you have a coordinate plane to measure what From 7b5e2d92bd1ffe3b43e557509e9a09ca8241dbce Mon Sep 17 00:00:00 2001 From: robert Date: Sun, 30 Aug 2020 09:13:13 -0400 Subject: [PATCH 10/25] Add arc and sector example --- web/help/GuideUnit1.md | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/web/help/GuideUnit1.md b/web/help/GuideUnit1.md index 10344eded..d3ca63ddd 100644 --- a/web/help/GuideUnit1.md +++ b/web/help/GuideUnit1.md @@ -1842,9 +1842,7 @@ you want to draw a butterfly. You might start by writing: ~~~~~ . clickable program = drawingOf(butterfly & coordinatePlane) -butterfly=leftWing & rightWing -leftWing = polyline([(0,0),(-1,2),(-3,4),(-4,4),(-5,3),(-5,-3),(-4,-4),(-3,-4),(-1,-2),(0,0) ]) -rightWing= polyline([(0,0),(1,2),(3,4),(4,4),(5,3),(5,-3),(4,-4),(3,-4),(1,-2),(0,0) ]) +butterfly = polyline([ ]) ~~~~~ Now run your program, and you have a coordinate plane to measure what @@ -1858,7 +1856,7 @@ lines back to the starting point or curving all over the place. Once your points are in the right place, it's easy to change the function to the one you want. -You can see what your shape looks like so far by trying your code out +You can see what your shape looks like at each step by running your code often. Every new vertex or two is a great time to click that Run button and make sure the shape looks the way you expected. @@ -1896,12 +1894,37 @@ y axis, since those are the angles in between the numbers -90 and 90. But the expression `arc(270, 90, 5)` covers the angles to the left of the y axis, because those are the numbers between 270 and 90. +To see a half circle with radius 5 drawn on the corrdinate plane, use this code: + +~~~~~ . clickable +program = drawingOf(halfCircle & coordinatePlane) +halfCircle=arc(-90,90,5) +~~~~~ + Following the same pattern as most other shapes, the `thickArc` function is just like `arc`, except that you give it one extra number representing the -thickness of the line to draw. The `sector` function is sort of like the +thickness of the line to draw. + +To draw half of a tire, use this code: + +~~~~~ . clickable +program = drawingOf(halfTire & coordinatePlane) +halfTire=thickArc(-90,90,5,4) +~~~~~ + +Notice the thickness is split between both sides of the arc. + +The `sector` function is sort of like the solid variant of `arc`, in that it draws one slice of a solid circle. That looks like a piece of pie or pizza. +To draw a slice of pizza, use the code: + +~~~~~ . clickable +program = drawingOf(pizzaSlice & coordinatePlane) +pizzaSlice=sector(0,45,5) +~~~~~ + Transforming colors ------------------- From 0b4ec70b7e4c018ce621cf4a932998d1055e60ac Mon Sep 17 00:00:00 2001 From: robert Date: Mon, 31 Aug 2020 16:35:02 -0400 Subject: [PATCH 11/25] Start butterfly callout. No image yet --- web/help/GuideUnit1.md | 46 +++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/web/help/GuideUnit1.md b/web/help/GuideUnit1.md index d3ca63ddd..a63eca87a 100644 --- a/web/help/GuideUnit1.md +++ b/web/help/GuideUnit1.md @@ -1849,6 +1849,36 @@ Now run your program, and you have a coordinate plane to measure what points to use in your shapes. (When you're done, just remove the `& coordinatePlane` to get rid of the guidelines.) +!!! collapsible: Using the coordinate plane to help draw a butterfly +Let's start the butterfly by first drawing the left wing. +program = drawingOf(butterfly & coordinatePlane) +butterfly=leftWing +leftWing = polyline([(0,0),(-1,2)]) +The corrdinate plane helps us see where we want to draw next. +Extend the left wing to coordinate (-3,4) using, +leftWing = polyline([(0,0),(-1,2),(-3,4)]) +Add a few more vertices to leftWing. +leftWing = polyline([(0,0),(-1,2),(-3,4),(-4,4),(-5,3),(-5,-3)]) +Finish off the left wing using, +leftWing = polyline([(0,0),(-1,2),(-3,4),(-4,4),(-5,3),(-5,-3),(-4,-4), +(-3,-4),(-1,-2),(0,0) ]) +Using a simiar approach, draw the right wing and modify our program +as so, +program = drawingOf(butterfly & coordinatePlane) +butterfly=leftWing & rightWing +leftWing = polyline([(0,0),(-1,2),(-3,4),(-4,4),(-5,3),(-5,-3),(-4,-4), +(-3,-4),(-1,-2),(0,0) ]) +rightWing= polyline([(0,0),(1,2),(3,4),(4,4),(5,3),(5,-3),(4,-4),(3,-4), +(1,-2),(0,0) ]) +Finally, remove the coordinate plane to see the butterfly. +program = drawingOf(butterfly) +butterfly=leftWing & rightWing +leftWing = polyline([(0,0),(-1,2),(-3,4),(-4,4),(-5,3),(-5,-3),(-4,-4), +(-3,-4),(-1,-2),(0,0) ]) +rightWing= polyline([(0,0),(1,2),(3,4),(4,4),(5,3),(5,-3),(4,-4),(3,-4), +(1,-2),(0,0) ]) +Add back in the cooridinate plane and improve the butterfly! + No matter which exact kind of line, curve, or polygon you want in the end, it's usually easier to start with `polyline`. That's because `polyline` shows you exactly where the points you've chosen are, without drawing extra @@ -1897,8 +1927,8 @@ because those are the numbers between 270 and 90. To see a half circle with radius 5 drawn on the corrdinate plane, use this code: ~~~~~ . clickable -program = drawingOf(halfCircle & coordinatePlane) -halfCircle=arc(-90,90,5) +program = drawingOf(halfCircle & coordinatePlane) +halfCircle = arc(-90,90,5) ~~~~~ Following the same pattern as most other shapes, the `thickArc` function is @@ -1908,11 +1938,13 @@ thickness of the line to draw. To draw half of a tire, use this code: ~~~~~ . clickable -program = drawingOf(halfTire & coordinatePlane) -halfTire=thickArc(-90,90,5,4) +program = drawingOf(halfTire & coordinatePlane) +halfTire = thickArc(-90,90,5,4) ~~~~~ -Notice the thickness is split between both sides of the arc. +How is thickness applied to the arc? Notice where the curve intersects +the x axis, it is centered around an x value of 5, but the thickness +extends all the way from 3 through 7. The `sector` function is sort of like the solid variant of `arc`, in that it draws one slice of a solid circle. That @@ -1921,8 +1953,8 @@ looks like a piece of pie or pizza. To draw a slice of pizza, use the code: ~~~~~ . clickable -program = drawingOf(pizzaSlice & coordinatePlane) -pizzaSlice=sector(0,45,5) +program = drawingOf(pizzaSlice & coordinatePlane) +pizzaSlice = sector(0,45,5) ~~~~~ Transforming colors From 5c93e3e756a0d7f718f1fe510a9e5239af50302d Mon Sep 17 00:00:00 2001 From: robert Date: Mon, 31 Aug 2020 16:41:50 -0400 Subject: [PATCH 12/25] Fix butterfly callout. No image yet --- web/help/GuideUnit1.md | 56 +++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/web/help/GuideUnit1.md b/web/help/GuideUnit1.md index a63eca87a..342b42ba5 100644 --- a/web/help/GuideUnit1.md +++ b/web/help/GuideUnit1.md @@ -1850,34 +1850,34 @@ points to use in your shapes. (When you're done, just remove the `& coordinatePlane` to get rid of the guidelines.) !!! collapsible: Using the coordinate plane to help draw a butterfly -Let's start the butterfly by first drawing the left wing. -program = drawingOf(butterfly & coordinatePlane) -butterfly=leftWing -leftWing = polyline([(0,0),(-1,2)]) -The corrdinate plane helps us see where we want to draw next. -Extend the left wing to coordinate (-3,4) using, -leftWing = polyline([(0,0),(-1,2),(-3,4)]) -Add a few more vertices to leftWing. -leftWing = polyline([(0,0),(-1,2),(-3,4),(-4,4),(-5,3),(-5,-3)]) -Finish off the left wing using, -leftWing = polyline([(0,0),(-1,2),(-3,4),(-4,4),(-5,3),(-5,-3),(-4,-4), -(-3,-4),(-1,-2),(0,0) ]) -Using a simiar approach, draw the right wing and modify our program -as so, -program = drawingOf(butterfly & coordinatePlane) -butterfly=leftWing & rightWing -leftWing = polyline([(0,0),(-1,2),(-3,4),(-4,4),(-5,3),(-5,-3),(-4,-4), -(-3,-4),(-1,-2),(0,0) ]) -rightWing= polyline([(0,0),(1,2),(3,4),(4,4),(5,3),(5,-3),(4,-4),(3,-4), -(1,-2),(0,0) ]) -Finally, remove the coordinate plane to see the butterfly. -program = drawingOf(butterfly) -butterfly=leftWing & rightWing -leftWing = polyline([(0,0),(-1,2),(-3,4),(-4,4),(-5,3),(-5,-3),(-4,-4), -(-3,-4),(-1,-2),(0,0) ]) -rightWing= polyline([(0,0),(1,2),(3,4),(4,4),(5,3),(5,-3),(4,-4),(3,-4), -(1,-2),(0,0) ]) -Add back in the cooridinate plane and improve the butterfly! + Let's start the butterfly by first drawing the left wing. + program = drawingOf(butterfly & coordinatePlane) + butterfly=leftWing + leftWing = polyline([(0,0),(-1,2)]) + The corrdinate plane helps us see where we want to draw next. + Extend the left wing to coordinate (-3,4) using, + leftWing = polyline([(0,0),(-1,2),(-3,4)]) + Add a few more vertices to leftWing. + leftWing = polyline([(0,0),(-1,2),(-3,4),(-4,4),(-5,3),(-5,-3)]) + Finish off the left wing using, + leftWing = polyline([(0,0),(-1,2),(-3,4),(-4,4),(-5,3),(-5,-3), + (-4,-4),(-3,-4),(-1,-2),(0,0) ]) + Using a simiar approach, draw the right wing and modify our + program as so, + program = drawingOf(butterfly & coordinatePlane) + butterfly=leftWing & rightWing + leftWing = polyline([(0,0),(-1,2),(-3,4),(-4,4),(-5,3),(-5,-3), + (-4,-4),(-3,-4),(-1,-2),(0,0) ]) + rightWing= polyline([(0,0),(1,2),(3,4),(4,4),(5,3),(5,-3), + (4,-4),(3,-4),(1,-2),(0,0) ]) + Finally, remove the coordinate plane to see the butterfly. + program = drawingOf(butterfly) + butterfly=leftWing & rightWing + leftWing = polyline([(0,0),(-1,2),(-3,4),(-4,4),(-5,3),(-5,-3), + (-4,-4),(-3,-4),(-1,-2),(0,0) ]) + rightWing= polyline([(0,0),(1,2),(3,4),(4,4),(5,3),(5,-3), + (4,-4),(3,-4),(1,-2),(0,0) ]) + Add back in the cooridinate plane and improve the butterfly! No matter which exact kind of line, curve, or polygon you want in the end, it's usually easier to start with `polyline`. That's because `polyline` From 6abd151dc326de6d3750e8fa9918153fcb95681e Mon Sep 17 00:00:00 2001 From: robert Date: Sat, 19 Sep 2020 07:41:12 -0400 Subject: [PATCH 13/25] Improving butterfly --- web/help/GuideUnit1.md | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/web/help/GuideUnit1.md b/web/help/GuideUnit1.md index 342b42ba5..96be7a9ff 100644 --- a/web/help/GuideUnit1.md +++ b/web/help/GuideUnit1.md @@ -1849,35 +1849,55 @@ Now run your program, and you have a coordinate plane to measure what points to use in your shapes. (When you're done, just remove the `& coordinatePlane` to get rid of the guidelines.) -!!! collapsible: Using the coordinate plane to help draw a butterfly - Let's start the butterfly by first drawing the left wing. +!!! collapsible: Using the coordinate plane to help draw a simple + butterfly. Start the butterfly by first drawing the left wing. + + ~~~~~ . clickable program = drawingOf(butterfly & coordinatePlane) butterfly=leftWing leftWing = polyline([(0,0),(-1,2)]) + ~~~~~ + The corrdinate plane helps us see where we want to draw next. Extend the left wing to coordinate (-3,4) using, + + ~~~~~ . clickable leftWing = polyline([(0,0),(-1,2),(-3,4)]) + ~~~~~ + Add a few more vertices to leftWing. + + ~~~~~ . clickable leftWing = polyline([(0,0),(-1,2),(-3,4),(-4,4),(-5,3),(-5,-3)]) Finish off the left wing using, leftWing = polyline([(0,0),(-1,2),(-3,4),(-4,4),(-5,3),(-5,-3), (-4,-4),(-3,-4),(-1,-2),(0,0) ]) - Using a simiar approach, draw the right wing and modify our + ~~~~~ + + Using a similar approach, draw the right wing and modify our program as so, + + ~~~~~ . clickable program = drawingOf(butterfly & coordinatePlane) butterfly=leftWing & rightWing leftWing = polyline([(0,0),(-1,2),(-3,4),(-4,4),(-5,3),(-5,-3), (-4,-4),(-3,-4),(-1,-2),(0,0) ]) rightWing= polyline([(0,0),(1,2),(3,4),(4,4),(5,3),(5,-3), (4,-4),(3,-4),(1,-2),(0,0) ]) + ~~~~~ + Finally, remove the coordinate plane to see the butterfly. + + ~~~~~ . clickable program = drawingOf(butterfly) butterfly=leftWing & rightWing leftWing = polyline([(0,0),(-1,2),(-3,4),(-4,4),(-5,3),(-5,-3), (-4,-4),(-3,-4),(-1,-2),(0,0) ]) rightWing= polyline([(0,0),(1,2),(3,4),(4,4),(5,3),(5,-3), (4,-4),(3,-4),(1,-2),(0,0) ]) - Add back in the cooridinate plane and improve the butterfly! + ~~~~~ + + Your turn. Add back in the cooridinate plane and improve the butterfly! No matter which exact kind of line, curve, or polygon you want in the end, it's usually easier to start with `polyline`. That's because `polyline` From 1a8567152001cd6bebd16dc41cb2af5aeda10f98 Mon Sep 17 00:00:00 2001 From: robert Date: Sat, 19 Sep 2020 07:44:26 -0400 Subject: [PATCH 14/25] Improving butterfly 2 --- web/help/GuideUnit1.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/web/help/GuideUnit1.md b/web/help/GuideUnit1.md index 96be7a9ff..8678174b2 100644 --- a/web/help/GuideUnit1.md +++ b/web/help/GuideUnit1.md @@ -1849,8 +1849,8 @@ Now run your program, and you have a coordinate plane to measure what points to use in your shapes. (When you're done, just remove the `& coordinatePlane` to get rid of the guidelines.) -!!! collapsible: Using the coordinate plane to help draw a simple - butterfly. Start the butterfly by first drawing the left wing. +!!! collapsible: Using the coordinate plane to help draw a simple butterfly. + Start the butterfly by first drawing the left wing. ~~~~~ . clickable program = drawingOf(butterfly & coordinatePlane) @@ -1896,7 +1896,7 @@ points to use in your shapes. (When you're done, just remove the rightWing= polyline([(0,0),(1,2),(3,4),(4,4),(5,3),(5,-3), (4,-4),(3,-4),(1,-2),(0,0) ]) ~~~~~ - + Your turn. Add back in the cooridinate plane and improve the butterfly! No matter which exact kind of line, curve, or polygon you want in the end, From 4890ec9c18202793f17017eceb9d6047d6c97d12 Mon Sep 17 00:00:00 2001 From: robert Date: Sat, 19 Sep 2020 09:03:29 -0400 Subject: [PATCH 15/25] Change to understanding mistakes --- web/help/GuideUnit1.md | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/web/help/GuideUnit1.md b/web/help/GuideUnit1.md index 8678174b2..3e4d0497d 100644 --- a/web/help/GuideUnit1.md +++ b/web/help/GuideUnit1.md @@ -89,7 +89,8 @@ program = drawingOf(nametag) ~~~~~ **This program doesn't work!** When you click the **Run** button, you should -see an error message: `Variable not in scope: nametag :: Picture`. +see an error indicator on the left. Mousing over the indictaor you will see +the message: `Variable not in scope: nametag :: Picture`. This is your computer telling you that it doesn't know what `nametag` means! !!! Tip: Run your program often! @@ -1854,24 +1855,34 @@ points to use in your shapes. (When you're done, just remove the ~~~~~ . clickable program = drawingOf(butterfly & coordinatePlane) - butterfly=leftWing + butterfly = leftWing leftWing = polyline([(0,0),(-1,2)]) ~~~~~ The corrdinate plane helps us see where we want to draw next. - Extend the left wing to coordinate (-3,4) using, + Extend the left wing to coordinate `(-3,4)` using, ~~~~~ . clickable + program = drawingOf(butterfly & coordinatePlane) + butterfly = leftWing leftWing = polyline([(0,0),(-1,2),(-3,4)]) ~~~~~ Add a few more vertices to leftWing. ~~~~~ . clickable + program = drawingOf(butterfly & coordinatePlane) + butterfly = leftWing leftWing = polyline([(0,0),(-1,2),(-3,4),(-4,4),(-5,3),(-5,-3)]) + ~~~~~ + Finish off the left wing using, + + ~~~~~ . clickable + program = drawingOf(butterfly & coordinatePlane) + butterfly = leftWing leftWing = polyline([(0,0),(-1,2),(-3,4),(-4,4),(-5,3),(-5,-3), - (-4,-4),(-3,-4),(-1,-2),(0,0) ]) + (-4,-4),(-3,-4),(-1,-2),(0,0) ]) ~~~~~ Using a similar approach, draw the right wing and modify our @@ -1879,22 +1890,22 @@ points to use in your shapes. (When you're done, just remove the ~~~~~ . clickable program = drawingOf(butterfly & coordinatePlane) - butterfly=leftWing & rightWing + butterfly = leftWing & rightWing leftWing = polyline([(0,0),(-1,2),(-3,4),(-4,4),(-5,3),(-5,-3), - (-4,-4),(-3,-4),(-1,-2),(0,0) ]) - rightWing= polyline([(0,0),(1,2),(3,4),(4,4),(5,3),(5,-3), - (4,-4),(3,-4),(1,-2),(0,0) ]) + (-4,-4),(-3,-4),(-1,-2),(0,0) ]) + rightWing = polyline([(0,0),(1,2),(3,4),(4,4),(5,3),(5,-3), + (4,-4),(3,-4),(1,-2),(0,0) ]) ~~~~~ Finally, remove the coordinate plane to see the butterfly. ~~~~~ . clickable program = drawingOf(butterfly) - butterfly=leftWing & rightWing + butterfly = leftWing & rightWing leftWing = polyline([(0,0),(-1,2),(-3,4),(-4,4),(-5,3),(-5,-3), - (-4,-4),(-3,-4),(-1,-2),(0,0) ]) - rightWing= polyline([(0,0),(1,2),(3,4),(4,4),(5,3),(5,-3), - (4,-4),(3,-4),(1,-2),(0,0) ]) + (-4,-4),(-3,-4),(-1,-2),(0,0) ]) + rightWing = polyline([(0,0),(1,2),(3,4),(4,4),(5,3),(5,-3), + (4,-4),(3,-4),(1,-2),(0,0) ]) ~~~~~ Your turn. Add back in the cooridinate plane and improve the butterfly! From 3e11b42ed6758366ddb5607cdaea0ea94b798b13 Mon Sep 17 00:00:00 2001 From: robert Date: Sat, 19 Sep 2020 09:06:01 -0400 Subject: [PATCH 16/25] Change to understanding mistakes --- web/help/GuideUnit1.md | 147 ++++------------------------------------- 1 file changed, 12 insertions(+), 135 deletions(-) diff --git a/web/help/GuideUnit1.md b/web/help/GuideUnit1.md index 3e4d0497d..f1632307f 100644 --- a/web/help/GuideUnit1.md +++ b/web/help/GuideUnit1.md @@ -187,150 +187,27 @@ Try these examples to learn more: Once you've understood these examples, try changing the numbers or making other changes. -Understanding mistakes +What to do when you make a mistake. ---------------------- As you experminent with your programs, you're likely to try a few things -that don't work. Explore these common error messages to understand what -went wrong. +that don't work. -!!! collapsible: `Parse error: naked expression at top level` - This message means there's something in your program that doesn't look - like a definition. - - If you wrote this: - - ~~~~~ - program = drawingOf(nametag) - - lettering("Jonas") & circle(5) - ~~~~~ - - On the second line, instead of an *equation* to define `nametag`, this - program just wrote an expression. Remember that your code is a - glossary, and everything in it should define a word. To correct this - mistake you would add `nametag =` to the beginning of the second line. - - ~~~~~ . clickable - program = drawingOf(nametag) - - nametag = lettering("Jonas") & circle(5) - ~~~~~ - -!!! collapsible: `parse error (possibly incorrect indentation or mismatched brackets)` - This message can come from a missing *indent*. - - For example, consider this code: - - ~~~~~ - program = drawingOf(nametag) - - nametag = lettering("Emma") & - circle(10) - ~~~~~ - - Here, the programmer meant for `circle(10)` to be part of the - definition of `nametag`. The computer doesn't understand this and - believes it should be a new definition, because it starts against the - left margin. To fix this mistake, you would add a few spaces at the - beginning of the last line to indent it. - - ~~~~~ . clickable - program = drawingOf(nametag) - - nametag = lettering("Emma") & - circle(10) - ~~~~~ - - This error can also tell you that you have an open parethesis -- **(** -- - without a matching close parenthesis -- **)**. - -!!! collapsible: `Multiple declarations of nametag` - This message tells you that you defined the same word in two different - ways. Sometimes this happens in human languages, and we call them - homonyms -- for example, "duck" could mean an animal, or it could mean - dodging a flying object! Your computer, though, can't deal with this, - so each variable can only be defined once. - - Take a look at this program: - - ~~~~~ - program = drawingOf(nametag) - nametag = lettering("Victor") - nametag = circle(10) - ~~~~~ +The error indicator and message on the left can help you figure out +what and where the error is. Keep in mind, however, the error is not always +on the same line as the indicator. This is just the point at which the computer +says *I no lomger understand what you are doing.* - - One line says `nametag` means a picture of the text "Victor", but the - second line says that `nametag` instead means a circle with a radius of - 10. Which one is it? You probably meant for `nametag` to include both. - To do that, you would write one definition for `nametag`, and use - **`&`** to combine the parts. Like this: - - - - ~~~~~ . clickable - program = drawingOf(nametag) - - nametag = lettering("Victor") & circle(10) - ~~~~~ - -!!! collapsible: `Couldn't match type Program with Picture` - Once you've got the hang of using **`&`** to combine pictures, you - might be tempted to use it everywhere! - - For example, you might try to write this: - - ~~~~~ - program = drawingOf(nametag) & drawingOf(border) - - nametag = lettering("Miriam") - border = circle(10) - ~~~~~ - - The problem here is that **`&`** can only combine *pictures*. The - `drawingOf` function turns a picture into a *computer program*, and - you cannot use **`&`** to combine two different computer programs! - - The solution here is to combine the pictures before using the - `drawingOf` function. - - That looks like this: - - ~~~~~ . clickable - program = drawingOf(nametag & border) - - nametag = lettering("Miriam") - border = circle(10) - ~~~~~ - -!!! collapsible: `Couldn't match type Picture with Text` - Just like there's a difference between a computer program and a - picture, there's also a difference between *text* and *pictures*. - - Consider this code: - - ~~~~~ - program = drawingOf(nametag) - nametag = "Haruto" & circle(10) - ~~~~~ - - The text, "Haruto", isn't a picture yet, so it cannot be combined - using **`&`**. Use the `lettering` function to exchange the text - for a picture first, then combine it. - - Like this: - - ~~~~~ . clickable - program = drawingOf(nametag) - nametag = lettering("Haruto") & circle(10) - ~~~~~ +You may also see the error message on the right after clicking **Run**. +In this case, note the error message but, more importantly, the *line and +column numbers*. For example, `Line 6, Column 36`. This is the exact +point at which the computer stopped understanding. Regardless of the message, you can always click on the line and column number next to an error message, and get straight to the location in -your code where the error was recognized. (Be careful. Sometimes your +your code where the error was recognized. (Remember. Sometimes your actual mistake could be earlier!) So just read over it and double-check -that you've typed what you intended. +that you've typed what you intended from that point backwards. Defining variables ------------------ From a77c5adc4565d578089f1c90f48e8318997eecc9 Mon Sep 17 00:00:00 2001 From: robert Date: Sat, 19 Sep 2020 09:20:12 -0400 Subject: [PATCH 17/25] Correct spelling in Mistakes section --- web/help/GuideUnit1.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/web/help/GuideUnit1.md b/web/help/GuideUnit1.md index f1632307f..9abbbbfe9 100644 --- a/web/help/GuideUnit1.md +++ b/web/help/GuideUnit1.md @@ -187,7 +187,7 @@ Try these examples to learn more: Once you've understood these examples, try changing the numbers or making other changes. -What to do when you make a mistake. +What to do when you make a mistake ---------------------- As you experminent with your programs, you're likely to try a few things @@ -196,10 +196,10 @@ that don't work. The error indicator and message on the left can help you figure out what and where the error is. Keep in mind, however, the error is not always on the same line as the indicator. This is just the point at which the computer -says *I no lomger understand what you are doing.* +says *I no longer understand what you are doing.* You may also see the error message on the right after clicking **Run**. -In this case, note the error message but, more importantly, the *line and +In this case, note the error message. But, more importantly, the *line and column numbers*. For example, `Line 6, Column 36`. This is the exact point at which the computer stopped understanding. From 00b1273860c905e4a231204fff8ff949fb8dad98 Mon Sep 17 00:00:00 2001 From: robert Date: Sat, 3 Oct 2020 10:19:13 -0400 Subject: [PATCH 18/25] Added two parse error examples to 3.1 --- web/help/GuideUnit1.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/web/help/GuideUnit1.md b/web/help/GuideUnit1.md index 9abbbbfe9..5a6c78bcd 100644 --- a/web/help/GuideUnit1.md +++ b/web/help/GuideUnit1.md @@ -1244,6 +1244,39 @@ parenthesis -- and help divide up your code into logical parts. As you nest expressions deeper, though, it becomes more challenging to match up these parentheses. +!!! collapsible: `Parse error: Are you missing a parenthesis?` + This is one error you may get if your parentheses do not + match. The part telling you the line and column can + help you track where the computer noticed the error. + + That, along with the information in this section, can help you + track down the mismatch. + + If you wrote this, with a missing right parenthesis after the 5, + you would get the error: + + ~~~~~ + program = drawingOf(colored(circle(5 & rectangle(1, 2), blue)) + ~~~~~ + + Notice that often the computer does not catch it until the + end of the program. + +!!! collapsible: `Parse error on input` + This is another error you may get if your parentheses do not + match. This one is often caused by a missing left parenthesis. + + If you wrote this, with a missing left parenthesis before the 5, + you would get the error: + + ~~~~~ + program = drawingOf(colored(circle 5) & rectangle(1, 2), blue)) + ~~~~~ + + Notice that often the computer does not catch it until the + end of the program. + + A good way to start matching parentheses is to look at each pair as making a ring around the code inside them. If you write the expression on paper, you can complete the ring by joining the edges of the parentheses. You From 0f35720531d5dceda2320a911fdbe16d1fda80ce Mon Sep 17 00:00:00 2001 From: robert Date: Sat, 3 Oct 2020 10:25:46 -0400 Subject: [PATCH 19/25] Added two parse error examples to 3.3 --- web/help/GuideUnit1.md | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/web/help/GuideUnit1.md b/web/help/GuideUnit1.md index 5a6c78bcd..d0c66d559 100644 --- a/web/help/GuideUnit1.md +++ b/web/help/GuideUnit1.md @@ -1245,13 +1245,10 @@ As you nest expressions deeper, though, it becomes more challenging to match up these parentheses. !!! collapsible: `Parse error: Are you missing a parenthesis?` - This is one error you may get if your parentheses do not - match. The part telling you the line and column can - help you track where the computer noticed the error. - - That, along with the information in this section, can help you - track down the mismatch. - + This is one prse error you may get if your parentheses + do not match. The part of the error message telling you the + line and column numbers may help you track where the computer noticed the error. + If you wrote this, with a missing right parenthesis after the 5, you would get the error: @@ -1263,8 +1260,9 @@ match up these parentheses. end of the program. !!! collapsible: `Parse error on input` - This is another error you may get if your parentheses do not - match. This one is often caused by a missing left parenthesis. + This is another parse error you may get if your parentheses + do not match. This one is often caused by a missing left + parenthesis. If you wrote this, with a missing left parenthesis before the 5, you would get the error: @@ -1273,9 +1271,6 @@ match up these parentheses. program = drawingOf(colored(circle 5) & rectangle(1, 2), blue)) ~~~~~ - Notice that often the computer does not catch it until the - end of the program. - A good way to start matching parentheses is to look at each pair as making a ring around the code inside them. If you write the expression on paper, From 1353af4c4f3583e19981daa729e1520d444e7b01 Mon Sep 17 00:00:00 2001 From: robert Date: Sat, 3 Oct 2020 10:56:41 -0400 Subject: [PATCH 20/25] Added exercise to section 1.2 --- web/help/GuideUnit1.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/web/help/GuideUnit1.md b/web/help/GuideUnit1.md index d0c66d559..4939b9ad6 100644 --- a/web/help/GuideUnit1.md +++ b/web/help/GuideUnit1.md @@ -187,6 +187,22 @@ Try these examples to learn more: Once you've understood these examples, try changing the numbers or making other changes. +!!! collapsible: `Exercise` + Use the knowledge gained so far to create this picture. + + ![](nametag_exercise_1.2.jpg width="30%") + + +!!! collapsible: `Exercise Solution` + This is one solution to the exercise. + + ~~~~~ . clickable + program = drawingOf(nametag) + nametag = lettering("Diego") & rectangle(6, 2) & + circle(4) & circle(5) & circle(6) + ~~~~~ + + What to do when you make a mistake ---------------------- From a739e6a6cd995f46f7e64c0e12c24346fde02577 Mon Sep 17 00:00:00 2001 From: robert Date: Sat, 3 Oct 2020 11:01:16 -0400 Subject: [PATCH 21/25] Added exercise to section 1.2 --- web/help/GuideUnit1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/help/GuideUnit1.md b/web/help/GuideUnit1.md index 4939b9ad6..de45f7b11 100644 --- a/web/help/GuideUnit1.md +++ b/web/help/GuideUnit1.md @@ -190,7 +190,7 @@ Once you've understood these examples, try changing the numbers or making other !!! collapsible: `Exercise` Use the knowledge gained so far to create this picture. - ![](nametag_exercise_1.2.jpg width="30%") + ![](nametag-exercise1-2.jpg width="30%") !!! collapsible: `Exercise Solution` From 03af14b490237ad355da61ec9cbbeb0d25a50967 Mon Sep 17 00:00:00 2001 From: robert Date: Sat, 3 Oct 2020 11:02:09 -0400 Subject: [PATCH 22/25] Added exercise 1.2 image --- web/help/nametag-exercise1-2.jpg | Bin 0 -> 21579 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 web/help/nametag-exercise1-2.jpg diff --git a/web/help/nametag-exercise1-2.jpg b/web/help/nametag-exercise1-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eb381e3873220417a707a7f3b86ca442590b7b8e GIT binary patch literal 21579 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 literal 0 HcmV?d00001 From 9e6b278160f67ad4dbf92c6376d5a154e1016dd8 Mon Sep 17 00:00:00 2001 From: robert Date: Sat, 3 Oct 2020 11:25:18 -0400 Subject: [PATCH 23/25] Added exercise to section 1.4 --- web/help/GuideUnit1.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/web/help/GuideUnit1.md b/web/help/GuideUnit1.md index de45f7b11..ea2ee6c8d 100644 --- a/web/help/GuideUnit1.md +++ b/web/help/GuideUnit1.md @@ -299,6 +299,34 @@ border = circle(5) That extra `& border` tells your computer that you actually *want* a border in the name tag. Defining it isn't enough. +!!! collapsible: `Exercise` + Use this code from the exercise in section 1.2. + + program = drawingOf(nametag) + nametag = lettering("Diego") & rectangle(6, 2) & + circle(4) & circle(5) & circle(6) + + Use a variable to define the name. + + By defining the name with a variable, you could create + multiple name tags with different names in them by + simply changing the definition of the variable. + + +!!! collapsible: `Exercise Solution` + This is one solution to the exercise. + + ~~~~~ . clickable + program = drawingOf(nametag) + nametag = lettering(name) & rectangle(6, 2) & + circle(4) & circle(5) & circle(6) + name = "Jane" + ~~~~~ + + Try changing name to some other value and re-run the + program. + + ### The `program` variable Remember that defining a variable doesn't do anything by itself. But your From a10b670a44dc2f7714695f8a7545f506455a7dcc Mon Sep 17 00:00:00 2001 From: robert Date: Sat, 3 Oct 2020 11:33:26 -0400 Subject: [PATCH 24/25] Added 2nd exercise to section 1.4 --- web/help/GuideUnit1.md | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/web/help/GuideUnit1.md b/web/help/GuideUnit1.md index ea2ee6c8d..87ec567d2 100644 --- a/web/help/GuideUnit1.md +++ b/web/help/GuideUnit1.md @@ -302,9 +302,11 @@ border in the name tag. Defining it isn't enough. !!! collapsible: `Exercise` Use this code from the exercise in section 1.2. + ~~~~~ . clickable program = drawingOf(nametag) nametag = lettering("Diego") & rectangle(6, 2) & circle(4) & circle(5) & circle(6) + ~~~~~ Use a variable to define the name. @@ -323,9 +325,25 @@ border in the name tag. Defining it isn't enough. name = "Jane" ~~~~~ - Try changing name to some other value and re-run the - program. + Try changing the name variable to some other value than "Jane" + and re-run the program. + +!!! collapsible: `Exercise` + Modify the previous exercise so that the circles + are defined in a variable. + +!!! collapsible: `Exercise Solution` + This is one solution to the exercise. + + ~~~~~ . clickable + program = drawingOf(nametag) + nametag = lettering(name) & circles + name = "Jane" + circles = rectangle(6, 2) & + circle(4) & circle(5) & circle(6) + ~~~~~ + ### The `program` variable From e9506f9f9647c874063294d8d76d55db06bde11b Mon Sep 17 00:00:00 2001 From: robert Date: Sat, 3 Oct 2020 11:35:56 -0400 Subject: [PATCH 25/25] Added 2nd exercise to section 1.4 --- web/help/GuideUnit1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/help/GuideUnit1.md b/web/help/GuideUnit1.md index 87ec567d2..51ae2b2c9 100644 --- a/web/help/GuideUnit1.md +++ b/web/help/GuideUnit1.md @@ -308,7 +308,7 @@ border in the name tag. Defining it isn't enough. circle(4) & circle(5) & circle(6) ~~~~~ - Use a variable to define the name. + Define the name with a variable. By defining the name with a variable, you could create multiple name tags with different names in them by