Lab 2: Booleans, Strings, Random Numbers, Recursion, Variables, Input function

Similar documents
Lab 2: Booleans, Strings, Random Numbers, Recursion, Variables, Input function

Problem 1.1 (3 pts) :Python uses atomic data types and builds up from there. Give an example of: a. an int b. a double c. a string

Programming Lab 1 (JS Hwk 3) Due Thursday, April 28

Lab 4: Strings/While Loops Due Sun, Apr 17 at midnight

CONDITION CONTROLLED LOOPS. Introduction to Programming - Python

Lab 4: Strings/Loops Due Apr 22 at midnight

Here is a sample IDLE window illustrating the use of these two functions:

Lab 4: Due Sunday, Nov 22

CMSC 201 Fall 2016 Lab 09 Advanced Debugging

Getting Started. Excerpted from Hello World! Computer Programming for Kids and Other Beginners

: Intro Programming for Scientists and Engineers Assignment 1: Turtle Graphics

The Beauty and Joy of Computing 1 Lab Exercise 9: Problem self-similarity and recursion - Python version

What you get When you install Python for your computer, you get a number of features:

Hello World! Computer Programming for Kids and Other Beginners. Chapter 1. by Warren Sande and Carter Sande. Copyright 2009 Manning Publications

CS 051 Homework Laboratory #2

6.S189 Homework 1. What to turn in. Exercise 1.1 Installing Python. Exercise 1.2 Hello, world!

Programming Project 1

(Python) Chapter 3: Repetition

How To Think Like A Computer Scientist, chapter 3; chapter 6, sections

JS Lab 1: (Due Thurs, April 27)

15-110: Principles of Computing, Spring 2018

Introduction to Computer Science Unit 3. Programs

Using IDLE for

Lab 4 Due April 18 th

Animations involving numbers

Decisions, Decisions. Testing, testing C H A P T E R 7

CS 150 Lab 10 Functions and Random Numbers

Othello Turtle Extra Credit (20 points) Due Sunday, Nov 29 (really!)

Honors Computer Science Python Mr. Clausen Program 7A, 7B

CpSc 1111 Lab 6 Conditional Statements, Loops, the Math Library, and Random Numbers What s the Point?

CMSC 201 Spring 2017 Lab 05 Lists

Programming with Python

CPSC 217 Assignment 3

Introduction to Computer Science Unit 4B. Programs: Classes and Objects

CMPSCI 119 LAB #2 Anime Eyes Professor William T. Verts

Table of Laplace Transforms

Software Development Pseudocode

[ the academy_of_code] Senior Beginners

CS1110 Lab 6 (Mar 17-18, 2015)

mith College Computer Science Lecture Notes CSC111 Week 7 Spring 2018 Dominique Thiébaut

Due Date: Two Program Demonstrations (Testing and Debugging): End of Lab

CPSC 217 Midterm (Python 3 version)

SPRITES Moving Two At the Same Using Game State

Computer and Programming: Lab 1

Drawing a Circle. 78 Chapter 5. geometry.pyde. def setup(): size(600,600) def draw(): ellipse(200,100,20,20) Listing 5-1: Drawing a circle

Condition Controlled Loops. Introduction to Programming - Python

CSC D84 Assignment 2 Game Trees and Mini-Max

CMSC 201 Spring 2017 Homework 4 Lists (and Loops and Strings)

4. Use a loop to print the first 25 Fibonacci numbers. Do you need to store these values in a data structure such as an array or list?

CSE 142, Autumn 2018 Programming Assignment #9: Critters (20 points) Due Tuesday, December 4th, 9:00 PM

15-110: Principles of Computing, Spring 2018

Midterm #1 Fall minutes

University of California, Berkeley College of Engineering

The first print the integer literal 12, the second prints the string comprising the character 1 followed by the character 2.

CIS220 In Class/Lab 1: Due Sunday night at midnight. Submit all files through Canvas (25 pts)

Outline. Announcements. Homework 2. Boolean expressions 10/12/2007. Announcements Homework 2 questions. Boolean expression

Text Input and Conditionals

6.S189 Homework 2. What to turn in. Exercise 3.1 Defining A Function. Exercise 3.2 Math Module.

Lab 4: NetLogo Experiments in the Random Walk and Wiggle Walk

Noughts and Crosses. Step 1: Drawing the grid. Introduction

Self-Teach Exercises: Getting Started Turtle Python

The little book of programming challenges

AN INTRODUCTION TO SCRATCH (2) PROGRAMMING

+ Inheritance. Sometimes we need to create new more specialized types that are similar to types we have already created.

Control Flow: Loop Statements

CS 142 Style Guide Grading and Details

cs1114 REVIEW of details test closed laptop period

Types, lists & functions

Functionally Modular. Self-Review Questions

Chapter 7. Polygons, Circles, Stars and Stuff

CMSC 201 Spring 2019 Lab 06 Lists

Second Examination Solution

CSC 101: Lab Manual#11 Programming Turtle Graphics in Python Lab due date: 5:00pm, day after lab session

Before submitting the file project4.py, check carefully that the header above is correctly completed:

Lab 4: Imperative & Debugging 12:00 PM, Feb 14, 2018

CS1110 Lab 5: Practice for A4 (Mar 8-9, 2016) First Name: Last Name: NetID:

CMSC201 Computer Science I for Majors

GOALS [HTDP/2e Chapters 1 through 3.5]

Lecture 19: Subclasses & Inheritance (Chapter 18)

Honors Computer Science Python Mr. Clausen Programs 4A, 4B, 4C, 4D, 4E, 4F

Introduction to Python (All the Basic Stuff)

CS 111X - Spring Final Exam - KEY

Intro. Scheme Basics. scm> 5 5. scm>

CMSC 201 Fall 2018 Lab 04 While Loops

Introduction to Java Programs for Packet #4: Classes and Objects

CMSC 201 Fall 2015 Lab 12 Tuples and Dictionaries

Try typing the following in the Python shell and press return after each calculation. Write the answer the program displays next to the sums below.

Introduction to Programming with JES

CS 1110, LAB 1: PYTHON EXPRESSIONS.

Creating objects TOPIC 3 INTRODUCTION TO PROGRAMMING. Making things to program with.

append() function, 66 appending, 65, 97, 296 applications (apps; programs), defined, 2, 296

CS 112 Project Assignment: Visual Password

Boolean Expressions. Is Equal and Is Not Equal

Dividing Rectangles into Rows and Columns Part 1. 2nd Grade. Slide 1 / 201 Slide 2 / 201. Slide 3 / 201. Slide 4 / 201. Slide 6 / 201.

Critters. Critter #2 Attack.ROAR Attack.POUNCE Attack.SCRATCH. Critter #1

Procedures: Algorithms and Abstraction

Outline. Turtles. Creating objects. Turtles. Turtles in Java 1/27/2011 TOPIC 3 INTRODUCTION TO PROGRAMMING. Making things to program with.

CS 115 Lecture 8. Selection: the if statement. Neil Moore

Practical Questions CSCA48 Winter 2018 Week 3

Street Artist Teacher support materials Hour of Code 2017

Transcription:

Lab 2: Booleans, Strings, Random Numbers, Recursion, Variables, Input function Due: Mar13 (Note that this is a 2-week lab) This lab must be done using paired partners. You should choose a different partner than the partner you worked with previously. One student should turn in the lab, but the lab must have both students names on it. If you want to be really considerate, the other partner should type into the text box in Sakai the name of the partner they worked with, just to be safe. Create a file called lab2.py. Include as comments at the very top of the file: your name, your partner s name, class time, TA s name(s), and lab due date. Then include the following comments and functions: Note: Include the comments in your lab2.py file. This will make the lab easier to read and grade. You should still get into the habit of commenting every function. Comments should include the number and type of the input parameters, the type of the output parameter, and a clear description of exactly what the function does. When possible, the function should include test cases. Comments should be written BEFORE the function is written. Note 2: Test cases for functions that generate random numbers are somewhat difficult. If possible for those cases, give a sample output, i.e., an example of what you might get if a particular random number or set of random numbers are generated. Note that the rest of your comments don t change at all. All functions must have comments. In functions where I have included the comments, copy and paste them into your lab code. Lab Attendance Sept 28: 4 pts Lab Attendance Oct 5: 4 pts 1. (3 pts) Write a function that takes as input parameters 2 strings. It outputs a string. The returned string is the two input strings concatenated together. 2. (3 pts) Write a function that takes as input 2 parameters: a string and an int. It should return 1 longer string the string you input int times. So if your input parameters were ha and 4, the string returned should be hahahaha Problem 3a (3pts). Write the following functions based on the comments, below: # Function name: min2 # Input: 2 integers # Output: an integer # This function returns the smaller of the two input parameters # Test Cases: 3,7->min2->3 # 7,2->min2->2 # 3,3->min2->3 Problem 3b (3 pts). #Function name: min5

#Input: 5 integers #Output: 1 integer # This function should take 5 integers and return the minimum of those 5 integers. This function should be 1 line of code long #Test cases: 12,5,2,6,8 -> min5 -> 2 # 1,2,3,4,5-> min5 ->1 # 5,4,3,2,1->min5->1 3c (2 pts). Run min5 with strings as input parameters instead of integers. Example: # Text Cases: dog, bird, cat, zebra, bear -> min5 -> bear # aardvark, bear, echidna, wombat, zebra ->min5-> aardvark # zebra, wombat, echidna, bear, aardvark ->min5-> aardvark What did you just learn about the less than operator and strings? (Write a small comment answering that right below these test cases). 3d. (2 pts) Run min5 with the following two sets of input parameters: # Text Cases: 50,3800,490,6,20805 -> min5 ->? 50, 3800, 490, 6, 20805 -> min5 ->? Do you get different results? Explain why you got the results you did (Hint: think of the dictionary). Recursion: Random Number Generation Python can generate random numbers. There s a whole library dedicated to generating random numbers. It s called random. So if you want to generate random numbers, you must first import the random number library by placing at the top of your lab2.py file: from random import * The above line should be the top line (under your comments) in your lab2.py file. Now you can generate random numbers between x and y using randrange(x,y) For instance, if you wanted to generate a random number between 0 and 100 (not including 100) and store it in the variable randvar, you d write the following: randvar = randrange(0,100) Remember, we do the right side first and place the value calculated by the right side into the variable on the left side. So if you use the above code to generate a random number, randrange will generate a number between 0 and 99 (inclusive). Let s say the random number generated is 42. Then randvar will hold the number 42. To see what number is generated, you can always print it: print (randvar) (Note: when writing test cases for functions that use random numbers, you may need to give a range of answers that would be correct. So in this case, I might say: Input: 3->func-> 0 2 (inclusive) Input: 7-> func->0 6 (inclusive) Input: 100->func-> 0 99 (inclusive)

NOTE: For those of you who have had programming before, this lab is to ensure sure you understand recursion. You must use recursive loops as opposed to any other type of loop for these problems. There should be no loops other than recursive loops in this lab. Problem 7. (5 pts)simple dice game. Sample output: Problem 8 Function name: Dice Input parameter: 1 integer (possibly 2, depending on how you write this) Output: an integer Calculation: This function generates two random numbers between 1 and 6 inclusive. It then calculates your current score as follows: If you roll a 1, you are done unless you roll 2 1s, in which case you add 30 points. If you roll two 3s, you lose 40 points. Otherwise, your score goes up by the addition of the two random numbers. This function will loop either 10 times or until one of the random number stopping conditions is hit. (Note: print out the random numbers generated within the function or you won t know whether your function is working or not) 2, 6 5, 4 2, 4 6, 3 2, 3 4, 3 3, 5 5, 4 3, 3 5, 1 21 8a. (4 pts) Write a function that takes as an input parameter two integers. It returns an integer. It loops. Each time it generates a random number between 1 and the second parameter. If the random number is not equal to the first parameter, the random number is returned. Otherwise, the function loops. (Note: the way to test this function is to put print statements within the function showing the random number generated. You may wish to test this with a very small range in order to make sure that it actually continues to loop when the random number is equal to the first input parameter). 8b. (2 pts) (Not a loop): Write a function that takes as input parameters 4 integers. It returns a Boolean value. It checks to see if the second two parameters are the same as the first two parameters, regardless of order. In other words: 3,7,3,7 ->checkvalues ->True 7,4,4,7->checkvalues -> True 7,8,7,4->checkvalues -> False 8c. (5 pts) We ve all heard that the lottery is a tax on people who are bad in math. You re going to write a function that tests a simple version of this. For this lottery, you choose only 2 numbers within a range (I think the lottery s range is from 1-40, but I could be wrong on that). The function you are going to write should take 4 input values: the two integers you ve chosen, the possible range of values (for testing, something smaller than 40, but

for the actual lottery it would be 40), and then the loop counter. It will generate 2 random numbers, and count how many times you got both random numbers right (how many times you d win the lottery if you played loopcounter times with only 2 numbers). The function should loop loop-counter times. It should generate 2 different random numbers (using 8a to make sure that the two numbers are different). It then uses 8b to check whether the numbers are the same and, if they are, increases the count of the times you won. Note a. You may always put print statements within your functions to see what they are doing as you run them. Note b: to test your function, you can change the lottery s range to a smaller number than 40. For instance, when I made the range 10 and looped 900 times, I won 8 times. When I made the range 40 and looped 900 times, I occasionally won once. Problem 9: (5 pts) Input function (Versus input parameters) Python has something known as an input function, which is DIFFERENT from input parameters. Input parameters are the values that are passed into a function. The input function is a function that demands that the user type something in. So, for instance, def f(x,y): #x and y are the input parameters, and we put values into x and y outside of the function return(x + y) print(f(3,7) #this is putting values into the parameters. It s where we put 3 into x and 7 into y Whereas: def f(): x = input( what value, as a number, do you want to enter? ) #Here the string shows up in python s shell #window, and the user must type in a value. #The value will go into x y = input( Enter a second number ) return(x+y) print(f()) #Notice that no values are going in here. In the second function, there are no input parameters. Instead, the function interacts with the user as it runs to get actual values for x and y. 9a. (3 pts) This (nonlooping) function takes 2 integers as input parameters, asks the user what x times y is using the input function for user input, and then returns True if the user inputs the correct value, and false otherwise as follows: #Function name: mult #input: 2 integers #output: a Boolean value #This function checks whether the value the user types in using the input function is equal to the product of the two input parameters and returns True if it is, False otherwise. #Test cases: Input parameter: 3, 7>mult2-> value entered into input function: 21- ->True # Input parameter: 6,4->mult2-> value entered into input function: 18->False # Input parameter: 0-,12>mult2-> value entered into input function: 0->True 9b. (4 pts) Function name: MultTest Input: 2 integers

Output: A string This function uses recursion and the function written in problem 2 (mult) to see how well a student is able to do their multiplication tables. The function checks to see whether a student is able to correctly multiply every number between 2 and 12 with the first input parameter. If the student gets any answer incorrect, the function starts over with 2 times x, then 3 times x, then 4 times x, etc, where x is the first input parameter. Otherwise, the function returns a string saying, Congratulations! You know your x multiplication tables! Test Output (i.e., what you might see): Problem 10: What is 4 times 2? -> 8 What is 4 times 3? -> 12 What is 4 times 4? -> 16 What is 4 times 5? -> 20 What is 4 times 6? -> 24 What is 4 times 7? -> 28 What is 4 times 8? -> 32 What is 4 times 9? -> 36 What is 4 times 10? -> 40 What is 4 times 11? -> 44 What is 4 times 12? -> 48 Contratulations! You know your 4 multiplication tables! What is 6 times 2? -> 12 What is 6 times 3? -> 18 What is 6 times 4? -> 24 What is 6 times 5? -> 30 What is 6 times 6? -> 34 What is 6 times 2? -> 12 What is 6 times 3? -> 18 What is 6 times 4? -> 24 What is 6 times 5? -> 30 What is 6 times 6? -> 36 What is 6 times 7? -> 42 What is 6 times 8? -> 48 What is 6 times 9? -> 54 What is 6 times 10? -> 60 What is 6 times 11? -> 66 What is 6 times 12? -> 72 Contratulations! You know your 6 multiplication tables! 10a.(4 pts) Create a copy of your dice function that stops either when the random numbers generated create a stopping condition, or when the user chooses to stop. That means that every time, it should use the user input function to ask the user, Do you wish to continue? If the user says yes, the function continues as before. If no, the current score is returned. Note: the order in which things happen in this function is critical for its working properly. You don t want to ask the user, Do you wish to continue if the user rolled a 1 or two 3s. Note: this function may take no input parameters, depending on how you write it. 10b: (6 pts) Now create a brand new function called dicegame. This function takes 3 integers as its input parameters:, the score of the first player, the score of the second player, and the count of the number of loops. It

then loops the count time. Each loop, it calls the first dice function and adds the score to the first player s score, and then it calls the second dice function (above) and the user plays the game. Each time the loop should print out the first player s current score and the second player s current score. When it is done looping, it should say whether the first player or the second player won. Example: 6, 6 4, 2 4, 1 Do you wish to continue?yes You rolled 5, 4 Do you wish to continue?yes You rolled 2, 6 Do you wish to continue?yes You rolled 6, 2 Do you wish to continue?no 2, 3 6, 6 1, 2 Do you wish to continue?yes You rolled 2, 3 Do you wish to continue?yes You rolled 5, 4 Sorry, You rolled 1, 4 6, 4 1, 2 Do you wish to continue?yes You rolled 5, 3 Sorry, You rolled 1, 2 second player won with 47>45 Turtle: Problem 12 ( 3 pts) Function Name: Circles Input: 1 integer: the radius Output: none This function recurses until the radius is 0 or less. Each time it draws a circle with the radius, and then recurses with a radius 3 smaller than the previous radius. You should get something like this:

Problem 13: (4 pts) Function Name: Squares Input: 3 integers: the length of the side, and the starting x and y coordinate Output: none This function recurses until the length of the side is 0 or less. Each time it draws a square centered within the previous square, and then recurses with a radius 8 smaller than the previous side length. You should get something like this: Note: for this you will need turtle.penup() to lift the turtle pen off the screen, then, of course, turtle.pendown() to put it down on the screen, and you ll need turtle.goto(x,y) which will move the pen to the x y coordinates. Problem 14: Spirograph/flower To do this problem, you need to know a few things about turtle s color. Color is represented by the amount of red, the amount of green, and the amount of blue (rgb values). Each value is represented by an amount between 0 and 1. To set the color, you use the command: turtle.color(r,g,b) where r is a double between 0 and 1, g is a double between 0 and 1, and b is a double between 0 and 1. You can set turtle s pensize with an int, e.g., turtle.pensize(3) equally, when the pen is at x,y coordinates and a circle is drawn, the x y coordinates default to the very bottom of the circle s circumference, not the center. In order to have the circle drawn with the starting location at the same x/y coordinates but at a different angle, you rotate the direction of the turtle using either turtle.left() or turtle.right(), and the degrees you want to rotate turtle s angle. So for instance, if you wanted to draw 6 circles like a Spirograph, you d rotate turtle.left(60) each time and then draw another circle. Okay, now onto the drawcircles function:

14a. (4 pts) drawcircles: This function draws one set of Spirograph circles. It takes 6 (yep, 6!) input parameters: one int representing the count, or number of times the loop still needs to rotate, an int representing the size of the circle, an int representing the amount the turtle should be rotated each time, and then 3 doubles, all between 0 and 1, representing the amount of red, the amount of green, and the amount of blue in the color, respectively. The function should check for the stopping condition (and, if it is at the stopping point, it should return nothing from the function, done using: return It should generate a random number between -.2 and.2 (random number between -20 and 20, divided by 100). And that number should be added to the amount of red. Repeat for green, and for blue. Then check to make sure that the red, green, and blue amounts are within range. If a value is < 0, it should be reset to.1. If it s > 1, it should be reset to.9. The turtle s color should be set to the new red/green/blue values. And a circle should be drawn. Then the loop should continue. So, if the drawcircle is called initially as: Drawcircle(6,25,60,.5,.5,.5) You should get something looking like this: 14b (7 pts) Spirograph function: This function takes 3 parameters, all three are ints. The first is the count of the number of circle sets you ll create (the drawcircle function creates 1 circle set), and the second and third are the x/y coordinates of where the circles start from. (Note: these don t change throughout, but this function makes sure that we always start from those x/y coordinates in case the pen gets off by a pixel or two). This function loops count times (the first parameter). If it does not stop, it goes to the x/y coordinate. Note: you will want to use the following command: turtle.setheading(0) to reset the direction of the turtle to its original direction You will then randomly choose a number between 4 and 20 for how many circles should be generated for this circle set. Once you know the number of circles, you should calculate how much the rotation should be. Finally,

you should randomly generate a number between 20 and 230, which will be the size of each circle. When you have that, you should call your drawcircle function (with initial color values of.5,.5,..5). Then you should loop with the Spirograph function. You might get something that looks like this: Problem 14 (5 pts) In problem 4.2 under the turtle section in the last lab, you wrote a function that took as an input parameter a color, and drew an object. For this problem, you are going to use that function to draw your object all over the turtle window, in different colors. So the function you are now writing, which will loop, should have 1 parameter: the number of times the function still needs to loop. In the function, you will generate a random number between -250 and 250 for the x coordinate, and another random number between -250 and 250 for the y coordinate. You should then use turtle.penup() and turtle.goto(x,y) to have the pen go to the new x and y coordinate. Then call the function you wrote in 4.2 (you should copy and paste that function into this lab file, above this function you are writing now). Make sure you generate new random numbers for the color.

Problem 15 (10 pts) Rock/Paper/Scissors Copy the following code into Lab 3. Make sure you ve downloaded stone.gif, paper.gif, and Scissors.gif from my web page. Place them in your Python33 folder on your computer. Then write the following recursive function where indicated. import turtle import tkinter from random import * tk = tkinter.tk() canvas = tkinter.canvas(tk, width = 500, height = 300, bg="white", bd="5") canvas.pack() def display(you,computer): print("you: " + str(you) + " computer: " + str(computer)) if you == 0: my_img=tkinter.photoimage(file = "stone.gif") elif you == 1: my_img=tkinter.photoimage(file = "paper.gif") elif you == 2: my_img=tkinter.photoimage(file = "Scissors.gif") canvas.create_image(70,60, anchor = tkinter.nw,image = my_img) if computer == 0: c_img=tkinter.photoimage(file = "stone.gif") elif computer == 1: c_img=tkinter.photoimage(file = "paper.gif") elif computer == 2: c_img=tkinter.photoimage(file = "Scissors.gif") canvas.create_image(270,60, anchor = tkinter.nw,image = c_img) tk.update() # Recursive function: # Function name: RockPaperScissors # input: 2 integers the number of times played and the number of times won so far # output: a string You won x out of 10 times, where x is the number of times you won # This function should run 10 times. Each time it should use the input function to ask you, choose 0 for rock,1 for paper, or 2 for scissors:. It should then generate a random number between 0 and 3 (not including 3). It should call the function display() with your choice and the computer s choice. It should then calculate whether you won and, if so, increase the won count. The winner is determined as follows: If the user chose rock: If the computer generated rock, it s a tie If the computer generated paper, the user loses If the computer generated scissors, the user wins If the user chose paper: If the computer generated rock, the user wins If the computer generated paper, it s a tie

If the computer generated scissors, the user loses If the user chose scissors: If the computer generated rock, the user loses If the computer generated paper, the user wins If the computer generated scissors, it s a tie Again, this function should recurse 10 times #YOUR RECURSIVE FUNCTION GOES HERE! def main(): print(rockpaperscissors(0,0)) main() Problem 16: (7 pts) fractals Drawing Snowflakes(sort of): We re going to create a recursion that looks something like this: To start the recursion, realize that we re starting with a basic line that looks like this: This is created with a line that uses the basic turtle commands: turtle.forward(x) turtle.left(60) turtle.forward(x) turtle.right(120) turtle.forward(x) turtle.left(60) turtle.forward(x) Where x is the length of each edge in the line. To recurse, we can take each piece of the line and repeat the process we just did: To recurse again, we get: If we keep recursing, we may end up with something like this:

Part 1 ( 4 pts): Write the recursive function that creates the above. In the above case, the function stopped recursing (and drew) when the line length was 3. Part 2 ( 3 pts): To make a snowflake, we have to recursively draw the above, each time rotating a certain amount. I rotated 60 degrees each time. Note that this function should be recursive as well, and should stop when a count parameter gets down to 0. The angle you rotate should directly affect your count parameter. You may end up with something like this: