Разбор скрипта, написанного на языке python.Скачать данный скрипт можно здесь. Скрипт не требует указания дополнительных параметров для запуска и далее действует в соответствии с командами пользователя. 11|class Princess: # it's Disney Princesses 12| name="Name" 13| dresscolor="color" 14| coordinate=0 15| prince="Prince" 16| 17| def __init__(self, n, d, c, p): 18| self.name=n 19| self.dresscolor=d 20| self.coordinate=c 21| self.prince=pИнициализирующая функция позволит нам легко задавать объекты созданного класса. Теперь нам не придется специально присваивать значение каждого атрибута для каждого объекта, а можно будет просто перечислить все атрибуты при задании объекта. Давайте создадим наших принцесс: 47|#There are Disney Princesses: 48|ariel=Princess("Ariel", "blue", 0, "Eric") 49|belle=Princess("Belle", "gold", 1, "Adam") 50|cinderella=Princess("Cinderella", "lightblue", 2, "Philip") 51|jasmin=Princess("Jasmin", "lightblue", 3, "Aladdin") 52|rapunzel=Princess("Rapunzel", "purple", 4, "Flynn") 53|snow_white=Princess("Snow White", "yellow", 5, "Ferdinand") 54|tiana=Princess("Tiana", "green", 6, "Navin")Внимательный читатель заметит, что мы создали не все 10 принцесс, а только 7. Но это небольшая проблема, потому что всегда можно точно так же добавить остальных трех. Теперь у нас есть отличный класс, в котором уже есть довольно много объектов. Но не хватает методов. Ведь должно же быть что-то, что принцессы будут делать. Ну, во-первых, принцессы могут перемещаться. Не все же им сидеть в башне, дрожа от страха перед злым драконом. А если принцессы могут путешествовать по своему миру, то они могут и встречаться. Итак, зададим метод перемещения: 39| def travel(self, username): 40| """This function change coordinate and dress color of princess. 41| It gets username to communicate with him.""" 42| c=input("Chere %s, I can't choose where to go today. Could you tell any number, please, to help me make a choise? " %username) 43| print ("Merci beaucoup! You're so cute!") 44| self.coordinate=c%7 45| self.dresscolor=raw_input("Oh, no... I don't know, which dress should I wear. Could you tell me a color? ")Как мы видим, принцессе тяжело самой выбрать, куда пойти и какой наряд надеть. Я думаю, будет хорошо, если пользователь поможет в этом нашим принцессам. Обратите внимание, как мы присваиваем координату принцессе. Мы берем остаток от деления на 7 того числа, которое ввел пользователь. Это сделано для того, чтобы принцессы встречались как можно чаще. У нас есть 7 принцесс, а теперь мы сделали так, что разных координат тоже может быть только 7. Теперь наши принцессы будут встречаться в 6 случаях из 7. Теперь зададим метод встречи двух принцесс: 23| def meeting(self, princess): 24| """This function models reaction of princess when she meets other princess. 25| It gets meeting princess and checks dresses of both princesses and works it two different ways when dresses are similar, or they are different""" 26| if self.dresscolor==princess.dresscolor: #Dresses are similar. It's very bad for princesses. 27| print ("Wow, it's %s! How nice..... Ooooooooooooooops! I have the same dress with %s!!!!!!!!" %(princess.name, princess.name)) 28| print ("%s: -Oh my God! What a shame!" %princess.name[0]) 29| self.coordinate=random.randint(0,6) #Princesses run away 30| princess.coordinate=random.randint(0,6) 31| self.dresscolor=raw_input("I have to change my dress! Please, please, please, tell me a color! ") 32| search_neighbor(self) 33| else: #Dresses are different, so princesses can talk to each other. 34| print ("Do you see..? It's %s here. Wait a minute, please, I want to talk to her." %princess.name) 35| print ("%s: -Bonjour, %s! How are you? Do you like my %s dress?" %(self.name[0], princess.name, self.dresscolor)) 36| print ("%s: -Bonjour, ma chere! You look wonderful! You know, I'm so happy today, I've met my prince %s!" %(princess.name[0], princess.prince)) 37| print ("%s: -Oh, I'm so glad for you! But I need to go now. See you at the ball!" %self.name[0])Что происходит, когда встречаются две принцессы? Конечно же, наши принцессы - крайне милые существа, поэтому они радостно делятся простыми девичьими радостями, делают друг другу комплементы и прощаются до следующей встречи на балу. Но что, если у принцесс одинаковые платья? Всем принцессам известно, что ничего хуже, чем увидеть свое платье на другой принцессе, быть не может. Поэтому если встречаются две принцессы в одинаковых платьях, то они тут же разбегаются в разные стороны, куда глаза глядят. Для того, чтобы принцессы разбежались, присваиваем им произвольную координату. Для этого в самом начале необходимо подключить модуль random: 09|import randomПосле того, как принцессы разбежались, им необходимо переодеться, чтобы больше такой неприятности с ними не происходило. И тут принцесса опять просит помощи у пользователя. Теперь принцесса снова готова встречаться с другими принцессами. Сейчас в нашем методе есть еще не поясненная команда search_neighbor(self). Эта функция не является методом класса, а является вспомогательной функцией в программе. Она-то и определяет, встретилась ли наша принцесса с какой-нибудь другой. Для того, чтобы задать эту функцию, нам необходимо создать словарь с координатами принцесс. Такой словарь позволит в дальнейшем находить принцессу по координате: 57|coorlist={ariel.coordinate:ariel, belle.coordinate:belle, cinderella.coordinate:cinderella, jasmin.coordinate:jasmin, rapunzel.coordinate:rapunzel, snow_white.coordinate:snow_white, tiana.coordinate:tiana}Теперь зададим функцию поиска втретившихся принцесс: 68|def search_neighbor(princess): 69| """This function define, if our princess has the similar coordinate with other princess. 70| If princesses have the same coordinate, they meet each other. If princess doesn't meet somebody, she asks to change coordinate.""" 71| if coorlist[princess.coordinate]==princess: 72| princess.coordinate=input("There are nobody here. I feel so sad and lonely... Give me, please, another number: ") 73| search_neighbor(princess) 74| else: 75| princess.meeting(coorlist[princess.coordinate]) 76| return princessКак мы видим, функция крайне проста. Она проверяет, есть ли у какой-то еще принцессы та же координата, что и у нашей. Если нет - то принцесса просит поменять ей координату. Если есть - две принцессы встречаются, а как - мы уже знаем. Теперь уже появилось ощущение, что мы почти написали программу. У нас есть класс принцесс, которые могут перемещаться, переодеваться и встречать друг друга. Осталось придумать, как именно все это будет происходить. Проще всего сделать так: пользователь будет выбирать одну принцессу, которой он сможет играть, и все остальные принцессы будут взаимодействовать с выбранной. Собственно, теперь мы напишем саму программу, которая будет вызывать уже готовые функции: 78|print ("Welcome to the world of Disney Princesses! We are Ariel, Belle, Cinderella, Jasmin, Rapunzel, Tiana and Snow White. And we're very glad to see you!") 79|username=raw_input ("Please, enter your name: ") 80|name_princess=raw_input ("%s, you can choose any of us. But only ONE of us, so think twice and type the name. If you're scared and can't make a choice just type \"exit\" " %username) 81|if name_princess=="exit": 82| print ("Oh, that's so sad... But don't worry, you can try again later if you want. Bye-bye!") 83| exit() 84|else: 85| princess=check(name_princess)Теперь нам необходимо проверить, какую принцессу выбрал пользователь. Для этого нам понадобится словарь с именами принцесс и еще одна вспомогательная функция: 56|namelist={"Ariel":ariel,"Belle":belle,"Cinderella":cinderella,"Jasmin":jasmin,"Rapunzel":rapunzel,"Snow White":snow_white,"Tiana":tiana} 59|def check(princess): 60| """This function define choosen princess.""" 61| if princess not in namelist: 62| princess=raw_input ("There are no %s, try again, please: " %princess) #Wrong name of princess 63| princess=check(princess) 64| else: 65| princess=namelist[princess] 66| return princessФункция возвращает объект - конкретную принцессу, если пользователь ввел имя существующей принцессы, либо просит ввести имя еще раз. После того как программа определила, какую принцессу выбрал пользователь, она выполняет следующие команды: 86|print ("I'm so happy you chose me! I think, we should take a walk.") 87|princess.travel(username) 88|search_neighbor(princess) 89|print("Thank you, %s! It was a nice promenade. But it's too late, I think we have to leave. See you later." %username)Итак, наша программа готова! Давайте посмотрим, как она работает: В процессе этого, довольно поверхностного, разбора я заметила несколько моментов, которые можно было бы улучшить в этой программе. © Наталья Ланина e-mail: n.lanina@fbb.msu.ru последний раз обновлялось: 30.12.13 |
|