Give an example of a tuple:
myTuple = (1,2,3,'a','b',[4,5,6])
myTuple
(1, 2, 3, 'a', 'b', [4, 5, 6])
What is the difference between a tuple and a list?
A tuple is immutable while a list is mutable
Always start with writing pseudocode!
What is the different syntax between a function and a method?
functionName()
<object>.methodName()
Calculate the average of the list [1,2,3.5,5,6.2] to one decimal
myList = [1,2,3,5,6]
round(sum(myList)/len(myList),1)
3.4
Take the list ['i','know','python'] as input and output the string 'I KNOW PYTHON'
' '.join(['i','know','python']).upper()
'I KNOW PYTHON'
fh = open('../downloads/250.imdb', 'r', encoding = 'utf-8')
genres = []
for line in fh:
if not line.startswith('#'):
cols = line.strip().split('|')
genre = cols[5].strip()
glist = genre.split(',')
for entry in glist:
if entry.lower() not in genres: # only add genre if not already in list
genres.append(entry.lower())
fh.close()
print(genres)
print(len(genres))
['drama', 'war', 'adventure', 'comedy', 'family', 'animation', 'biography', 'history', 'action', 'crime', 'mystery', 'thriller', 'fantasy', 'romance', 'sci-fi', 'western', 'musical', 'music', 'historical', 'sport', 'film-noir', 'horror'] 22
set
¶Syntax:
For empty set:
setName = set()
For populated sets:
setName = {1,2,3,4,5}
sets
¶set.add(a)
len(set)
a in set
x = set()
x.add(100)
x.add(25)
x.add(3)
x.add('3.0')
#for i in x:
# print(type(i))
type(x)
##mySet = {2,5,1,3}
#mySet.add(5)
#mySet.add(4)
#print(mySet)
set
Modify your code to use sets
fh = open('../downloads/250.imdb', 'r', encoding = 'utf-8')
genres = set()
for line in fh:
if not line.startswith('#'):
cols = line.strip().split('|')
genre = cols[5].strip()
glist = genre.split(',')
for entry in glist:
genres.add(entry.lower()) # set only adds entry if not already in
fh.close()
print(len(genres))
sorted(list(genres))
22
['action', 'adventure', 'animation', 'biography', 'comedy', 'crime', 'drama', 'family', 'fantasy', 'film-noir', 'historical', 'history', 'horror', 'music', 'musical', 'mystery', 'romance', 'sci-fi', 'sport', 'thriller', 'war', 'western']
... Hm, starting to be difficult now...
dictionary
¶Syntax:
a = {}
(create empty dictionary)
d = {'key1':1, 'key2':2, 'key3':3}
myDict = {'drama': 4,
'thriller': 2,
'romance': 5}
myDict
{'drama': 4, 'romance': 5, 'thriller': 2}
myDict = {'drama': 4,
'thriller': 2,
'romance': 5}
len(myDict)
myDict['drama']
myDict['horror'] = 2
#myDict
#del myDict['horror']
#myDict
'drama' in myDict
myDict.keys()
myDict.items()
myDict.values()
dict_values([4, 2, 5, 2])
myDict = {'drama': 182,
'war': 30,
'adventure': 55,
'comedy': 46,
'family': 24,
'animation': 17,
'biography': 25}
Hint! If the genre is not already in the dictionary, you have to add it first
fh = open('../downloads/250.imdb', 'r', encoding = 'utf-8')
genreDict = {} # create empty dictionary
for line in fh:
if not line.startswith('#'):
cols = line.strip().split('|')
genre = cols[5].strip()
glist = genre.split(',')
for entry in glist:
if not entry.lower() in genreDict: # check if genre is not in dictionary, add 1
genreDict[entry.lower()] = 1
else:
genreDict[entry.lower()] += 1 # if genre is in dictionary, increase count with 1
fh.close()
print(genreDict)
Tip!
Here you have to loop twice
fh = open('../downloads/250.imdb', 'r', encoding = 'utf-8')
genreDict = {}
for line in fh:
if not line.startswith('#'):
cols = line.strip().split('|')
genre = cols[5].strip()
glist = genre.split(',')
runtime = cols[3] # length of movie in seconds
for entry in glist:
if not entry.lower() in genreDict:
genreDict[entry.lower()] = [int(runtime)] # add a list with the runtime
else:
genreDict[entry.lower()].append(int(runtime)) # append runtime to existing list
fh.close()
for genre in genreDict: # loop over the genres in the dictionaries
average = sum(genreDict[genre])/len(genreDict[genre]) # calculate average length per genre
hours = int(average/3600) # format seconds to hours
minutes = (average - (3600*hours))/60 # format seconds to minutes
print('The average length for movies in genre '+genre\
+' is '+str(hours)+'h'+str(round(minutes))+'min')
A lot of ugly formatting for calculating hours and minutes from seconds...
def FormatSec(genre): # input a list of seconds
average = sum(genreDict[genre])/len(genreDict[genre])
hours = int(average/3600)
minutes = (average - (3600*hours))/60
return str(hours)+'h'+str(round(minutes))+'min'
fh = open('../downloads/250.imdb', 'r', encoding = 'utf-8')
genreDict = {}
for line in fh:
if not line.startswith('#'):
cols = line.strip().split('|')
genre = cols[5].strip()
glist = genre.split(',')
runtime = cols[3] # length of movie in seconds
for entry in glist:
if not entry.lower() in genreDict:
genreDict[entry.lower()] = [int(runtime)] # add a list with the runtime
else:
genreDict[entry.lower()].append(int(runtime)) # append runtime to existing list
fh.close()
for genre in genreDict:
print('The average length for movies in genre '+genre\
+' is '+FormatSec(genre))
The average length for movies in genre drama is 2h14min The average length for movies in genre war is 2h30min The average length for movies in genre adventure is 2h13min The average length for movies in genre comedy is 1h53min The average length for movies in genre family is 1h44min The average length for movies in genre animation is 1h40min The average length for movies in genre biography is 2h30min The average length for movies in genre history is 2h47min The average length for movies in genre action is 2h18min The average length for movies in genre crime is 2h11min The average length for movies in genre mystery is 2h3min The average length for movies in genre thriller is 2h11min The average length for movies in genre fantasy is 2h2min The average length for movies in genre romance is 2h2min The average length for movies in genre sci-fi is 2h6min The average length for movies in genre western is 2h11min The average length for movies in genre musical is 1h57min The average length for movies in genre music is 2h24min The average length for movies in genre historical is 2h38min The average length for movies in genre sport is 2h17min The average length for movies in genre film-noir is 1h43min The average length for movies in genre horror is 1h59min
def addFive(number):
final = number + 5
return final
addFive(4)
9
from datetime import datetime
def whatTimeIsIt():
time = 'The time is: ' + str(datetime.now().time())
return time
whatTimeIsIt()
'The time is: 19:16:35.696575'
def addFive(number):
final = number + 5
return final
addFive(4)
#final
final = addFive(4)
final
9
def someFunction():
# s = 'a string'
print(s)
s = 'another string'
someFunction()
print(s)
another string another string
Example:
formatSec()
in the fileimport
the functionfrom myFunctions import formatSec
seconds = 32154
formatSec(seconds)
'8h56min'
from myFunctions import formatSec, toSec
seconds = 21154
print(formatSec(seconds))
days = 0
hours = 21
minutes = 56
seconds = 45
print(toSec(days, hours, minutes, seconds))
5h53min 79005s
→ Notebook Day_3_Exercise_1 (~30 minutes)
sys.argv
¶The `sys.argv` function
Python script called print_argv.py
:
Running the script with command line arguments as input:
Instead of:
do:
Run with:
Re-structure and write the output to a new file as below
Note:
sys.argv
for input/outputRun with: