CS51A - Spring 2025 - Class 5

Example code in this lecture

   conditionals.py
   conditional-turtle.py
   while.py

Lecture notes

  • admin
       - assignment 1
       - Lab tomorrow

  • run name_analysis function from conditionals.py code
       - input
          - takes a string as a parameter
          - it displays the string to the user
          - then waits for the user to enter some text. The program doesn't continue until the user hits enter/return
          - whatever the user typed will be returned by the input function as a string
             - if you want a number you need to use int(...) or float(...)

       - first prompts the user for their name
       - depending on the input, the output of the program partially differs
          - if statements allow us to control the flow of the program
       - if-else: sometimes we'd also like to do something if the bool is False, in this case, we can include an "else"

          if <bool expression>:
             # do these statements if the bool is True
             statement1
             statement2
          else:
             # do these statements if the bool is False
             statement3
             statement4

          statement5

          - if the boolean expression is true
             - execute statement1, statement2 then statement 5
          - if the boolean expression is false
             - execute statement3, statement4 then statement 5

  • look at name_analysis function from conditionals.py code
       - we first use the input function to get the user's name
          - input returns the text the user entered
          - in the variable "name" will be whatever the users entered
       - name == "Dave" checks whether the entered name is "Dave"
       - if statement directs the program's behavior depending on the answer
       - finally, regardless of the name, we print out "Nice to meet you..."

  • look at the add_circles function in conditional-turtle.py code
       - setcolor_xy function takes the x and y as a parameter and sets the fill color
       - what will this function look like?

  • look at setcolor_xy function in conditional-turtle.py code
       - uses the if-elif-else statement to select between the four options

  • run add_circles function in conditional-turtle.py code with setcolor_random function instead of setcolor_xy
       - what does this do?
          - randomly picks between blue, purple, red and yellow (instead of based on x, y)
       - how could we get this behavior?
          - use random.randint to select a number between 1 and 4
          - save this number and use it in an if-elif-else statement
             - you MUST save this number to a variable and not try and do your if/else statement based on new calls to random.randint
       - look at setcolor_random function

  • run forecast function in conditionals.py code
       - takes two parameters
          - temperature
          - amount of rain
       - depending on what these values are, gives us different answers
       - to start with, let's just look at the temperature. We want to define 4 temperature bands:
          - > 80 => "hot"
          - 71 - 80 => "warm"
          - 51 - 70 => "cool"
          - <= 50 => "cold"

          - say we have a variable called temperature with the temperature, how would we write the if statements for this?
             if temperature > 80:
                temp = "hot"
             if 70 < temperature <= 80:
                temp = "warm"
             if 51 < temperature <= 70:
                temp = "cool"
             if temperature <= 50:
                temp = "cold"
          - if we know the temperature is above 80, do we need to check any of the other ones?
             - no!
          - Python has another statement that allows us to represent this type of expression: elif

             if <bool expression>:
                statement1
             elif <bool expression>:
                statement2
             ... # we can have as many elif blocks as we want
             else:
                statement3
             
             statement4

             - the program starts with the first if statement. If it is true, it executes the statements in the if block then goes to the end (after else) and continues
             - if it is false, it goes to the first elif and see if it is true. If it is true, it executes the statements in the elif block then goes to the end (after the else) and continues
             - the program will keep going down the list of elif statements as long as none of them are true
             - if they are all false, then it will execute the statements under else
          - why is the elif useful?
             - avoids redundant calculations: if we know things are mutually exclusive, then once we find one that is true, don't need to check the others
             - can simplify the statements, when we get to an elif statement, we know that the above boolean checks are false and don't need to check those again

  • look at the temperature_report and precipitation_report functions in conditionals.py code
       - both use if-elif-else statements to calculate an answer

  • look at forecast function in conditionals.py code
       - uses the other functions to generate the answer

  • prime numbers
       - what is a prime number?
          - a number that is only divisible by 1 and itself
       - what are the first 10 prime numbers?
          - the first 100?
          - the first 1000?
       - How could we write a program that figured this out?
       - To start with, how can we tell if a number is prime?
          - try and divide it by all of the numbers between 1 and the number
          - if none of them divide evenly, then it's prime, otherwise it's not
       - A few questions:
          - do we need to check all of the numbers up to that number?
             - just need to check up to sqrt(number) (inclusive)
          - how can we check to see if a number divides evenly?
             - use the remainder/modulo operator and see if it equals 0 (i.e. no remainder)
          - how can we check all of the numbers?
             - use a for loop

  • look at isprime function in while.py code
       - for loop starting at 2 up to the sqrt of the number
          - there are multiple versions of the range function
             - range with a simple parameter starts counting at 0 up to but not including the specified number
             - range with 2 parameters starts counting at the first number up to, but not including, the second number

                for i in range(10, 20):
                   print i

                would print out the numbers from 10 - 19 (but not 20)

          - the if statement checks to see if the number is divisible by i
          - if we find this we can stop early!
             - the minute we find this, we know it's not prime so we can return False
          - what does "return True" do?
             - if we've checked all of the numbers and none of them were divisible (otherwise we would have exited the function with the return False), so return True
       - we can use this to see if a number is prime

          >>> isprime(5)
          True
          >>> isprime(6)
          False
          >>> isprime(100)
          False
          >>> isprime(101)
          True

  • import math
       - A second way to import: import module_name
       - To reference a function within that module, you then say module_name.function_name
       - Why might we use this option, i.e. when would we use:
          from math import *

          vs.

          import math

          - Use the first if you're going to be using the functions a lot and it's clear that they come from that module
          - Use the second to be extra clear where the functions are coming from and to avoid naming conflicts

  • how could we use isprime to print out the first 10 (100, 1000, etc) prime numbers?
       - like to do some sort of loop
       - will a for loop work?
          - we don't know when we're going to stop
          - we'd like to keep a count of how many we've seen and only stop when we've reached the number we want