Introduction to Computing Using Python More Built-in Container Classes  Container Class dict  Container Class set  Container Class tuple  Encoding.

Slides:



Advertisements
Similar presentations
Container Types in Python
Advertisements

CS 100: Roadmap to Computing Fall 2014 Lecture 0.
Dictionaries: Keeping track of pairs
Fundamentals of Python: From First Programs Through Data Structures
Python Dictionary.
COMPSCI 101 Principles of Programming Lecture 24 – Using dictionaries to manage a small file of information.
מבנה מחשב תרגול 2 ייצוג תווים בחומרה. A programmer that doesn’t care about characters encoding in not much better than a medical doctor who doesn’t believe.
Introduction to Computing Using Python Dictionary container class + modules  Container Class dict  Modules, revisited.
Introduction to Computing Using Python More Built-in Container Classes  Container Class dict  Encoding of String Characters  Randomness and Random Sampling.
Connecting with Computer Science 2 Objectives Learn why numbering systems are important to understand Refresh your knowledge of powers of numbers Learn.
Lilian Blot CORE ELEMENTS COLLECTIONS & REPETITION Lecture 4 Autumn 2014 TPOP 1.
Introduction to Computing Using Python Chapter 6  Encoding of String Characters  Randomness and Random Sampling.
Introduction to Python Lecture 1. CS 484 – Artificial Intelligence2 Big Picture Language Features Python is interpreted Not compiled Object-oriented language.
“Everything Else”. Find all substrings We’ve learned how to find the first location of a string in another string with find. What about finding all matches?
The Data Element. 2 Data type: A description of the set of values and the basic set of operations that can be applied to values of the type. Strong typing:
1 Lab Session-III CSIT-120 Fall 2000 Revising Previous session Data input and output While loop Exercise Limits and Bounds Session III-B (starts on slide.
A Variable is symbolic name that can be given different values. Variables are stored in particular places in the computer ‘s memory. When a variable is.
Java Primitives The Smallest Building Blocks of the Language (corresponds with Chapter 2)
October 4, 2005ICP: Chapter 4: For Loops, Strings, and Tuples 1 Introduction to Computer Programming Chapter 4: For Loops, Strings, and Tuples Michael.
General Computer Science for Engineers CISC 106 Lecture 02 Dr. John Cavazos Computer and Information Sciences 09/03/2010.
Announcements All groups have been assigned Homework: By this evening everyone in your group and set up a meeting time to discuss project 4 Project.
STRINGS CMSC 201 – Lab 3. Overview Objectives for today's lab:  Obtain experience using strings in Python, including looping over characters in strings.
Data Abstraction UW CSE 140 Winter What is a program? – A sequence of instructions to achieve some particular purpose What is a library? – A collection.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley STARTING OUT WITH Python Python First Edition by Tony Gaddis Chapter 6 Value-Returning.
CS190/295 Programming in Python for Life Sciences: Lecture 3 Instructor: Xiaohui Xie University of California, Irvine.
Strings CSE 1310 – Introduction to Computers and Programming Vassilis Athitsos University of Texas at Arlington 1.
Beyond Lists: Other Data Structures CS303E: Elements of Computers and Programming.
CPS120: Introduction to Computer Science
Getting Started with Python: Constructs and Pitfalls Sean Deitz Advanced Programming Seminar September 13, 2013.
13-1 Sets, Bags, and Tables Exam 1 due Friday, March 16 Wellesley College CS230 Lecture 13 Thursday, March 15 Handout #23.
CSCI/CMPE 4341 Topic: Programming in Python Review: Exam I Xiang Lian The University of Texas – Pan American Edinburg, TX 78539
Copyright © 2015 Pearson Education, Inc. Publishing as Pearson Addison-Wesley C H A P T E R 9 Dictionaries and Sets.
Chapter 9 Dictionaries and Sets.
Python Primer 1: Types and Operators © 2013 Goodrich, Tamassia, Goldwasser1Python Primer.
More about Strings. String Formatting  So far we have used comma separators to print messages  This is fine until our messages become quite complex:
8-1 Compilers Compiler A program that translates a high-level language program into machine code High-level languages provide a richer set of instructions.
CSC 1010 Programming for All Lecture 3 Useful Python Elements for Designing Programs Some material based on material from Marty Stepp, Instructor, University.
Last Week Modules Save functions to a file, e.g., filename.py The file filename.py is a module We can use the functions in filename.py by importing it.
14. DICTIONARIES AND SETS Rocky K. C. Chang 17 November 2014 (Based on from Charles Dierbach, Introduction to Computer Science Using Python and Punch and.
Introduction to Computing Using Python Dictionaries: Keeping track of pairs  Class dict  Class tuple.
CS190/295 Programming in Python for Life Sciences: Lecture 6 Instructor: Xiaohui Xie University of California, Irvine.
Data Abstraction UW CSE 160 Spring What is a program? – A sequence of instructions to achieve some particular purpose What is a library? – A collection.
Strings CSE 1310 – Introduction to Computers and Programming Alexandra Stefan University of Texas at Arlington 1.
Strings CSE 1310 – Introduction to Computers and Programming Alexandra Stefan University of Texas at Arlington 1.
Introduction to Python Developed by Dutch programmer Guido van Rossum Named after Monty Python Open source development project Simple, readable language.
Winter 2016CISC101 - Prof. McLeod1 CISC101 Reminders Quiz 3 this week – last section on Friday. Assignment 4 is posted. Data mining: –Designing functions.
FILES AND EXCEPTIONS Topics Introduction to File Input and Output Using Loops to Process Files Processing Records Exceptions.
Guide to Programming with Python Chapter Four Strings, and Tuples; for Loops: The Word Jumble Game.
Binary Representation in Text
10 - Python Dictionary John R. Woodward.
CMSC201 Computer Science I for Majors Lecture 22 – Binary (and More)
CS 100: Roadmap to Computing
CSc 120 Introduction to Computer Programing II
Department of Computer Science,
Announcements Project 4 due Wed., Nov 7
Arithmetic operations, decisions and looping
Topics Introduction to File Input and Output
CHAPTER THREE Sequences.
String Encodings and Penny Math
Presented by Mirza Elahi 10/29/2018
CS 1111 Introduction to Programming Fall 2018
Python Primer 1: Types and Operators
6. Dictionaries and sets Rocky K. C. Chang 18 October 2018
functions: argument, return value
Dictionaries: Keeping track of pairs
15-110: Principles of Computing
CHAPTER 4: Lists, Tuples and Dictionaries
String Encodings and Penny Math
Topics Introduction to File Input and Output
Introduction to Computer Science
Presentation transcript:

Introduction to Computing Using Python More Built-in Container Classes  Container Class dict  Container Class set  Container Class tuple  Encoding of String Characters  Randomness and Random Sampling

Introduction to Computing Using Python User-defined indexes and dictionaries >>> employee[ ] ['Yu', 'Tsun'] >>> employee[ ] ['Anna', 'Karenina'] >>> employee[ ] ['Hans', 'Castorp'] >>> employee[ ] ['Yu', 'Tsun'] >>> employee[ ] ['Anna', 'Karenina'] >>> employee[ ] ['Hans', 'Castorp'] Goal: a container of employee records indexed by employee SS# Problems: the range of SS#s is huge SS#s are not really integers Solution: the dictionary class dict >>> employee = { ' ': ['Anna', 'Karenina'], ' ': ['Yu', 'Tsun'], ' ': ['Hans', 'Castorp']} >>> >>> employee = { ' ': ['Anna', 'Karenina'], ' ': ['Yu', 'Tsun'], ' ': ['Hans', 'Castorp']} >>> A dictionary contains (key, value) pairs >>> employee = { ' ': ['Anna', 'Karenina'], ' ': ['Yu', 'Tsun'], ' ': ['Hans', 'Castorp']} >>> employee[' '] ['Yu', 'Tsun'] >>> employee[' '] ['Anna', 'Karenina'] >>> employee = { ' ': ['Anna', 'Karenina'], ' ': ['Yu', 'Tsun'], ' ': ['Hans', 'Castorp']} >>> employee[' '] ['Yu', 'Tsun'] >>> employee[' '] ['Anna', 'Karenina'] keyvalue ' '['Anna', 'Karenina'] ' '['Yu', 'Tsun'] ' '['Hans', 'Castorp'] A key can be used as an index to access the corresponding value

Introduction to Computing Using Python Properties of dictionaries >>> employee = { ' ': ['Anna', 'Karenina'], ' ': ['Yu', 'Tsun'], ' ': ['Hans', 'Castorp']} >>> employee {' ': ['Hans', 'Castorp'], ' ': ['Anna', 'Karenina'], ' ': ['Yu', 'Tsun']} >>> >>> employee = { ' ': ['Anna', 'Karenina'], ' ': ['Yu', 'Tsun'], ' ': ['Hans', 'Castorp']} >>> employee {' ': ['Hans', 'Castorp'], ' ': ['Anna', 'Karenina'], ' ': ['Yu', 'Tsun']} >>> Dictionaries are not ordered Dictionaries are mutable >>> employee = { ' ': ['Anna', 'Karenina'], ' ': ['Yu', 'Tsun'], ' ': ['Hans', 'Castorp']} >>> employee {' ': ['Hans', 'Castorp'], ' ': ['Anna', 'Karenina'], ' ': ['Yu', 'Tsun']} >>> employee[' '] = 'Holden Cafield' >>> employee {' ': ['Hans', 'Castorp'], ' ': ['Anna', 'Karenina'], ' ': ['Yu', 'Tsun'], ' ': 'Holden Cafield'} >>> >>> employee = { ' ': ['Anna', 'Karenina'], ' ': ['Yu', 'Tsun'], ' ': ['Hans', 'Castorp']} >>> employee {' ': ['Hans', 'Castorp'], ' ': ['Anna', 'Karenina'], ' ': ['Yu', 'Tsun']} >>> employee[' '] = 'Holden Cafield' >>> employee {' ': ['Hans', 'Castorp'], ' ': ['Anna', 'Karenina'], ' ': ['Yu', 'Tsun'], ' ': 'Holden Cafield'} >>> >>> employee = { ' ': ['Anna', 'Karenina'], ' ': ['Yu', 'Tsun'], ' ': ['Hans', 'Castorp']} >>> employee {' ': ['Hans', 'Castorp'], ' ': ['Anna', 'Karenina'], ' ': ['Yu', 'Tsun']} >>> employee[' '] = 'Holden Cafield' >>> employee {' ': ['Hans', 'Castorp'], ' ': ['Anna', 'Karenina'], ' ': ['Yu', 'Tsun'], ' ': 'Holden Cafield'} >>> employee[' '] = 'Holden Caulfield' >>> employee {' ': ['Hans', 'Castorp'], ' ': ['Anna', 'Karenina'], ' ': ['Yu', 'Tsun'], ' ': 'Holden Caulfield’} >>> employee = { ' ': ['Anna', 'Karenina'], ' ': ['Yu', 'Tsun'], ' ': ['Hans', 'Castorp']} >>> employee {' ': ['Hans', 'Castorp'], ' ': ['Anna', 'Karenina'], ' ': ['Yu', 'Tsun']} >>> employee[' '] = 'Holden Cafield' >>> employee {' ': ['Hans', 'Castorp'], ' ': ['Anna', 'Karenina'], ' ': ['Yu', 'Tsun'], ' ': 'Holden Cafield'} >>> employee[' '] = 'Holden Caulfield' >>> employee {' ': ['Hans', 'Castorp'], ' ': ['Anna', 'Karenina'], ' ': ['Yu', 'Tsun'], ' ': 'Holden Caulfield’} Dictionaries are mutable new (key,value) pairs can be added Dictionaries are mutable new (key,value) pairs can be added the value corresponding to a key can be modified The empty dictionary is {} Dictionary keys must be immutable >>> employee = {[1,2]:1, [2,3]:3} Traceback (most recent call last): File " ", line 1, in employee = {[1,2]:1, [2,3]:3} TypeError: unhashable type: 'list' >>> employee = {[1,2]:1, [2,3]:3} Traceback (most recent call last): File " ", line 1, in employee = {[1,2]:1, [2,3]:3} TypeError: unhashable type: 'list'

Introduction to Computing Using Python Dictionary operators >>> days = {'Mo':1, 'Tu':2, 'W':3} >>> days['Mo'] 1 >>> days['Th'] = 5 >>> days {'Mo': 1, 'Tu': 2, 'Th': 5, 'W': 3} >>> days['Th'] = 4 >>> days {'Mo': 1, 'Tu': 2, 'Th': 4, 'W': 3} >>> 'Fr' in days False >>> len(days) 4 >>> days = {'Mo':1, 'Tu':2, 'W':3} >>> days['Mo'] 1 >>> days['Th'] = 5 >>> days {'Mo': 1, 'Tu': 2, 'Th': 5, 'W': 3} >>> days['Th'] = 4 >>> days {'Mo': 1, 'Tu': 2, 'Th': 4, 'W': 3} >>> 'Fr' in days False >>> len(days) 4 Class dict supports some of the same operators as class list Class dict does not support all the operators that class list supports + and * for example

Introduction to Computing Using Python Dictionary methods >>> days {'Mo': 1, 'Tu': 2, 'Th': 4, 'W': 3} >>> days.pop('Tu') 2 >>> days {'Mo': 1, 'Th': 4, 'W': 3} >>> days2 = {'Tu':2, 'Fr':5} >>> days.update(days2) >>> days {'Fr': 5, 'W': 3, 'Th': 4, 'Mo': 1, 'Tu': 2} >>> days.items() dict_items([('Fr', 5), ('W', 3), ('Th', 4), ('Mo', 1), ('Tu', 2)]) >>> days.keys() dict_keys(['Fr', 'W', 'Th', 'Mo', 'Tu']) >>> >>> vals = days.values() >>> vals dict_values([5, 3, 4, 1, 2]) >>> >>> days {'Mo': 1, 'Tu': 2, 'Th': 4, 'W': 3} >>> days.pop('Tu') 2 >>> days {'Mo': 1, 'Th': 4, 'W': 3} >>> days2 = {'Tu':2, 'Fr':5} >>> days.update(days2) >>> days {'Fr': 5, 'W': 3, 'Th': 4, 'Mo': 1, 'Tu': 2} >>> days.items() dict_items([('Fr', 5), ('W', 3), ('Th', 4), ('Mo', 1), ('Tu', 2)]) >>> days.keys() dict_keys(['Fr', 'W', 'Th', 'Mo', 'Tu']) >>> >>> vals = days.values() >>> vals dict_values([5, 3, 4, 1, 2]) >>> OperationExplanation d.items() Returns a view of the (key, value) pairs in d d.keys() Returns a view of the keys of d d.pop(key) Removes the (key, value) pair with key key from d and returns the value d.update(d2) Adds the (key, value) pairs of dictionary d2 to d d.values() Returns a view of the values of d The containers returned by d.items(), d.keys(), and d.values() (called views) can be iterated over >>> days {'Mo': 1, 'Tu': 2, 'Th': 4, 'W': 3} >>> days.pop('Tu') 2 >>> days {'Mo': 1, 'Th': 4, 'W': 3} >>> days2 = {'Tu':2, 'Fr':5} >>> days.update(days2) >>> days {'Fr': 5, 'W': 3, 'Th': 4, 'Mo': 1, 'Tu': 2} >>> days.items() dict_items([('Fr', 5), ('W', 3), ('Th', 4), ('Mo', 1), ('Tu', 2)]) >>> days.keys() dict_keys(['Fr', 'W', 'Th', 'Mo', 'Tu']) >>> >>> vals = days.values() >>> vals dict_values([5, 3, 4, 1, 2]) >>> for val in vals: print(val, end=' ') >>> >>> days {'Mo': 1, 'Tu': 2, 'Th': 4, 'W': 3} >>> days.pop('Tu') 2 >>> days {'Mo': 1, 'Th': 4, 'W': 3} >>> days2 = {'Tu':2, 'Fr':5} >>> days.update(days2) >>> days {'Fr': 5, 'W': 3, 'Th': 4, 'Mo': 1, 'Tu': 2} >>> days.items() dict_items([('Fr', 5), ('W', 3), ('Th', 4), ('Mo', 1), ('Tu', 2)]) >>> days.keys() dict_keys(['Fr', 'W', 'Th', 'Mo', 'Tu']) >>> >>> vals = days.values() >>> vals dict_values([5, 3, 4, 1, 2]) >>> for val in vals: print(val, end=' ') >>>

Introduction to Computing Using Python Dictionary vs. multi-way if statement Uses of a dictionary: container with custom indexes def complete(abbreviation): 'returns day of the week corresponding to abbreviation' if abbreviation == 'Mo': return 'Monday' elif abbreviation == 'Tu': return 'Tuesday' elif else: # abbreviation must be Su return 'Sunday' def complete(abbreviation): 'returns day of the week corresponding to abbreviation' if abbreviation == 'Mo': return 'Monday' elif abbreviation == 'Tu': return 'Tuesday' elif else: # abbreviation must be Su return 'Sunday' def complete(abbreviation): 'returns day of the week corresponding to abbreviation' days = {'Mo': 'Monday', 'Tu':'Tuesday', 'We': 'Wednesday', 'Th': 'Thursday', 'Fr': 'Friday', 'Sa': 'Saturday', 'Su':'Sunday'} return days[abbreviation] def complete(abbreviation): 'returns day of the week corresponding to abbreviation' days = {'Mo': 'Monday', 'Tu':'Tuesday', 'We': 'Wednesday', 'Th': 'Thursday', 'Fr': 'Friday', 'Sa': 'Saturday', 'Su':'Sunday'} return days[abbreviation] Uses of a dictionary: container with custom indexes alternative to the multi-way if statement

Introduction to Computing Using Python Dictionary as a container of counters >>> grades = [95, 96, 100, 85, 95, 90, 95, 100, 100] >>> frequency(grades) {96: 1, 90: 1, 100: 3, 85: 1, 95: 3} >>> >>> grades = [95, 96, 100, 85, 95, 90, 95, 100, 100] >>> frequency(grades) {96: 1, 90: 1, 100: 3, 85: 1, 95: 3} >>> Problem: computing the number of occurrences of items in a list Solution: Iterate through the list and, for each grade, increment the counter corresponding to the grade. Problems: impossible to create counters before seeing what’s in the list how to store grade counters so a counter is accessible using the corresponding grade Solution: a dictionary mapping a grade (the key) to its counter (the value) Uses of a dictionary: container with custom indexes alternative to the multi-way if statement container of counters

Introduction to Computing Using Python Dictionary as a container of counters >>> grades = [95, 96, 100, 85, 95, 90, 95, 100, 100] Problem: computing the number of occurrences of items in a list 95 1 def frequency(itemList): 'returns frequency of items in itemList' counters = {} def frequency(itemList): 'returns frequency of items in itemList' counters = {} ⌃ ⌃ ⌃ ⌃ ⌃ ⌃ ⌃ ⌃ ⌃ ⌃ ⌃ ⌃ ⌃ ⌃ counters def frequency(itemList): 'returns frequency of items in itemList' counters = {} for item in itemList: if item in counters: # increment item counter counters[item] += 1 else: # create item counter counters[item] = 1 return counters def frequency(itemList): 'returns frequency of items in itemList' counters = {} for item in itemList: if item in counters: # increment item counter counters[item] += 1 else: # create item counter counters[item] = 1 return counters

Introduction to Computing Using Python Exercise def numChars(filename): 'returns the number of characters in file filename' infile = open(filename, 'r') content = infile.read() infile.close() return len(content) def numChars(filename): 'returns the number of characters in file filename' infile = open(filename, 'r') content = infile.read() infile.close() return len(content) Implement function wordcount() that takes as input a text—as a string— and prints the frequency of each word in the text; assume there is no punctuation in the text. def wordCount(text): 'prints frequency of each word in text' wordList = text.split() # split text into list of words counters ={} # dictionary of counters for word in wordList: if word in counters: # counter for word exists counters[word] += 1 else: # counter for word doesn't exist counters[word] = 1 for word in counters: # print word counts if counters[word] == 1: print('{:8} appears {} time.'.format(word, counters[word])) else: print('{:8} appears {} times.'.format(word, counters[word])) def wordCount(text): 'prints frequency of each word in text' wordList = text.split() # split text into list of words counters ={} # dictionary of counters for word in wordList: if word in counters: # counter for word exists counters[word] += 1 else: # counter for word doesn't exist counters[word] = 1 for word in counters: # print word counts if counters[word] == 1: print('{:8} appears {} time.'.format(word, counters[word])) else: print('{:8} appears {} times.'.format(word, counters[word])) >>> text = 'all animals are equal but some animals are more equal than other' >>> wordCount(text) all appears 1 time. animals appears 2 times. some appears 1 time. equal appears 2 times. but appears 1 time. other appears 1 time. are appears 2 times. than appears 1 time. more appears 1 time. >>> >>> text = 'all animals are equal but some animals are more equal than other' >>> wordCount(text) all appears 1 time. animals appears 2 times. some appears 1 time. equal appears 2 times. but appears 1 time. other appears 1 time. are appears 2 times. than appears 1 time. more appears 1 time. >>>

Introduction to Computing Using Python Built-in class tuple >>> lst = ['one', 'two', 3] >>> lst[2] 3 >>> lst[2] = 'three' >>> lst ['one', 'two', 'three'] >>> tpl = ('one', 'two', 3) >>> tpl ('one', 'two', 3) >>> tpl[2] 3 >>> tpl[2] = 'three' Traceback (most recent call last): File " ", line 1, in tpl[2] = 'three' TypeError: 'tuple' object does not support item assignment >>> >>> lst = ['one', 'two', 3] >>> lst[2] 3 >>> lst[2] = 'three' >>> lst ['one', 'two', 'three'] >>> tpl = ('one', 'two', 3) >>> tpl ('one', 'two', 3) >>> tpl[2] 3 >>> tpl[2] = 'three' Traceback (most recent call last): File " ", line 1, in tpl[2] = 'three' TypeError: 'tuple' object does not support item assignment >>> The class tuple is the same as class list … except that it is immutable Why do we need it?Why do we need it? Sometimes, we need to have an “immutable list”. For example, when we need a dictionary that has lists as keys

Introduction to Computing Using Python Exercise Implement function lookup() that implements a phone book lookup application. Your function takes, as input, a dictionary representing a phone book, mappingtuples (containing the first and last name) to strings (containing phone numbers) def lookup(phonebook): '''implements interactive phone book service using the input phonebook dictionary''' while True: first = input('Enter the first name: ') last = input('Enter the last name: ') person = (first, last) # construct the key if person in phonebook: # if key is in dictionary print(phonebook[person]) # print value else: # if key not in dictionary print('The name you entered is not known.') def lookup(phonebook): '''implements interactive phone book service using the input phonebook dictionary''' while True: first = input('Enter the first name: ') last = input('Enter the last name: ') person = (first, last) # construct the key if person in phonebook: # if key is in dictionary print(phonebook[person]) # print value else: # if key not in dictionary print('The name you entered is not known.') >>> phonebook = { ('Anna','Karenina'):'(123) ', ('Yu', 'Tsun'):'(901) ', ('Hans', 'Castorp'):'(321) '} >>> lookup(phonebook) Enter the first name: Anna Enter the last name: Karenina (123) Enter the first name: >>> phonebook = { ('Anna','Karenina'):'(123) ', ('Yu', 'Tsun'):'(901) ', ('Hans', 'Castorp'):'(321) '} >>> lookup(phonebook) Enter the first name: Anna Enter the last name: Karenina (123) Enter the first name:

>>> ages = {28, 25, 22} >>> ages {25, 28, 22} >>> type(ages) >>> ages2 = {22, 23, 22, 23, 25} >>> ages2 {25, 22, 23} >>> lst = [22, 23, 22, 23, 25] >>> list(set(lst)) [25, 22, 23] >>> ages = {28, 25, 22} >>> ages {25, 28, 22} >>> type(ages) >>> ages2 = {22, 23, 22, 23, 25} >>> ages2 {25, 22, 23} >>> lst = [22, 23, 22, 23, 25] >>> list(set(lst)) [25, 22, 23] >>> ages = {28, 25, 22} >>> >>> ages = {28, 25, 22} >>> >>> ages = {28, 25, 22} >>> ages {25, 28, 22} >>> type(ages) >>> >>> ages = {28, 25, 22} >>> ages {25, 28, 22} >>> type(ages) >>> >>> ages = {28, 25, 22} >>> ages {25, 28, 22} >>> type(ages) >>> ages2 = {22, 23, 22, 23, 25} >>> ages2 {25, 22, 23} >>> ages = {28, 25, 22} >>> ages {25, 28, 22} >>> type(ages) >>> ages2 = {22, 23, 22, 23, 25} >>> ages2 {25, 22, 23} Introduction to Computing Using Python Built-in class set The built in class set represents a mathematical set an unordered collection of non-identical items supports operations such as set membership, set union, set intersection, set difference, etc curly braces duplicate values are ignored Example application: remove duplicates from a list WARNING: the order of the items in the list changes >>> s = {} >>> type(s) >>> s = {} >>> type(s) Empty set: Question: How does Python differentiate between a set object and a dict object?

Introduction to Computing Using Python set operators >>> ages {28, 25, 22} >>> ages2 {25, 22, 23} >>> 28 in ages True >>> len(ages2) 3 >>> ages == ages2 False >>> {22, 25} < ages2 True >>> ages <= ages2 False >>> ages | ages2 {22, 23, 25, 28} >>> ages & ages2 {25, 22} >>> ages - ages2 {28} >>> ages ^ ages2 {28, 23} >>> ages {28, 25, 22} >>> ages2 {25, 22, 23} >>> 28 in ages True >>> len(ages2) 3 >>> ages == ages2 False >>> {22, 25} < ages2 True >>> ages <= ages2 False >>> ages | ages2 {22, 23, 25, 28} >>> ages & ages2 {25, 22} >>> ages - ages2 {28} >>> ages ^ ages2 {28, 23} OperationExplanation s == t True if sets s and t contain the same elements, False otherwise s != t True if sets s and t do not contain the same elements, False otherwise s <= t True if every element of set s is in set t, False otherwise s < t True if s <= t and s != t s | t Returns the union of sets s and t s & t Returns the intersection of sets s and t s - t Returns the difference between sets s and t s ^ t Returns the symmetric difference of sets s and t

Introduction to Computing Using Python set methods >>> ages {28, 25, 22} >>> ages2 {25, 22, 23} >> ages.add(30) >>> ages {25, 28, 30, 22} >>> ages.remove(25) >>> ages {28, 30, 22} >>> ages.clear() >>> ages set() >>> ages {28, 25, 22} >>> ages2 {25, 22, 23} >> ages.add(30) >>> ages {25, 28, 30, 22} >>> ages.remove(25) >>> ages {28, 30, 22} >>> ages.clear() >>> ages set() OperationExplanation s.add(item) add item to set s s.remove(item) remove item from set s s.clear() removes all elements from s Note that sets are mutable

Introduction to Computing Using Python Character encodings A string ( str ) object contains an ordered sequence of characters which can be any of the following: lowercase and uppercase letters in the English alphabet: a b c … z and A B C … Z decimal digits: punctuation:,. : ; ‘ “ ! ? etc. Mathematical operators and common symbols: = + - / * $ # & etc. More later Each character is mapped to a specific bit encoding, and this encoding maps back to the character. For many years, the standard encoding for characters in the English language was the American Standard Code for Information Interchange (ASCII)

Introduction to Computing Using Python ASCII For many years, the standard encoding for characters in the English language was the American Standard Code for Information Interchange (ASCII) The code for a is 97, which is in binary or 0x61 in hexadecimal notation The encoding for each ASCII character fits in 1 byte (8 bits)

Introduction to Computing Using Python Built-in functions ord() and char() >>> ord('a') 97 >>> ord('?') 63 >>> ord('\n') 10 >>> >>> ord('a') 97 >>> ord('?') 63 >>> ord('\n') 10 >>> Function ord() takes a character (i.e., a string of length 1) as input and returns its ASCII code Function chr() takes an ASCII encoding (i.e., a non-negative integer) and returns the corresponding character >>> ord('a') 97 >>> ord('?') 63 >>> ord('\n') 10 >>> chr(10) '\n' >>> chr(63) '?' >>> chr(97) 'a' >>> >>> ord('a') 97 >>> ord('?') 63 >>> ord('\n') 10 >>> chr(10) '\n' >>> chr(63) '?' >>> chr(97) 'a' >>>

Introduction to Computing Using Python Beyond ASCII A string object contains an ordered sequence of characters which can be any of the following: lowercase and uppercase letters in the English alphabet: a b c … z and A B C … Z decimal digits: punctuation:,. : ; ‘ “ ! ? etc. Mathematical operators and common symbols: = + - / * $ # & etc. Characters from languages other than English Technical symbols from math, science, engineering, etc. There are only 128 characters in the ASCII encoding Unicode has been developed to be the universal character encoding scheme

Introduction to Computing Using Python Unicode In Unicode, every character is represented by an integer code point. The code point is not necessarily the actual byte representation of the character; it is just the identifier for the particular character >>> '\u0061' 'a' >>> >>> '\u0061' 'a' >>> The code point for letter a is the integer with hexadecimal value 0x0061 Unicode conveniently uses a code point for ASCII characters that is equal to their ASCII code With Unicode, we can write strings in english >>> '\u0061' 'a' >>> '\u0064\u0061d' 'dad' >>> >>> '\u0061' 'a' >>> '\u0064\u0061d' 'dad' >>> >>> '\u0061' 'a' >>> '\u0064\u0061d' 'dad' >>> '\u0409\u0443\u0431\u043e\u043c\u 0438\u0440' 'Љубомир' >>> >>> '\u0061' 'a' >>> '\u0064\u0061d' 'dad' >>> '\u0409\u0443\u0431\u043e\u043c\u 0438\u0440' 'Љубомир' >>> >>> '\u0061' 'a' >>> '\u0064\u0061d' 'dad' >>> '\u0409\u0443\u0431\u043e\u043c\u 0438\u0440' 'Љубомир' >>> '\u4e16\u754c\u60a8\u597d!' ' 世界您好 !' >>> >>> '\u0061' 'a' >>> '\u0064\u0061d' 'dad' >>> '\u0409\u0443\u0431\u043e\u043c\u 0438\u0440' 'Љубомир' >>> '\u4e16\u754c\u60a8\u597d!' ' 世界您好 !' >>> With Unicode, we can write strings in english cyrillic With Unicode, we can write strings in english cyrillic chinese … escape sequence \u indicates start of Unicode code point

Introduction to Computing Using Python String comparison, revisited Unicode code points, being integers, give a natural ordering to all the characters representable in Unicode >>> s1 = '\u0021' >>> s1 '!' >>> s2 = '\u0409' >>> s2 'Љ' >>> s1 < s2 True >>> >>> s1 = '\u0021' >>> s1 '!' >>> s2 = '\u0409' >>> s2 'Љ' >>> s1 < s2 True >>> Unicode was designed so that, for any pair of characters from the same alphabet, the one that is earlier in the alphabet will have a smaller Unicode code point.

Introduction to Computing Using Python Unicode Transformation Format (UTF) A Unicode string is a sequence of code points that are numbers from 0 to 0x10FFFF. Unlike ASCII codes, Unicode code points are not what is stored in memory; the rule for translating a Unicode character or code point into a sequence of bytes is called an encoding. There are several Unicode encodings: UTF-8, UTF-16, and UTF-32. UTF stands for Unicode Transformation Format. UTF-8 has become the preferred encoding for and web pages The default encoding when you write Python 3 programs is UTF-8. In UTF-8, every ASCII character has an encoding that is exactly the 8-bit ASCII encoding.

Introduction to Computing Using Python Assigning an encoding to “raw bytes” When a file is downloaded from the web, it does not have an encoding the file could be a picture or an executable program, i.e. not a text file the downloaded file content is a sequence of bytes, i.e. of type bytes >>> content b'This is a text document\nposted on the\nWWW.\n' >>> type(content) >>> >>> content b'This is a text document\nposted on the\nWWW.\n' >>> type(content) >>> >>> content b'This is a text document\nposted on the\nWWW.\n' >>> type(content) >>> s = content.decode('utf-8') >>> type(s) >>> s 'This is a text document\nposted on the\nWWW.\n' >>> >>> content b'This is a text document\nposted on the\nWWW.\n' >>> type(content) >>> s = content.decode('utf-8') >>> type(s) >>> s 'This is a text document\nposted on the\nWWW.\n' >>> The bytes method decode() takes an encoding description as input and returns a string that is obtained by applying the encoding to the sequence of bytes the default is UTF-8 >>> content b'This is a text document\nposted on the\nWWW.\n' >>> type(content) >>> s = content.decode('utf-8') >>> type(s) >>> s 'This is a text document\nposted on the\nWWW.\n' >>> s = content.decode() >>> s 'This is a text document\nposted on the\nWWW.\n' >>> >>> content b'This is a text document\nposted on the\nWWW.\n' >>> type(content) >>> s = content.decode('utf-8') >>> type(s) >>> s 'This is a text document\nposted on the\nWWW.\n' >>> s = content.decode() >>> s 'This is a text document\nposted on the\nWWW.\n' >>> The bytes method decode() takes an encoding description as input and returns a string that is obtained by applying the encoding to the sequence of bytes

Introduction to Computing Using Python Randomness Some apps need numbers generated “at random” (i.e., from some probability distribution): scientific computing financial simulations cryptography computer games Truly random numbers are hard to generate Most often, a pseudorandom number generator is used numbers only appear to be random they are really generated using a deterministic process The Python standard library module random provides a pseudo random number generator as well useful sampling functions

>>> import random >>> random.randrange(1, 7) 2 >>> >>> import random >>> random.randrange(1, 7) 2 >>> Introduction to Computing Using Python Standard Library module random Function randrange() returns a “random” integer number from a given range >>> import random >>> random.randrange(1, 7) 2 >>> random.randrange(1, 7) 1 >>> >>> import random >>> random.randrange(1, 7) 2 >>> random.randrange(1, 7) 1 >>> >>> import random >>> random.randrange(1, 7) 2 >>> random.randrange(1, 7) 1 >>> random.randrange(1, 7) 4 >>> >>> import random >>> random.randrange(1, 7) 2 >>> random.randrange(1, 7) 1 >>> random.randrange(1, 7) 4 >>> >>> import random >>> random.randrange(1, 7) 2 >>> random.randrange(1, 7) 1 >>> random.randrange(1, 7) 4 >>> random.randrange(1, 7) 2 >>> >>> import random >>> random.randrange(1, 7) 2 >>> random.randrange(1, 7) 1 >>> random.randrange(1, 7) 4 >>> random.randrange(1, 7) 2 >>> >>> import random >>> random.randrange(1, 7) 2 >>> random.randrange(1, 7) 1 >>> random.randrange(1, 7) 4 >>> random.randrange(1, 7) 2 >>> random.uniform(0, 1) >>> random.uniform(0, 1) >>> random.uniform(0, 1) >>> >>> import random >>> random.randrange(1, 7) 2 >>> random.randrange(1, 7) 1 >>> random.randrange(1, 7) 4 >>> random.randrange(1, 7) 2 >>> random.uniform(0, 1) >>> random.uniform(0, 1) >>> random.uniform(0, 1) >>> range is from 1 up to (but not including) 7 Function uniform() returns a “random” float number from a given range Example usage: simulate the throws of a die

Introduction to Computing Using Python Standard Library module random >>> names = ['Ann', 'Bob', 'Cal', 'Dee', 'Eve', 'Flo', 'Hal', 'Ike'] >>> import random >>> random.shuffle(names) >>> names ['Hal', 'Dee', 'Bob', 'Ike', 'Cal', 'Eve', 'Flo', 'Ann'] >>> >>> names = ['Ann', 'Bob', 'Cal', 'Dee', 'Eve', 'Flo', 'Hal', 'Ike'] >>> import random >>> random.shuffle(names) >>> names ['Hal', 'Dee', 'Bob', 'Ike', 'Cal', 'Eve', 'Flo', 'Ann'] >>> >>> names = ['Ann', 'Bob', 'Cal', 'Dee', 'Eve', 'Flo', 'Hal', 'Ike'] >>> import random >>> random.shuffle(names) >>> names ['Hal', 'Dee', 'Bob', 'Ike', 'Cal', 'Eve', 'Flo', 'Ann'] >>> random.choice(names) 'Bob' >>> random.choice(names) 'Ann' >>> random.choice(names) 'Cal' >>> random.choice(names) 'Cal' >>> >>> names = ['Ann', 'Bob', 'Cal', 'Dee', 'Eve', 'Flo', 'Hal', 'Ike'] >>> import random >>> random.shuffle(names) >>> names ['Hal', 'Dee', 'Bob', 'Ike', 'Cal', 'Eve', 'Flo', 'Ann'] >>> random.choice(names) 'Bob' >>> random.choice(names) 'Ann' >>> random.choice(names) 'Cal' >>> random.choice(names) 'Cal' >>> >>> names = ['Ann', 'Bob', 'Cal', 'Dee', 'Eve', 'Flo', 'Hal', 'Ike'] >>> import random >>> random.shuffle(names) >>> names ['Hal', 'Dee', 'Bob', 'Ike', 'Cal', 'Eve', 'Flo', 'Ann'] >>> random.choice(names) 'Bob' >>> random.choice(names) 'Ann' >>> random.choice(names) 'Cal' >>> random.choice(names) 'Cal' >>> random.sample(names, 3) ['Ike', 'Hal', 'Bob'] >>> random.sample(names, 3) ['Flo', 'Bob', 'Ike'] >>> random.sample(names, 3) ['Ike', 'Ann', 'Hal'] >>> >>> names = ['Ann', 'Bob', 'Cal', 'Dee', 'Eve', 'Flo', 'Hal', 'Ike'] >>> import random >>> random.shuffle(names) >>> names ['Hal', 'Dee', 'Bob', 'Ike', 'Cal', 'Eve', 'Flo', 'Ann'] >>> random.choice(names) 'Bob' >>> random.choice(names) 'Ann' >>> random.choice(names) 'Cal' >>> random.choice(names) 'Cal' >>> random.sample(names, 3) ['Ike', 'Hal', 'Bob'] >>> random.sample(names, 3) ['Flo', 'Bob', 'Ike'] >>> random.sample(names, 3) ['Ike', 'Ann', 'Hal'] >>> Defined in module random are functions shuffle(), choice(), sample(), …

Introduction to Computing Using Python Exercise >>> game(2, 3) Enter next position (format: x y): 0 2 No bomb at position 0 2 Enter next position (format: x y): 1 1 No bomb at position 1 1 Enter next position (format: x y): 0 1 You found the bomb! >>> game(2, 3) Enter next position (format: x y): 0 2 No bomb at position 0 2 Enter next position (format: x y): 1 1 No bomb at position 1 1 Enter next position (format: x y): 0 1 You found the bomb! Develop function game() that: takes integers r and c as input, generates a field of r rows and c columns with a bomb at a randomly chosen row and column, and then asks users to find the bomb import random def game(rows, cols): 'a simple bomb finding game' # generate a list of size rows*cols that contains # empty strings except for 1 'B' at some random index table = (rows*cols-1)*[''] + ['B'] random.shuffle(table) while True: pos = input('Enter next position (format: x y): ') position = pos.split() # position (x, y) corresponds to index x*cols + y of table if table[int(position[0])*cols + int(position[1])] == 'B': print('You found the bomb!') break else: print('No bomb at position', pos) import random def game(rows, cols): 'a simple bomb finding game' # generate a list of size rows*cols that contains # empty strings except for 1 'B' at some random index table = (rows*cols-1)*[''] + ['B'] random.shuffle(table) while True: pos = input('Enter next position (format: x y): ') position = pos.split() # position (x, y) corresponds to index x*cols + y of table if table[int(position[0])*cols + int(position[1])] == 'B': print('You found the bomb!') break else: print('No bomb at position', pos)