Augmented Assignment, Chaining Comparisons, and Boolean Logic in Python

cs 115 lecture n.w
1 / 26
Embed
Share

Learn about augmented assignment in Python to perform operations on variables, chaining comparisons for efficient code, and logical operators for Boolean expressions. Explore examples and best practices for mastering these concepts in Python programming.

  • Augmented Assignment
  • Chaining Comparisons
  • Boolean Logic
  • Python Programming
  • Logical Operators

Uploaded on | 0 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

You are allowed to download the files provided on this website for personal or commercial use, subject to the condition that they are used lawfully. All files are the property of their respective owners.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author.

E N D

Presentation Transcript


  1. CS 115 Lecture Augmented assignment; Boolean logic; random numbers Taken from notes by Dr. Neil Moore

  2. Augmented assignment Often you want to perform an operation on a variable and store the result in the same variable: num_students = num_students + 1 price = price * 0.9 # 10 percent discount change = change % 25 # change after quarters Python provides a shorthand for this, augmented assignment: num_students += 1 price *= 0.9 change %= 25

  3. Augmented assignment Combines assignment with an arithmetic operator The precedence is the same as assignment (=) Evaluate the right hand side first What does this do? product *= i + 1 does NOT do: product = product * i + 1 DOES do: product = product * (i + 1) because + is higher precedence than *= Sometimes called compound operators in other languages

  4. Chaining comparisons In Python, comparisons can be chained together: if 0 < x < y <= 100: It means: 0 < x and x < y and y <= 100 This notation is common in mathematics But not in most programming languages! Python is rather unusual in allowing it

  5. Boolean logic and logical operators There are three logical operators that let us combine Boolean expressions. They have lower precedence than the relational operators (<, >, ) not A: True if A is False, False if A is True A is any Boolean expression: if not is_finished: do_more_work() A and B: True if both A and B are True in_range = size >= 0 and size <= 100 A or B: True if either A or B is True or Both! if snow_inches > 6 or temperature < 0: print( Class is cancelled )

  6. Complex Boolean expressions not has the highest precedence (still lower than relational) and has the next highest or has the lowest of the three So not A or B and C or D means (((not A) or (B and C)) or D) People often forget the order of and and or operators It s not a bad idea to always use parentheses when they are both in an expression not A or (B and C) or D

  7. Truth tables The truth table is a tool for making sense of complex Boolean expressions. A B A and B A B A or B A not A True True True True True True True False True False False True False True False True False True False False True True False False False False False False

  8. Truth tables A table has one row for each possible combination of values of True and False if there is one input, two rows (T, F) two inputs, four rows (TT, TF, FT, FF) 3 inputs, 8 rows (TTT, TTF, TFT, TFF, FTT, FTF, FFT, FFF) A table has one column for each boolean expression Inputs: Boolean variables or comparisons (relational expressions) Intermediate results: Each not, and and or. Output: The whole expression

  9. A more complicated example not (not A or not B) A B not A not B not A or not B result True True True False False True False False

  10. A more complicated example not (not A or not B) A B not A not B not A or not B result True True False False True False False True False True True False False False True True

  11. A more complicated example not (not A or not B) A B not A not B not A or not B result True True False False False True False False True True False True True False True False False True True True

  12. A more complicated example not (not A or not B) A B not A not B not A or not B result True True False False False True True False False True True False False True True False True False False False True True True False

  13. De Morgans laws not (not A or not B) = A and B not (not A and not B) = A or B These can be useful for rewriting expressions to simplify

  14. Be careful! It is easy to accidentally write an expression that is always True or always False Tautolology (always True) and contradiction (always False) Examples: if size >= 10 or size < 50: print( in range ) What happens when size is 100? 20 ? 2? The or operator is True if EITHER comparison is True But the two comparisons cannot both be False at the same time! So this is a tautology (always True) if size < 10 and size > 100: print( out of range ) The comparisons cannot both be True at the same time! So the message will never print a contradiction (always False)

  15. Be careful! Don t trust the English language! Make a truth table if you are not sure I want to run this if size < 10 and if size > 100 In logic, that should be an or operator, not an and operator: Run this if size < 10 or size > 100 if x is equal to 4 or 5 Wrong: if x == 4 or 5: Tests should be written out explicitly Should be: if x is equal to 4 or x is equal to 5 if x == 4 or x == 5:

  16. Coercing other types to bools Why did the last example if x == 4 or 5:run at all? What does Python see it as? or is a boolean operator it works on bools and returns a bool There is a bool from the x == 4, but the 5 is by itself! Python needs a bool on the right of the or operator how does it make the 5 a bool?? It forces (coerces) the 5 to be a bool according to the rules For numbers, any value but 0 is turned into True, 0 is False For strings, any string except the empty string is True, is False For lists, any list except the empty list is True, the empty list [] is False ALL graphics objects are True! So the expression above x == 4 or 5 is ALWAYS TRUE because the 5 is coerced to True, and anything or True is always True. Tautology! This is NOT something you should rely on in your code it is difficult for someone to read and understand, and it is very prone to bugs if you are not careful.

  17. Random numbers We ve seen some modules or libraries in Python: math graphics A library is a collection of pre-written code indented to be re-used. Python comes with a couple hundred modules And there are thousands more third-party modules Let s look at another built-in module: random

  18. Randomness The random module provides functions for generating random numbers Computers are deterministic: the principle in classical mechanics that the values of dynamic variables of a system and of the forces acting on the system at a given time, completely determine the values of the variables at any later time www.dictionary.com The same instructions and the same data = the same results Usually this is what we want! When would we want a program to do different things every time it s run? Games Simulations: traffic, weather, galaxies colliding, Cryptography For these kinds of problems we want random numbers But how can we get real randomness in a deterministic machine? There are ways (hooking up a radiation source and look for decays, etc ) but it s not needed most of the time Pseudorandom numbers are usually good enough for our purposes

  19. Randomness What does random mean? Two things: An even distribution of results If we re rolling a die, we expect 1 about 1/6thof the time And 2 about 1/6thof the time, 3 about 1/6th Uniform distribution: each possibility is equally likely This does NOT mean exactly uniform results! If you roll a die six times, you will get some number twice What it means is that over a large number of tests, the distribution gets closer to 1/6th each An even distribution isn t enough to be random What if the die always rolled 1,2,3,4,5,6, 1,2,3,4,5, in that order? Random numbers should be unpredictable Specifically seeing several numbers in the series should not let us guess the next one

  20. Pseudorandom numbers Pseudorandom numbers use a deterministic algorithm (a random number generator, RNG) to generate numbers that appear to be random: Approximately uniform Hard to predict (theoretically not impossible) RNGs will repeat eventually, a good one does not for a very long time A lot of research has gone (and goes) into RNGs Linear congruential, alternating shift generator, Mersenne twister, The Art of Computer Programming spends half a book on RNGs. Why so much research? They are very important for security! Cryptograph uses random numbers for session keys (like automatically generated one-time passwords) If someone could predict the output of the RNG, they could predict the key and break in!

  21. Randomness involves information Randomness involves information or the lack of it Imagine you are standing at the top of a 50-story building. If someone asked you to predict what the traffic at ground-level would be, when will the next car come around the corner? you would be in a good position to make a prediction If you were standing at ground level next to the same building, you have much less information and you could not make a very good prediction about the traffic With more information, things are less random; with less information, things seem more random That s why the RNG numbers are called pseudo. With enough information, i.e. the RNG algorithm used and the seed, you could calculate the numbers just like the computer does. The numbers ARE predictable in that case. Since we don t usually have that info, the numbers seem random to us!

  22. Using Pythons random number library Python s random number generator is in the random library import random or from random import * There are several functions in the library. https://docs.python.org/3/library/random.html Note the big red warning! The simplest function is random chance = random() Gives a random floating point number in the range [0.0, 1.0) Notation: including 0.0, not including 1.0 Useful for probabilities, 1 means will happen , 0 means will not happen if random() < 0.7: # 70% chance What if we want a random float in another range? Multiply and add score = 90.0 * random() + 10.0 the range of this variable is [10.0, 100.0)

  23. Random integers We could multiply, add and type-cast to get a random integer. But there are functions in the library to do it for us. The randrange function Takes one to three arguments and returns an integer: randrange(stop): [0, stop) between zero (inclusive) and stop (exclusive!) randrange(start, stop): [start, stop) between start (inclusive) and stop (exclusive) randrange(start, stop, step): Likewise, but only gives start plus a multiple of step

  24. Random integers Give me a random multiple of 10 between 0 and 100 inclusive. score = randrange(0, 101, 10) What if we had written 100 instead? 100 is not included in the possible results Related: randint (a, b): [a, b] Inclusive on both ends! The same as randrange (a, b+1)

  25. Random choice Python can also choose randomly from a list of alternatives: sacrifice = choice([ time , money , quality ]) Must give a list of choices, in square brackets. Don t forget the brackets! choice ( time , money , quality ) TypeError: choice(2) takes 2 positional arguments but four were given Can give a string as an argument instead: answer=choice( ABCD ) Returns a random letter from the string

  26. Seeding the RNG Sometimes it s useful to be able to repeat the program exactly, with the same sequence of random numbers. Why? Reproducible simulations Cryptography: client and server might need the same numbers Testing programs (and games) We can specify the seed for the RNG seed(42) do it ONCE at the beginning of the program Now the sequence of numbers will be the same each time the program runs seed(43) gives a completely different random number sequence Not necessarily larger numbers (size of seed does not correlate with size of numbers) What if you never set a seed? Python picks one for you, based on the system time On some OSes it can use OS randomness instead Only set the seed ONCE per program!

More Related Content