~~SLIDESHOW~~ ~~NOTOC~~ ===== Contents ===== * Literals * Variables and identifiers * Operators * Expressions * Data types ===== Literals ===== {{http://mkonar.org/assets/img/cat-silhouette-01-trans-64px.png}} ===== What is a literal? ===== * **literal**: a sequence of one or more characters that stands for itself. * **numeric literal**: contains only the digits 0–9, a sign character (1 or 2) and a optional decimal point. * integer versus floating point value * ''%%e%%'' for scientific notation * ''%%3%%'', ''%%-42%%'', ''%%+98.6%%'', ''%%6.033e23%%'' ===== Number ranges ===== * Floating point values have limited range and precision. * IEEE 754: ±10-308 to ±10308 with 16 to 17 digits of precision. * **arithmetic overflow**: results when operation causes number to be “too big”. >>> 1.5e200 * 2.0e210 inf * **arithmetic underflow**: results when operation causes number to be “too small”. >>> 1.0e-300 / 1.0e100 0.0 ===== Floating point numbers are an approximation ===== * Limited precision means actual values are approximations. >>> 6 * 1/10 0.6 >>> 6 * (1/10) 0.6000000000000001 ===== Formatting output ===== * ''%%format()%%'' produces a string version of a value with a specific number of decimal places. * **format specifier** says how many places and format. >>> 12/5 2.4 >>> format(12/5, '.2f') # 2 places, floating point '2.40' >>> format(2 ** 100, '.6e') # 6 places, scientific notation '1.267651e 1 30' >>> format(13402.25, ',.2f') # optional comma '13,402.25' ===== String literals ===== * Use either single-quote or double-quote. greeting = 'Hi there' "Vernacular nepotism is fractious." 'A' "A" * Clever use: msg = 'She said, "Yellow."' msg = "She's making a radio." ===== Character codes ===== * Characters need to be encoded as (binary) numbers. * Python uses [[http://www.w3schools.com/charsets/ref_html_utf8.asp|UTF-8]] by default. * ''%%ord()%%'' translates a single character into its UTF-8 code. * ''%%chr()%%'' converts a UTF-8 code into a character. >>> ord('1') 49 >>> ord('2') 50 >>> ord('a') 97 >>> ord('A') 65 ===== Control characters ===== * **control characters**: non-printing characters used to control display of output. * Represented with **escape sequences** (backslash in Python). * Most popular escape sequence is the newline control: ''%%'\n'%%''. >>> print('Eat\nMore\nElderberries') Eat More Elderberries ===== String formatting ===== * Format strings with ''%%format( value, format_specifier )%%'' format('Hello', '<16') # left aligned field 16 characters wide 'Hello ' format('Hello', '>16') # right aligned field 16 characters wide ' Hello' format('Hello', '.>16') # fill with '.' '...........Hello' ===== Implicit Line Joining ===== * What to do with long lines in source code? * **implicit joining**: you can break the line at some points without messing up logic or syntax. print('Name:', student_name, 'Address:', student_address, 'Number of Credits:', total_credits, 'GPA:', current_gpa) * Doesn’t work to break up a string. ===== Explicit Line Joining ===== * **explicit joining** (backslash) can be used in some situations where implicit joining won’t. num_seconds = num_hours * 60 * 60 + \ num_minutes * 60 * Also doesn’t work to break up strings. ===== Silly encoding example ===== # This program displays the Unicode encoding for 'Hello World! # program greeting print('The Unicode encoding for "Hello World!" is:') # output results print(ord('H'), ord('e'), ord('l'), ord('l'), ord('o'), ord(' '), ord('W'), ord('o'), ord('r'), ord('l'), ord('d'), ord('!')) ===== Variables and Identifiers ===== {{http://mkonar.org/assets/img/cat-silhouette-01-trans-64px.png}} ===== What is a variable? ===== * **variable**: a name associated with a value. +--------+ num -->| 10 | +--------+ ===== Assignment ===== * **assignment**: take the value resulting from the expression on the right and copy it into the variable on the left. * **assignment operator**: ''%%=%%'' in Python. * ''%%=%%'' is //not// “equals”! foo = 7 num = 1 + foo foo = foo + 1 ===== Variable reassignment ===== num = 10 # +--------+ k = num # num -->| 10 | # k -->| | # +--------+ k = 20 # +--------+ # num -->| 10 | # +--------+ # +--------+ # k -->| 20 | # +--------+ ===== id() ===== * Use ''%%id()%%'' to see if two variables are pointing to the same thing. >>> num = 10 k = num >>> id(num) ??? # some number >>> id(k) ??? # same number as above k = 20 >>> id(num) ??? # same as before >>> id(k) ??? # different ===== What is an identifier? ===== * **identifier**: a sequence of one or more characters used to provide a name for a given program element. * **identifier**: names of things. * Rules of the name: * letters, digits, and the underscore character only (no spaces) * can’t start with a digit * don’t use underscore for the first character for now * can be as long as you want ===== Keywords and help ===== * **keyword** an identifier that has predefined meaning in a programming language. * You can’t use a keyword as your own identifier in Python. * Get a list of keywords: >>> help() help> keywords # table of keywords appears help> quit >>> * Things you think should be keywords are not! * Check “special” words using ''%%'testword' in dir(__builtins__)%%'' ===== Example: Restaurant Tab Calculation ===== RestaurantTab.py # Restaurant Tab Calculation Program # This program will calculate a restaurant tab with a gift certificate # initialization tax = 0.08 # program greeting print('This program will calculate a restaurant tab for a couple with') print('a gift certificate, with a restaurant tax of', tax * 100, '%\n') # get amount of gift certificate amt_certificate = float(input('Enter amount of the gift certificate: ')) # cost of ordered items print('Enter ordered items for person 1') appetizer_per1 = float(input('Appetizier: ')) entree_per1 = float(input('Entree: ')) drinks_per1 = float(input('Drinks: ')) dessert_per1 = float(input('Dessert: ')) print('\nEnter ordered items for person 2') appetizer_per2 = float(input('Appetizier: ')) entree_per2 = float(input('Entree: ')) drinks_per2 = float(input('Drinks: ')) dessert_per2 = float(input('Dessert: ')) # total items amt_person1 = appetizer_per1 + entree_per1 + drinks_per1 + dessert_per1 amt_person2 = appetizer_per2 + entree_per2 + drinks_per2 + dessert_per2 # compute tab with tax items_cost = amt_person1 + amt_person2 tab = items_cost + items_cost * tax # display amount owe print('\nOrdered items: $', format(items_cost, '.2f')) print('Restaurant tax: $', format(items_cost * tax, '.2f')) print('Tab: $', format(tab - amt_certificate, '.2f')) print('(negative amount indicates unused amount of gift certificate)') ===== Operators ===== {{http://mkonar.org/assets/img/cat-silhouette-01-trans-64px.png}} ===== What Is an Operator? ===== **operator**: a symbol that represents an operation that may be performed on one or more operands. **binary operator**: takes two operands **unary operator**: takes one operand ===== Arithmetic operators ===== ^symbol ^operator ^example ^result ^ |-x |negation |-10 |-10 | |x + y |addition |10 + 25 |35 | |x - y |subtraction |10 - 25 |-15 | |x * y |multiplication |10 * 5 |50 | |x / y |division |25 / 10 |2.5 | |x %%//%% y |truncating div. |25 %%//%% 10 |2 | | | |25 %%//%% 10.0 |2.0 | |x % y |modulus |25 % 10 |2.0 | |x %%**%% y |exponentiation |10 %%**%% 2 |100 | ===== Example: Your Place in the Universe ===== PlaceInUniverse.py # Your Place in the Universe Program # This program will determine the approximate number of atoms that a person is # person consists of and the percent of the universe that they comprise # Initialization num_atoms_universe = 10e80 weight_avg_person = 70 # 70 kg (154 lbs) num_atoms_avg_person = 7e27 # Program greeting print('This program will determine your place in the universe.') # Prompt for user's weight weight_lbs = int(input('Enter your weight in pounds: ')) # Convert weight to kilograms weight_kg = 2.2 * weight_lbs # Determine number atoms and percentage of universe num_atoms = (weight_kg / weight_avg_person) * num_atoms_avg_person percent_of_universe = (num_atoms / num_atoms_universe) * 100 # Display results print('You contain approximately', format(num_atoms, '.2e'), 'atoms') print('Therefore, you comprise', format(percent_of_universe, '.2e'), '% of the universe') ===== Expressions and Data Types ===== {{http://mkonar.org/assets/img/cat-silhouette-01-trans-64px.png}} ===== What is an expression? ===== * **expression**: a combination of symbols that evaluates to a value. * ''%%4 + (3 * k)%%'' is an expression. * Has two subexpressions: * ''%%4%%'' * ''%%(3 * k)%%'' * Has two **subexpressions**: * ''%%3%%'' * ''%%k%%'' ===== Operator precedence and associativity ===== * **operator precedence** determines which operations happen first. * **operator associativity** determines the order when two operands have the same precedence. ===== Python’s rules ===== * Similar to math. * So far we have: ^operator ^associativity ^ |%%**%% |right to left | |- (negation) |left to right | |*, /, %%//%%, %|left to right | |+, - |left to right | ===== Examples ===== >>> 6 - 3 + 2 5 >>> 2 * 3 / 4 1.5 >>> 2 ** 3 8 >>> 2 ** 3 ** 2 # exponentiation is r-to-l 512 ===== What is a data type? ===== * Python differentiates between types of data. * So far we have seen character strings and numbers. * **data type**: a set of values and a set of operators that may be applied to those values. * ''%%+%%'' on a number is different than on a string. * can’t do ''%%/%%'' on a string. ===== Python’s basic types ===== * Python has many [[https://docs.python.org/3/library/stdtypes.html|built-in types]]. * ''%%string%%'' : character strings * ''%%int%%'' : integer values * ''%%float%%'' : floating point (i.e., real) values * ''%%bool%%'' : ''%%True%%'' or ''%%False%%'' * Use ''%%type()%%'' to get the type of a variable or literal. >>> type(66) >>> type(3.1) >>> type(True) >>> type(3.1) ===== Static versus dynamic typing ===== * Python is a **dynamically typed** language. * The same variable can store different type values at different times. x = 41 + 1 print(x) x = 'I ate a donut.' print(x) x = False print(x) * In **statically typed** languages, once a variable is associated with a type, the type can’t be changed. ===== Mixed-type expressions ===== * Example: ''%%3 + 1.2%%'' ===== Type coercion ===== * **type coercion**: the implicit (and automatic) conversion of one type to another. ''%%3 + 1.2%%'' -> ''%%3.0 + 1.2%%'' -> 4.2 ===== Type conversion ===== * **type conversion**: explicitly converting one data type to another. >>> str(42) # convert into to string '42' >>> int('42') # convert string to int 42 >>> int(3.9) # convert float to int 3 >>> float('99') # convert int to float 99.0 >>> int('99.9') # nope Traceback (most recent call last): File "", line 1, in ValueError: invalid literal for int() with base 10: '99.9' ===== Example: Temperature Conversion Program ===== TempConversion.py # Temperature Conversion Program (Fahrenheit to Celsius) # This program will convert a temperature entered in Fahrenheit # to the equivalent degrees in Celsius # program greeting print('This program will convert degrees Fahrenheit to degrees Celsius') # get temperature in Fahrenheit fahrenheit = float(input('Enter degrees Fahrenheit: ')) # calc degrees Celsius celsius = (fahrenheit - 32) * 5 / 9 # output degrees Celsius print(fahrenheit, 'degrees Fahrenheit equals', format(celsius, '.1f'), 'degrees Celsius')