From 23308d5335c6904c43e36c84381673c826acf142 Mon Sep 17 00:00:00 2001 From: Youngjin Han Date: Thu, 11 Jun 2020 00:01:41 +0900 Subject: [PATCH] Learning Circle : python #9 - ex40, ex41 --- youngjin.han/learning-node02-2020.org | 8 ++ youngjin.han/python-the-hard-way/ex40a.py | 58 ++++++++++++++ youngjin.han/python-the-hard-way/ex41.py | 84 +++++++++++++++++++++ youngjin.han/python-the-hard-way/mystuff.py | 5 ++ youngjin.han/python.org | 6 ++ 5 files changed, 161 insertions(+) create mode 100644 youngjin.han/python-the-hard-way/ex40a.py create mode 100644 youngjin.han/python-the-hard-way/ex41.py create mode 100644 youngjin.han/python-the-hard-way/mystuff.py diff --git a/youngjin.han/learning-node02-2020.org b/youngjin.han/learning-node02-2020.org index d1fb94f..d2215f4 100644 --- a/youngjin.han/learning-node02-2020.org +++ b/youngjin.han/learning-node02-2020.org @@ -1,3 +1,11 @@ +* 2020-06-10 +*** Python #8: +**** DONE Lecture content + CLOSED: [2020-06-11 목 00:00] + - Same structure as "Python #2" + - Exercises 40-41 +**** Lecture material + - Available on https://cloud.ungleich.ch/s/435FyfrQyEq6oF3 * 2020-06-08 *** Python #7: **** DONE Lecture content diff --git a/youngjin.han/python-the-hard-way/ex40a.py b/youngjin.han/python-the-hard-way/ex40a.py new file mode 100644 index 0000000..73b5ddc --- /dev/null +++ b/youngjin.han/python-the-hard-way/ex40a.py @@ -0,0 +1,58 @@ +#mystuff = {'apple': "I AM APPLES!"} +#print(mystuff['apple']) +# +#import mystuff +#mystuff.apple() +# +#import mystuff +# +#mystuff.apple() +#print(mystuff.tangerine) +# +#mystuff['apple'] # get apple from dict +#mystuff.apple() # get apple from the module +#mystuff.tangerine # same thing, it's just a variable +# +#class MyStuff(object): +# +# def __init__(self): +# self.tangerine = "And now a thousand years between" +# +# def apple(self): +# print("I AM CLASSY APPLES!") +# +#thing = MyStuff() +#thing.apple() +#print(thing.tangerine) +# +## dict style +#mystuff['apples'] +# +## module style +#mystuff.apples() +#print(mystuff.tangerine) +# +## class style +#thing = MyStuff() +#thing.apples() +#print(thing.tangerine) +# +class Song(object): + + def __init__(self, lyrics): + self.lyrics = lyrics + + def sing_me_a_song(self): + for line in self.lyrics: + print(line) + +happy_bday = Song(["Happy birthday to you", + "I don't want to get sued", + "So I'll stop right there"]) + +bulls_on_parade = Song(["They rally around tha family", + "With pockets full of shells"]) + +happy_bday.sing_me_a_song() + +bulls_on_parade.sing_me_a_song() diff --git a/youngjin.han/python-the-hard-way/ex41.py b/youngjin.han/python-the-hard-way/ex41.py new file mode 100644 index 0000000..3a8429c --- /dev/null +++ b/youngjin.han/python-the-hard-way/ex41.py @@ -0,0 +1,84 @@ +import random +from urllib.request import urlopen +import sys + +WORD_URL = "http://learncodethehardway.org/words.txt" +WORDS = [] + +PHRASES = { + "class %%%(%%%):": + "Make a class named %%% that is-a %%%.", + "class %%%(object):\n\tdef __init__(self, ***)" : + "class %%% has-a __init__ that takes self and *** params.", + "class %%%(object):\n\tdef ***(self, @@@)": + "class %%% has-a function *** that takes self and @@@ params.", + "*** = %%%()": + "Set *** to an instance of class %%%.", + "***.***(@@@)": + "From *** get the *** function, call it with params self, @@@.", + "***.*** = '***'": + "From *** get the *** attribute and set it to '***'." +} + +# do they want to drill phrases first +if len(sys.argv) == 2 and sys.argv[1] == "english": + PHRASE_FIRST = True +else: + PHRASE_FIRST = False + +# load up the words from the website +for word in urlopen(WORD_URL).readlines(): + WORDS.append(str(word.strip(), encoding="utf-8")) + + +def convert(snippet, phrase): + class_names = [w.capitalize() for w in + random.sample(WORDS, snippet.count("%%%"))] + other_names = random.sample(WORDS, snippet.count("***")) + results = [] + param_names = [] + + for i in range(0, snippet.count("@@@")): + param_count = random.randint(1,3) + param_names.append(', '.join( + random.sample(WORDS, param_count))) + + for sentence in snippet, phrase: + # this is how you duplicate a list or string + result = sentence[:] + + # fake class names + for word in class_names: + result = result.replace("%%%", word, 1) + + # fake other names + for word in other_names: + result = result.replace("***", word, 1) + + # fake parameter lists + for word in param_names: + result = result.replace("@@@", word, 1) + + results.append(result) + + return results + + +# keep going until they hit CTRL-D +try: + while True: + snippets = list(PHRASES.keys()) + random.shuffle(snippets) + + for snippet in snippets: + phrase = PHRASES[snippet] + question, answer = convert(snippet, phrase) + if PHRASE_FIRST: + question, answer = answer, question + + print(question) + + input("> ") + print(f"ANSWER: {answer}\n\n") +except EOFError: + print("\nBye") diff --git a/youngjin.han/python-the-hard-way/mystuff.py b/youngjin.han/python-the-hard-way/mystuff.py new file mode 100644 index 0000000..ce31c7d --- /dev/null +++ b/youngjin.han/python-the-hard-way/mystuff.py @@ -0,0 +1,5 @@ +def apple(): + print("I AM APPLES!") + +# this is just a variable +tangerine = "Living reflection of a dream" diff --git a/youngjin.han/python.org b/youngjin.han/python.org index af3b236..cdfb9d9 100644 --- a/youngjin.han/python.org +++ b/youngjin.han/python.org @@ -1,3 +1,9 @@ +* 2020-06-10 +** note + - ex40.py + - none + - ex40.py + - none * 2020-06-08 ** note - ex37.py