diff --git a/kjg/python-the-hard-way/baseballgame.py b/kjg/python-the-hard-way/baseballgame.py new file mode 100644 index 0000000..a6f2f0e --- /dev/null +++ b/kjg/python-the-hard-way/baseballgame.py @@ -0,0 +1,48 @@ +import baseballgameclass + + + +# initial fucntion +size = [] +cGameNumber = baseballgameclass.GameNumber() +guess = [] +checknewgame = 0 +inputset = {} +inputset = set() + +# assign class +cInputNumber = baseballgameclass.InputNumber() +cCheckNumber = baseballgameclass.CheckNumber() +cPrintResult = baseballgameclass.PrintResult() + + +while True: + + if checknewgame == 0: # check new game + # get game size and max of number + size = cInputNumber.getGameSize() + inputset = cGameNumber.createNumberSet(size[1], size[0]) + number = cGameNumber.createGameNumber(inputset) + checknewgame = 1 + elif checknewgame != 3: # running game + while True: + guess = cInputNumber.getNumber(size[0]) # get created gaem number + result3 = cCheckNumber.compareNumber(number, guess) # compare input number and game number + cPrintResult.printResult(result3) # print result + # print(number) + if result3[0] == size[0]: + print('You win.') + newgame = input('continue a game (y or n) : ') + if newgame == 'y': + checknewgame = 0 # continue game + break + else: + checknewgame = 3 # stop game + break + elif checknewgame == 3: # exit game + break + + + + + diff --git a/kjg/python-the-hard-way/baseballgameclass.py b/kjg/python-the-hard-way/baseballgameclass.py new file mode 100644 index 0000000..1852d02 --- /dev/null +++ b/kjg/python-the-hard-way/baseballgameclass.py @@ -0,0 +1,115 @@ +import random + + +class GameNumber(): + # create game's numbers + + # create number set for game + def createNumberSet(self, amount, gamesize): + s = {} + s = set() + while len(s) < gamesize: + # add set as gamesize + s.add(random.randint(0, amount-1)) + + print(s) + return s + + # create game number list + def createGameNumber(self, gameSet): + numbers = [] + for k in gameSet: + numbers.append(k) + print(k) + + return numbers + + +class CheckNumber(): + # check number whether it is right + + # compare number between a guess answer and a right answer + def compareNumber(self, gameNumber, guessNumber): + result = [] + strike = 0 + ball = 0 + + for i in range(len(gameNumber)): + print(guessNumber) + if guessNumber[i] == gameNumber[i]: + # check number of strke + strike += 1 + elif guessNumber[i] in gameNumber: + # check number of ball + ball += 1 + + # add results of strike and ball + result.append(strike) + result.append(ball) + + return result + + +class InputNumber(): + # user inputs numbers + + def getGameSize(self): + amountNumber = [] + while True: # check wrong input + temp = input('put a game size : ') + try: + if len(temp) > 1: + raise + + for i in temp: + if i not in '0123456789': + raise + except: + print('it is not number or too big, input again') + else: + amountNumber.append(int(temp)) + break + + while True: # check wrong input + temp = input('put a max of number : ') + try: + if len(temp) > 1: + raise + + for i in temp: + if i not in '0123456789': + raise + except: + print('it is not number or too big, input again') + else: + amountNumber.append(int(temp)) + + return amountNumber + + def getNumber(self, gameSize): + userGuess = [] + for i in range(gameSize): + while True: # check wrong input + print('put ', i+1, ' of numbers : ', end='') + temp2 = input() + try: + if len(temp2) > 1: + raise + + for k in temp2: + if k not in '0123456789': + raise + except: + print('it is not number or too big, input again') + else: + userGuess.append(int(temp2)) + break + + return userGuess + + +class PrintResult(): + # print result + + def printResult(self, result): + print(result[0], ' strike, ', result[1], ' ball') diff --git a/kjg/python-the-hard-way/calc.py b/kjg/python-the-hard-way/calc.py new file mode 100644 index 0000000..765e795 --- /dev/null +++ b/kjg/python-the-hard-way/calc.py @@ -0,0 +1,35 @@ +from sys import argv + +script, file_name = argv + + +def input_and_calculate_one_line(): + txt_result = '' + number = input("> ") + if number == 'q': + txt_result = '' + return txt_result + + sp_number = number.split(' ') + for i in range(len(sp_number) - 1): + txt_result = txt_result + sp_number[i] + ' + ' + + sp_number = list(map(int, sp_number)) + result = sum(sp_number) + txt_result = txt_result + str(sp_number[-1]) + ' = ' + str(result) + '\n' + return txt_result + + +def editor(): + txt = open(file_name, 'w') + while True: + output = input_and_calculate_one_line() + if output == '': + txt.close() + exit(0) + else: + print(output) + txt.write(output) + + +editor() diff --git a/kjg/python-the-hard-way/e37.py b/kjg/python-the-hard-way/e37.py new file mode 100644 index 0000000..185cad8 --- /dev/null +++ b/kjg/python-the-hard-way/e37.py @@ -0,0 +1,26 @@ +while 1: + money = input("insert coin=>") + number = input("select beverage\n") + money = int(money) + temp = money + if number == "1": + #grape 100 + print("you choose grape. change is ",money-100,"coin") + money = temp-100 #callculate change + if money <= 0: #check money + break + elif number == "2": + #orange 200 + print("you choose orange. change is ",money-200,"coin") + money = temp-200 #callculate change + if money <= 0: #check money + break + elif number == "3": + #fanta 300 + print("you choose fanta. change is ",money-300,"coin") + money = temp-300 #callculate change + if money <= 0: #check money + break + else: + #wrong sellection + print("wrong number. please select again") diff --git a/kjg/python-the-hard-way/e38.py b/kjg/python-the-hard-way/e38.py new file mode 100644 index 0000000..f1e1923 --- /dev/null +++ b/kjg/python-the-hard-way/e38.py @@ -0,0 +1,17 @@ +ten_things = "Apples Oranges Crows Telephone Light Sugar" + +print("Wait there are not 10 things in that list. Let's fix that.") + +stuff = ten_things.split(' ') +more_stuff = ["Day", "Night", "Song", "Frisbee","Corn", "Banana", "Girl", "Boy"] +while len(stuff) != 10: + next_one = more_stuff.pop() + print("Adding: ", next_one) + stuff.append(next_one) + print(f"There are {len(stuff)} items now.") + print("There we go: ", stuff) + print("Let's do some things with stuff.") + print(stuff[1]) + print(stuff[-1]) # whoa! fancy print(stuff.pop()) + print(' '.join(stuff)) # what? cool! + print('#'.join(stuff[3:5])) # super stellar! diff --git a/kjg/python-the-hard-way/e39.py b/kjg/python-the-hard-way/e39.py new file mode 100644 index 0000000..087d013 --- /dev/null +++ b/kjg/python-the-hard-way/e39.py @@ -0,0 +1,66 @@ +# create a mapping of state to abbreviation +states = { + 'Kyungsangdo': 'KS', + 'Kangwondo': 'KW', + 'Jeju': 'JE', + 'Junlado': 'JL', + 'Chungchungdo': 'CC' +} + +# create a basic set of states and some cities in them +cities = { + 'KS': 'Busan', + 'JE': 'Jejusi', + 'JL': 'Mokpo' +} + +# add some more cities +cities['KW'] = 'Sokcho' +cities['CC'] = 'Chungju' + +# print out some cities +print('-' * 10) +print("KS State has: ", cities['KS']) +print("KW State has: ", cities['KW']) + +# print some states +print('-' * 10) +print("Kyungsangdo's abbreviation is: ", states['Kyungsangdo']) +print("Kangwondo's abbreviation is: ", states['Kangwondo']) + +# do it by using the state then cities dict +print('-' * 10) +print("Jeju has: ", cities[states['Jeju']]) +print("Junlado has: ", cities[states['Junlado']]) + +# print every state abbreviation +print('-' * 10) +for state, abbrev in list(states.items()): + print(f"{state} is abbreviated {abbrev}") + +# print every city in state +print('-' * 10) +for abbrev, city in list(cities.items()): + print(f"{abbrev} has the city {city}") + + +# now do both at the same time +print('-' * 10) +for state, abbrev in list(states.items()): + print(f"{state} state is abbreviated {abbrev}") + print(f"and has city {cities[abbrev]}") + + +print('-' * 10) +# safely get a abbreviation by state that might not be there +state = states.get('Texas') + +if not state: + print("Sorry, no Texas.") + + +# get a city with a default value +city = cities.get('TX', 'Does Not Exist') +print(f"The city for the state 'TX' is: {city}") + + diff --git a/kjg/python-the-hard-way/e40.py b/kjg/python-the-hard-way/e40.py new file mode 100644 index 0000000..31f5dbe --- /dev/null +++ b/kjg/python-the-hard-way/e40.py @@ -0,0 +1,20 @@ +class Song(object): + def __init__(self, lyrics): + self.lyrics = lyrics + + def sing_me_a_song(self): + for line in self.lyrics: + print(line) + + +ly1 = ["Happy birthday to you", "I don't want to get sued", "So I'll stop right there"] +ly2 = ["They rally around tha family","With pockets full of shells"] + +happy_bday = Song(ly1) + +bulls_on_parade = Song(ly2) + + +happy_bday.sing_me_a_song() + +bulls_on_parade.sing_me_a_song() diff --git a/kjg/python-the-hard-way/e41.py b/kjg/python-the-hard-way/e41.py new file mode 100644 index 0000000..7c6bc61 --- /dev/null +++ b/kjg/python-the-hard-way/e41.py @@ -0,0 +1,87 @@ +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/kjg/python-the-hard-way/e42.py b/kjg/python-the-hard-way/e42.py new file mode 100644 index 0000000..0690618 --- /dev/null +++ b/kjg/python-the-hard-way/e42.py @@ -0,0 +1,83 @@ +## Animal is-a object (yes, sort of confusing) look at the extra credit +class Animal(object): + def something(self): + print("base") + + +## Dog is-a Animal +class Dog(Animal): + def __init__(self, name): + ## Dog has-a name + self.name = name + + +## Cat is-a Animal +class Cat(Animal): + def __init__(self, name): + ## Cat has-a name + self.name = name + + +## Person is-a object +class Person(object): + def __init__(self, name): + ## Person has-a name + self.name = name + ## Person has-a pet of some kind + self.pet = None + + +## Employee is-a person +class Employee(Person): + def __init__(self, name, salary): + ## heritage from parents + super(Employee, self).__init__(name) + ## Employee has-a salary + self.salary = salary + + +## Fish is-a object +class Fish(object): + def __init__(self): + print("Base Fish") + + +## Salmon is-a Fish +class Salmon(Fish): + pass + + +## Halibut is-a Fish +class Halibut(Fish): + pass + + +## rover is-a Dog +rover = Dog("Rover") +rover.something() +## satan is-a Cat +satan = Cat("Satan") + +## mary is-a Person +mary = Person("Mary") + +## mary's pet is satan +mary.pet = satan +print(mary.pet.name) + +## frank is-a Employee +frank = Employee("Frank", 120000) + +## frank's pet is rover +frank.pet = rover +print(frank.name) +print(frank.pet.name) +print(frank.salary) +## flipper is-a Fish +flipper = Fish() + +## crouse is-a Salmon +crouse = Salmon() + +## harry is-a Halibut +harry = Halibut() diff --git a/kjg/python-the-hard-way/e43.py b/kjg/python-the-hard-way/e43.py new file mode 100644 index 0000000..d0f8fa3 --- /dev/null +++ b/kjg/python-the-hard-way/e43.py @@ -0,0 +1,253 @@ +from sys import exit +from random import randint +from textwrap import dedent + + +class Scene(object): + def enter(self): + print("This scene is not yet configured.") + print("Subclass it and implement enter().") + exit(1) + + +class Engine(object): + def __init__(self, scene_map): + self.scene_map = scene_map + + def play(self): + current_scene = self.scene_map.opening_scene() + last_scene = self.scene_map.next_scene('finished') + + while current_scene != last_scene: + next_scene_name = current_scene.enter() + current_scene = self.scene_map.next_scene(next_scene_name) + + # be sure to print out the last scene + current_scene.enter() + + +class Death(Scene): + quips = [ + "You died. You kinda suck at this.", + "Your Mom would be proud...if she were smarter.", + "Such a luser.", + "I have a small puppy that's better at this.", + "You're worse than your Dad's jokes." + ] + + def enter(self): + print(Death.quips[randint(0, len(self.quips)-1)]) + exit(1) + + +class CentralCorridor(Scene): + def enter(self): + print(dedent(""" + The Gothons of Planet Percal #25 have invaded your ship and + destroyed your entire crew. You are the last surviving + member and your last mission is to get the neutron destruct + bomb from the Weapons Armory, put it in the bridge, and + blow the ship up after getting into an escape pod. + + You're running down the central corridor to the Weapons + Armory when a Gothon jumps out, red scaly skin, dark grimy + teeth, and evil clown costume flowing around his hate + filled body. He's blocking the door to the Armory and + about to pull a weapon to blast you. + """)) + + action = input("> ") + + if action == "handshake!": + print(dedent(""" + Quick on the draw you yank out your blaster and fire + it at the Gothon. His clown costume is flowing and + moving around his body, which throws off your aim. + Your laser hits his costume but misses him entirely. + This completely ruins his brand new costume his mother + bought him, which makes him fly into an insane rage + and blast you repeatedly in the face until you are + dead. Then he eats you. + """)) + return 'death' + elif action == "dodge!": + print(dedent(""" + Like a world class boxer you dodge, weave, slip and + slide right as the Gothon's blaster cranks a laser + past your head. In the middle of your artful dodge + your foot slips and you bang your head on the metal + wall and pass out. You wake up shortly after only to + die as the Gothon stomps on your head and eats you. + """)) + return 'death' + + elif action == "tell a joke": + print(dedent(""" + Lucky for you they made you learn Gothon insults in + the academy. You tell the one Gothon joke you know: + Lbhe zbgure vf fb sng, jura fur fvgf nebhaq gur ubhfr, + fur fvgf nebhaq gur ubhfr. The Gothon stops, tries + not to laugh, then busts out laughing and can't move. + While he's laughing you run up and shoot him square in + the head putting him down, then jump through the + Weapon Armory door. + """)) + return 'laser_weapon_armory' + + elif action == "cheat game": + print(dedent(""" + you pass the gaem + You win the gaem + """)) + return 'finished' + else: + print("DOES NOT COMPUTE!") + return 'central_corridor' + + +class LaserWeaponArmory(Scene): + def enter(self): + print(dedent(""" + You do a dive roll into the Weapon Armory, crouch and scan + the room for more Gothons that might be hiding. It's dead + quiet, too quiet. You stand up and run to the far side of + the room and find the neutron bomb in its container. + There's a keypad lock on the box and you need the code to + get the bomb out. If you get the code wrong 10 times then + the lock closes forever and you can't get the bomb. The + code is 3 digits. + """)) + + code = f"{randint(1,9)}{randint(1,9)}{randint(1,9)}" + guess = input("[keypad]> ") + guesses = 0 + + while guess != code and guesses < 10: + print("BZZZZEDDD!") + guesses += 1 + guess = input("[keypad]> ") + + if guess == code: + print(dedent(""" + The container clicks open and the seal breaks, letting + gas out. You grab the neutron bomb and run as fast as + you can to the bridge where you must place it in the + right spot. + """)) + return 'the_bridge' + else: + print(dedent(""" + The lock buzzes one last time and then you hear a + sickening melting sound as the mechanism is fused + together. You decide to sit there, and finally the + Gothons blow up the ship from their ship and you die. + """)) + return 'death' + + +class TheBridge(Scene): + def enter(self): + print(dedent(""" + You burst onto the Bridge with the netron destruct bomb + under your arm and surprise 5 Gothons who are trying to + take control of the ship. Each of them has an even uglier + clown costume than the last. They haven't pulled their + weapons out yet, as they see the active bomb under your + arm and don't want to set it off. + """)) + + action = input("> ") + + if action == "throw the bomb": + print(dedent(""" + In a panic you throw the bomb at the group of Gothons + and make a leap for the door. Right as you drop it a + Gothon shoots you right in the back killing you. As + you die you see another Gothon frantically try to + disarm the bomb. You die knowing they will probably + blow up when it goes off. + """)) + return 'death' + elif action == "slowly place the bomb": + print(dedent(""" + You point your blaster at the bomb under your arm and + the Gothons put their hands up and start to sweat. + You inch backward to the door, open it, and then + carefully place the bomb on the floor, pointing your + blaster at it. You then jump back through the door, + punch the close button and blast the lock so the + Gothons can't get out. Now that the bomb is placed + you run to the escape pod to get off this tin can. + """)) + return 'escape_pod' + else: + print("DOES NOT COMPUTE!") + return "the_bridge" + + +class EscapePod(Scene): + def enter(self): + print(dedent(""" + You rush through the ship desperately trying to make it to + the escape pod before the whole ship explodes. It seems + like hardly any Gothons are on the ship, so your run is + clear of interference. You get to the chamber with the + escape pods, and now need to pick one to take. Some of + them could be damaged but you don't have time to look. + There's 5 pods, which one do you take? + """)) + + good_pod = randint(1,5) + guess = input("[pod #]> ") + + if int(guess) != good_pod: + print(dedent(f""" + You jump into pod {guess} and hit the eject button. + The pod escapes out into the void of space, then + implodes as the hull ruptures, crushing your body into + jam jelly. + """)) + return 'death' + else: + print(dedent(f""" + You jump into pod {guess} and hit the eject button. + The pod easily slides out into space heading to the + planet below. As it flies to the planet, you look + back and see your ship implode then explode like a + bright star, taking out the Gothon ship at the same + time. You won! + """)) + + return 'finished' + + +class Finished(Scene): + def enter(self): + print("You won! Good job.") + return 'finished' + + +class Map(object): + scenes = { + 'central_corridor': CentralCorridor(), + 'laser_weapon_armory': LaserWeaponArmory(), + 'the_bridge': TheBridge(), + 'escape_pod': EscapePod(), + 'death': Death(), + 'finished': Finished(), + } + + def __init__(self, start_scene): + self.start_scene = start_scene + + def next_scene(self, scene_name): + val = Map.scenes.get(scene_name) + return val + + def opening_scene(self): + return self.next_scene(self.start_scene) + + +a_map = Map('central_corridor') +a_game = Engine(a_map) +a_game.play() diff --git a/kjg/python-the-hard-way/e43_classes.py b/kjg/python-the-hard-way/e43_classes.py new file mode 100644 index 0000000..c3fc85c --- /dev/null +++ b/kjg/python-the-hard-way/e43_classes.py @@ -0,0 +1,52 @@ +class Scene(object): + def enter(self): + pass + + +class Engine(object): + def __init__(self, scene_map): + pass + + def play(self): + pass + + +class Death(Scene): + def enter(self): + pass + + +class CentralCorridor(Scene): + def enter(self): + pass + + +class LaserWeaponArmory(Scene): + def enter(self): + pass + + +class TheBridge(Scene): + def enter(self): + pass + + +class EscapePod(Scene): + def enter(self): + pass + + +class Map(object): + def __init__(self, start_scene): + pass + + def next_scene(self, scene_name): + pass + + def opening_scene(self): + pass + + +a_map = Map('central_corridor') +a_game = Engine(a_map) +a_game.play() diff --git a/kjg/python-the-hard-way/e44a.py b/kjg/python-the-hard-way/e44a.py new file mode 100644 index 0000000..211745e --- /dev/null +++ b/kjg/python-the-hard-way/e44a.py @@ -0,0 +1,13 @@ +class Parent(object): + def implicit(self): + print("PARENT implicit()") + + +class Child(Parent): + pass + + +dad = Parent() +son = Child() +dad.implicit() +son.implicit() diff --git a/kjg/python-the-hard-way/e44b.py b/kjg/python-the-hard-way/e44b.py new file mode 100644 index 0000000..0c94ffc --- /dev/null +++ b/kjg/python-the-hard-way/e44b.py @@ -0,0 +1,14 @@ +class Parent(object): + def override(self): + print("PARENT override()") + + +class Child(Parent): + def override(self): + print("CHILD override()") + + +dad = Parent() +son = Child() +dad.override() +son.override() diff --git a/kjg/python-the-hard-way/e44c.py b/kjg/python-the-hard-way/e44c.py new file mode 100644 index 0000000..9d1dbe0 --- /dev/null +++ b/kjg/python-the-hard-way/e44c.py @@ -0,0 +1,16 @@ +class Parent(object): + def altered(self): + print("PARENT altered()") + + +class Child(Parent): + def altered(self): + print("CHILD, BEFORE PARENT altered()") + super(Child, self).altered() + print("CHILD, AFTER PARENT altered()") + + +dad = Parent() +son = Child() +dad.altered() +son.altered() diff --git a/kjg/python-the-hard-way/e44d.py b/kjg/python-the-hard-way/e44d.py new file mode 100644 index 0000000..9c93926 --- /dev/null +++ b/kjg/python-the-hard-way/e44d.py @@ -0,0 +1,34 @@ +class Parent(object): + + def override(self): + print("PARENT override()") + + def implicit(self): + print("PARENT implicit()") + + def altered(self): + print("PARENT altered()") + + +class Child(Parent): + + def override(self): + print("CHILD, override()") + + def altered(self): + print("CHILD, BERFORE altered()") + super(Child, self).altered() + print("CHILD, AFTER PARENT altered()") + + +dad = Parent() +son = Child() + +dad.implicit() +son.implicit() + +dad.override() +son.override() + +dad.altered() +son.altered() diff --git a/kjg/python-the-hard-way/e44e.py b/kjg/python-the-hard-way/e44e.py new file mode 100644 index 0000000..b5840cf --- /dev/null +++ b/kjg/python-the-hard-way/e44e.py @@ -0,0 +1,32 @@ +class Other(object): + def override(self): + print("OTHER override()") + + def implicit(self): + print("OTHER implicit()") + + def altered(self): + print("OTHER altered()") + + +class Child(object): + def __init__(self): + self.other = Other() + + def implicit(self): + self.other.implicit() + + def override(self): + print("CHILD override()") + + def altered(self): + print("CHILD, BEFORE OTHER altered()") + self.other.altered() + print("CHILD, AFTER OTHER altered()") + + +son = Child() + +son.implicit() +son.override() +son.altered() diff --git a/kjg/python-the-hard-way/sum.txt b/kjg/python-the-hard-way/sum.txt new file mode 100644 index 0000000..e69de29 diff --git a/kjg/python.org b/kjg/python.org index 19204ce..8cd37fc 100644 --- a/kjg/python.org +++ b/kjg/python.org @@ -133,3 +133,28 @@ How to use Accessing Elements of Lists practice function, while, if **** ex36 some rules of if, loop and tips for debugging +*** Python applying learnings from 1..6 +create calc.py +*** Python #7 +**** ex37 +analysis sample codes +**** ex38 +append list +**** ex39 +How to use dictionary +*** Python #8 +**** ex40 +How to use class +**** ex41 +practice class +*** Python #9 +**** ex42 +review class and object +*** Python #10 +**** ex43 +Analysis and Design object +*** Python #11 +**** ex44 +difference with inheritance and compositon +*** Python #12 +create game