From d61edac4bd397b0bc58eb454b3b4c9edaf183eee Mon Sep 17 00:00:00 2001 From: Stephen Plainte Date: Wed, 2 Sep 2020 23:49:23 -0400 Subject: [PATCH 1/2] completed 13 of 15 tasks --- src/00_hello.py | 4 +++- src/01_bignum.py | 2 +- src/02_datatypes.py | 4 ++-- src/03_modules.py | 17 ++++++----------- src/04_printing.py | 8 +++++++- src/05_lists.py | 13 +++++++------ src/06_tuples.py | 6 ++++-- src/07_slices.py | 14 +++++++------- src/08_comprehensions.py | 8 ++++---- src/09_dictionaries.py | 10 +++++++--- src/10_functions.py | 11 ++++++++--- src/11_args.py | 20 ++++++++++++++------ src/12_scopes.py | 2 ++ src/13_file_io.py | 15 +++++++++++++-- src/bar.txt | 3 +++ 15 files changed, 88 insertions(+), 49 deletions(-) create mode 100644 src/bar.txt diff --git a/src/00_hello.py b/src/00_hello.py index 268998dfc7..85a0e88a62 100644 --- a/src/00_hello.py +++ b/src/00_hello.py @@ -1 +1,3 @@ -# Print "Hello, world!" to your terminal \ No newline at end of file +# Print "Hello, world!" to your terminal + +print("Hello, world!") \ No newline at end of file diff --git a/src/01_bignum.py b/src/01_bignum.py index c020928d63..a870cedd67 100644 --- a/src/01_bignum.py +++ b/src/01_bignum.py @@ -1,4 +1,4 @@ # Print out 2 to the 65536 power # (try doing the same thing in the JS console and see what it outputs) -# YOUR CODE HERE \ No newline at end of file +print(2**65536) \ No newline at end of file diff --git a/src/02_datatypes.py b/src/02_datatypes.py index 245193da34..7de5009a51 100644 --- a/src/02_datatypes.py +++ b/src/02_datatypes.py @@ -13,9 +13,9 @@ # Write a print statement that combines x + y into the integer value 12 -# YOUR CODE HERE +print(x + int(y)) # Write a print statement that combines x + y into the string value 57 -# YOUR CODE HERE \ No newline at end of file +print(str(x) + y) \ No newline at end of file diff --git a/src/03_modules.py b/src/03_modules.py index 97eba053c7..aae1efdbc2 100644 --- a/src/03_modules.py +++ b/src/03_modules.py @@ -9,23 +9,18 @@ # See docs for the sys module: https://docs.python.org/3.7/library/sys.html # Print out the command line arguments in sys.argv, one per line: -# YOUR CODE HERE - +print(sys.argv) # Print out the OS platform you're using: -# YOUR CODE HERE - +print(sys.platform) # Print out the version of Python you're using: -# YOUR CODE HERE - +print(sys.version) import os # See the docs for the OS module: https://docs.python.org/3.7/library/os.html # Print the current process ID -# YOUR CODE HERE - +print(os.getpid()) # Print the current working directory (cwd): -# YOUR CODE HERE - +print(os.getcwd()) # Print out your machine's login name -# YOUR CODE HERE +print(os.getlogin()) \ No newline at end of file diff --git a/src/04_printing.py b/src/04_printing.py index 06aaa7ff16..1c23244dbb 100644 --- a/src/04_printing.py +++ b/src/04_printing.py @@ -12,6 +12,12 @@ # y, and z: # x is 10, y is 2.25, z is "I like turtles!" +print("%(x)s is 10, %(y)s is 2.25, '%(z)s' is 'I like turtles!'" \ + %{'x': x, 'y': y, 'z': z}) + # Use the 'format' string method to print the same thing +print("{} is 10, {} is 2.25, '{}' is 'I like turtles!'".format(x, y, z)) + +# Finally, print the same thing using an f-string -# Finally, print the same thing using an f-string \ No newline at end of file +print(f"{x} is 10, {y} is 2.25, '{z}' is 'I like turtles!'") \ No newline at end of file diff --git a/src/05_lists.py b/src/05_lists.py index cfccc4e945..6082bd0aff 100644 --- a/src/05_lists.py +++ b/src/05_lists.py @@ -7,23 +7,24 @@ # For the following, DO NOT USE AN ASSIGNMENT (=). # Change x so that it is [1, 2, 3, 4] -# YOUR CODE HERE +x.append(4) print(x) # Using y, change x so that it is [1, 2, 3, 4, 8, 9, 10] -# YOUR CODE HERE +x.extend(y) print(x) # Change x so that it is [1, 2, 3, 4, 9, 10] -# YOUR CODE HERE +x.remove(8) print(x) # Change x so that it is [1, 2, 3, 4, 9, 99, 10] -# YOUR CODE HERE +x.insert(-1, 99) print(x) # Print the length of list x -# YOUR CODE HERE +print(len(x)) # Print all the values in x multiplied by 1000 -# YOUR CODE HERE \ No newline at end of file +for i in x: + print(i*1000) \ No newline at end of file diff --git a/src/06_tuples.py b/src/06_tuples.py index 36754da73b..c5d5a75661 100644 --- a/src/06_tuples.py +++ b/src/06_tuples.py @@ -34,11 +34,13 @@ def dist(a, b): # Write a function `print_tuple` that prints all the values in a tuple -# YOUR CODE HERE +def print_tuple(tup): + for tu in tup: + print(tu) t = (1, 2, 5, 7, 99) print_tuple(t) # Prints 1 2 5 7 99, one per line # Declare a tuple of 1 element then print it -u = (1) # What needs to be added to make this work? +u = (1,) # What needs to be added to make this work? print_tuple(u) diff --git a/src/07_slices.py b/src/07_slices.py index 5e0b3bd8ee..6eafcb8687 100644 --- a/src/07_slices.py +++ b/src/07_slices.py @@ -12,26 +12,26 @@ a = [2, 4, 1, 7, 9, 6] # Output the second element: 4: -print() +print(a[1]) # Output the second-to-last element: 9 -print() +print(a[-2]) # Output the last three elements in the array: [7, 9, 6] -print() +print(a[-3:]) # Output the two middle elements in the array: [1, 7] -print() +print(a[2:4]) # Output every element except the first one: [4, 1, 7, 9, 6] -print() +print(a[1:]) # Output every element except the last one: [2, 4, 1, 7, 9] -print() +print(a[:-1]) # For string s... s = "Hello, world!" # Output just the 8th-12th characters: "world" -print() \ No newline at end of file +print(s[7:12]) \ No newline at end of file diff --git a/src/08_comprehensions.py b/src/08_comprehensions.py index 67eb742e50..3e73f73240 100644 --- a/src/08_comprehensions.py +++ b/src/08_comprehensions.py @@ -10,14 +10,14 @@ # Write a list comprehension to produce the array [1, 2, 3, 4, 5] -y = [] +y = [num for num in range(1, 6)] print (y) # Write a list comprehension to produce the cubes of the numbers 0-9: # [0, 1, 8, 27, 64, 125, 216, 343, 512, 729] -y = [] +y = [num**3 for num in range(10)] print(y) @@ -26,7 +26,7 @@ a = ["foo", "bar", "baz"] -y = [] +y = [word.upper() for word in a] print(y) @@ -36,6 +36,6 @@ x = input("Enter comma-separated numbers: ").split(',') # What do you need between the square brackets to make it work? -y = [] +y = [num for num in x if int(num) % 2 == 0] print(y) \ No newline at end of file diff --git a/src/09_dictionaries.py b/src/09_dictionaries.py index a8b2911f64..5bf1193157 100644 --- a/src/09_dictionaries.py +++ b/src/09_dictionaries.py @@ -34,14 +34,18 @@ ] # Add a new waypoint to the list -# YOUR CODE HERE +waypoints.insert(0, {"lat": 94, "lon": -85, "name": "a galaxy far, far away"}) # Modify the dictionary with name "a place" such that its longitude # value is -130 and change its name to "not a real place" # Note: It's okay to access the dictionary using bracket notation on the # waypoints list. -# YOUR CODE HERE +waypoints[0]["lon"] = -130 +waypoints[0]["name"] = "not a real place" # Write a loop that prints out all the field values for all the waypoints -# YOUR CODE HERE \ No newline at end of file + +for waypoint in waypoints: + for _, value in waypoint.items(): + print(value) \ No newline at end of file diff --git a/src/10_functions.py b/src/10_functions.py index 5830100c2c..92f1d1b76b 100644 --- a/src/10_functions.py +++ b/src/10_functions.py @@ -1,6 +1,9 @@ # Write a function is_even that will return true if the passed-in number is even. -# YOUR CODE HERE +def is_even(n): + if n % 2 == 0: + return True + # Read a number from the keyboard num = input("Enter a number: ") @@ -8,5 +11,7 @@ # Print out "Even!" if the number is even. Otherwise print "Odd" -# YOUR CODE HERE - +if is_even(num) is True: + print("Even!") +else: + print("Odd!") diff --git a/src/11_args.py b/src/11_args.py index 8c467ea47f..850c7d0c0a 100644 --- a/src/11_args.py +++ b/src/11_args.py @@ -4,7 +4,8 @@ # Write a function f1 that takes two integer positional arguments and returns # the sum. This is what you'd consider to be a regular, normal function. -# YOUR CODE HERE +def f1(num1, num2): + return num1 + num2 print(f1(1, 2)) @@ -12,7 +13,11 @@ # sum. # Note: Google for "python arbitrary arguments" and look for "*args" -# YOUR CODE HERE +def f2(*args): + # if len(*args) == 1: + # return (args) + # else: + return sum(args) print(f2(1)) # Should print 1 print(f2(1, 3)) # Should print 4 @@ -22,14 +27,15 @@ a = [7, 6, 5, 4] # How do you have to modify the f2 call below to make this work? -print(f2(a)) # Should print 22 +print(f2(*a)) # Should print 22 # Write a function f3 that accepts either one or two arguments. If one argument, # it returns that value plus 1. If two arguments, it returns the sum of the # arguments. # Note: Google "python default arguments" for a hint. -# YOUR CODE HERE +def f3(num1, num2=1): + return num1 + num2 print(f3(1, 2)) # Should print 3 print(f3(8)) # Should print 9 @@ -43,7 +49,9 @@ # # Note: Google "python keyword arguments". -# YOUR CODE HERE +def f4(**kwargs): + for key, value in kwargs.items(): + print(f"key: {key}, value: {value}") # Should print # key: a, value: 12 @@ -62,4 +70,4 @@ } # How do you have to modify the f4 call below to make this work? -f4(d) +f4(**d) diff --git a/src/12_scopes.py b/src/12_scopes.py index bc467fa423..adc77a4549 100644 --- a/src/12_scopes.py +++ b/src/12_scopes.py @@ -5,6 +5,7 @@ x = 12 def change_x(): + global x x = 99 change_x() @@ -19,6 +20,7 @@ def outer(): y = 120 def inner(): + nonlocal y y = 999 inner() diff --git a/src/13_file_io.py b/src/13_file_io.py index 3c68f8aba2..9680630d0d 100644 --- a/src/13_file_io.py +++ b/src/13_file_io.py @@ -9,11 +9,22 @@ # Print all the contents of the file, then close the file # Note: pay close attention to your current directory when trying to open "foo.txt" -# YOUR CODE HERE +with open('foo.txt') as f: + read_data = f.read() + print(read_data) + +# The with keyword closes the file automatically +# - this returns true if the file is actually closed +f.closed # Open up a file called "bar.txt" (which doesn't exist yet) for # writing. Write three lines of arbitrary content to that file, # then close the file. Open up "bar.txt" and inspect it to make # sure that it contains what you expect it to contain -# YOUR CODE HERE \ No newline at end of file +with open('bar.txt', 'w') as o: + o.write("This is line 1 of arbitrary text. \nIt can be difficult to write arbitrary text because of its arbitrary nature. \nIt's important not to be too cavalier with arbitrary text as to not accidentally inflate its importance.") + +with open('bar.txt') as p: + p_data = p.read() + print(p_data) diff --git a/src/bar.txt b/src/bar.txt new file mode 100644 index 0000000000..1c998c8f63 --- /dev/null +++ b/src/bar.txt @@ -0,0 +1,3 @@ +This is line 1 of arbitrary text. +It can be difficult to write arbitrary text because of its arbitrary nature. +It's important not to be too cavalier with arbitrary text as to not accidentally inflate its importance. \ No newline at end of file From 8963297db0e6c3aa6c8ec79104d130e9c2ecf084 Mon Sep 17 00:00:00 2001 From: Stephen Plainte Date: Fri, 4 Sep 2020 23:00:09 -0400 Subject: [PATCH 2/2] finished assignment --- src/14_cal.py | 26 +++++++++++++++++++++++++- src/15_classes.py | 33 ++++++++++++++++++++++++++++----- 2 files changed, 53 insertions(+), 6 deletions(-) diff --git a/src/14_cal.py b/src/14_cal.py index 30bb10d113..9877d0d0c4 100644 --- a/src/14_cal.py +++ b/src/14_cal.py @@ -29,4 +29,28 @@ import sys import calendar -from datetime import datetime \ No newline at end of file +from datetime import datetime + +month = datetime.today().month +year = datetime.today().year + +print(sys.argv) + +if len(sys.argv) == 3: + month = int(sys.argv[1]) + year = int(sys.argv[2]) +elif len(sys.argv) == 2: + month = int(sys.argv[1]) +elif len(sys.argv) > 3: + print("Too many arguments detected. To use this script you must pass a month and/or a year in integer format: 14_cal.py [4] [2020] \ + \ + Printing the calendar for the current month and year.") +else: + print("No arguments detected. To use this script you must pass a month and/or a year in integer format: 14_cal.py [4] [2020] \ + \ + Printing the calendar for the current month and year.") + +print(f'month: {month} | year: {year}') + +cal = calendar.TextCalendar().formatmonth(year, month) +print(cal) \ No newline at end of file diff --git a/src/15_classes.py b/src/15_classes.py index 2355dd20b7..3dfb1edac5 100644 --- a/src/15_classes.py +++ b/src/15_classes.py @@ -1,21 +1,44 @@ # Make a class LatLon that can be passed parameters `lat` and `lon` to the # constructor -# YOUR CODE HERE +class LatLon(): + def __init__(self, lat, lon): + self.lat = lat + self.lon = lon # Make a class Waypoint that can be passed parameters `name`, `lat`, and `lon` to the # constructor. It should inherit from LatLon. Look up the `super` method. -# YOUR CODE HERE +class Waypoint(LatLon): + def __init__(self, name, lat=0, lon=0): + super().__init__(lat, lon) + self.name = name + self.lat = lat + self.lon = lon + + def __str__(self): + waypoint_string = f"{self.name}\nLat: {self.lat}\nLong: {self.lon}" + return waypoint_string # Make a class Geocache that can be passed parameters `name`, `difficulty`, # `size`, `lat`, and `lon` to the constructor. What should it inherit from? -# YOUR CODE HERE +class Geocache(Waypoint): + def __init__(self, name, difficulty=0, size=0, lat=0, lon=0): + super().__init__(name, lat, lon) + self.name = name + self.lat = lat + self.lon = lon + self.difficulty = difficulty + self.size = size + + def __str__(self): + geo_string = f"{self.name}\nDifficulty: {self.difficulty}\nSize: {self.size}\nLat: {self.lat}\nLong: {self.lon}" + return geo_string # Make a new waypoint and print it out: "Catacombs", 41.70505, -121.51521 -# YOUR CODE HERE +waypoint = Waypoint("Catacombs", 41.70505, -121.51521) # Without changing the following line, how can you make it print into something # more human-readable? Hint: Look up the `object.__str__` method @@ -23,7 +46,7 @@ # Make a new geocache "Newberry Views", diff 1.5, size 2, 44.052137, -121.41556 -# YOUR CODE HERE +geocache = Geocache("Newberry Views", 1.5, 2, 44.052137, -121.41556) # Print it--also make this print more nicely print(geocache)