Update page 'Day 2 homework'
@@ -0,0 +1,59 @@
|
|||||||
|
1. Annotate the following python expressions with the specific types of each literal, as well as the overall return value:
|
||||||
|
|
||||||
|
* i = 3
|
||||||
|
* f = 3.0
|
||||||
|
* c = 3+3i
|
||||||
|
* b = b'abcdefg'
|
||||||
|
* s = 'abcdefg'
|
||||||
|
* s = "abcdefg"
|
||||||
|
|
||||||
|
2. For each of the types string, bytestring, integer, floating point, and imaginary literals, construct a 5x5 table showing what happens when the character "0" or number 0 is compared to each other type.
|
||||||
|
3. Now do the same thing for the + and == operators for each pair of types two other 5x5 tables.
|
||||||
|
4. Write a small program that uses the AST module to open the lexer/parser example, and dumps the resulting AST. See if there are any arguments to parse method which make the output easier to read.
|
||||||
|
5. What does this do? `print("\007")` Can you figure out why?
|
||||||
|
6. What does this do? `print("abcdefg\rhijklmnop")` Can you figure out why?
|
||||||
|
7. This is a HTTP server. Run it and connect to http://localhost:8000 . Why doesn't this do the same thing as what you see above?
|
||||||
|
|
||||||
|
```
|
||||||
|
import http.server
|
||||||
|
import socketserver
|
||||||
|
from urllib.parse import urlparse, parse_qs
|
||||||
|
|
||||||
|
class MyRequestHandler(http.server.SimpleHTTPRequestHandler):
|
||||||
|
def do_GET(self):
|
||||||
|
self.send_response(200)
|
||||||
|
self.send_header('Content-type', 'text/plain')
|
||||||
|
self.end_headers()
|
||||||
|
output_string = "abcdefg\rhijklmnop"
|
||||||
|
self.wfile.write(output_string.encode())
|
||||||
|
|
||||||
|
PORT = 8000
|
||||||
|
Handler = MyRequestHandler
|
||||||
|
httpd = socketserver.TCPServer(("", PORT), Handler)
|
||||||
|
print(f"Serving on port {PORT}")
|
||||||
|
|
||||||
|
httpd.serve_forever()
|
||||||
|
```
|
||||||
|
8. Think of a way someone might try to commit a crime or hide an embezzlement scheme using the answers to the above two questions. Hint: applications usually output on web pages, but developers and system administrators usually troubleshoot in the console.
|
||||||
|
9. Think of how you would do input validation to prevent such a crime. Replace the code REPLACE ME here so the tests pass:
|
||||||
|
|
||||||
|
```
|
||||||
|
def validate(str):
|
||||||
|
for char in str:
|
||||||
|
if REPLACE ME:
|
||||||
|
raise ValueError("Crime detected!")
|
||||||
|
|
||||||
|
try:
|
||||||
|
validate("abcdefg")
|
||||||
|
print("✅ test1 pass!")
|
||||||
|
except:
|
||||||
|
print("❌ test1 pass!")
|
||||||
|
|
||||||
|
try:
|
||||||
|
validate("abcdefg\rhijklmnop")
|
||||||
|
print("❌ test2 fail!")
|
||||||
|
except ValueError as err:
|
||||||
|
print("✅ test2 pass!")
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user