Книга «Большая книга проектов Python»
Привет, Хаброжители! Вы уже освоили основы синтаксиса Python и готовы программировать? Отточите свои навыки на самых интересных задачах — графике, играх, анимации, расчетах и многом другом. Вы можете экспериментировать, добавляя к готовым проектам собственные детали.В 256 строк кода поместится все — «винтажная» экранная заставка, забег улиток на скорость, рекламный заголовок-приманка, вращающаяся спираль ДНК и так далее. Добавьте к этому пару строк своего кода, и вы сможете делиться собственными уникальными проектами в интернете.
ЧТО ВНУТРИ?
• «виселица», блек-джек и другие игры, в которые можно играть самому или с друзьями;
• имитационные модели лесных пожаров, бросков игральных костей и японских счетов-абаки;
• анимированные изображения аквариума, вращающегося куба и логотипа DVD, отскакивающего от краев экрана;
• трехмерная «бродилка» по лабиринту;
• криптография, шифры Виженера и ROT13, позволяющие надежно спрятать ваш текст.
Генератор заголовков-приманок
Нашему сайту нужно как-то заманивать людей смотреть рекламу! Но придумать интересный оригинальный контент непросто. К счастью, с помощью генератора заголовков-приманок компьютер сможет создать миллионы шокирующих фиктивных заголовков. Конечно, их качество — очень низкое, но читателей, похоже, это не смущает. Данная программа генерирует любое нужное количество заголовков на основе шаблона в стиле игры Mad Libs.
В этой программе много текста для шаблонов заголовков, но сам код прост и вполне доступен для начинающих.
Программа в действии
Результат выполнения clickbait.py выглядит следующим образом:
Clickbait Headline Generator
By Al Sweigart al@inventwithpython.com
Our website needs to trick people into looking at ads!
Enter the number of clickbait headlines to generate:
> 1000
Big Companies Hate Him! See How This New York Cat Invented a Cheaper Robot
What Telephone Psychics Don't Want You To Know About Avocados
You Won't Believe What This North Carolina Shovel Found in Her Workplace
--сокращено--
14 Reasons Why Parents Are More Interesting Than You Think (Number 1 Will Surprise
You!)
What Robots Don't Want You To Know About Cats
This Florida Telephone Psychic Didn't Think Robots Would Take Her Job. She Was Wrong.
Описание работы
Программа включает несколько функций для генерации различных видов заголовков-приманок, получающих случайные слова из STATES, NOUNS, PLACES, WHEN и других списков. Далее эти функции вставляют полученные слова в строковое значение шаблона с помощью строкового метода format (), а затем возвращают это значение. Все очень похоже на книгу для игры в Mad Libs, но пробелы заполняет компьютер, благодаря чему программа может генерировать тысячи заголовков-приманок в секунду.
1. """Генератор заголовков-приманок, (c) Эл Свейгарт al@inventwithpython.com
2. Генератор заголовков-приманок для сайта со скучным контентом
3. Код размещен на https://nostarch.com/big-book-small-python-projects
4. Теги: большая, для начинающих, юмор, слова"""
5.
6. import random
7.
8. # Задаем константы:
9. OBJECT_PRONOUNS = ['Her', 'Him', 'Them']
10. POSSESIVE_PRONOUNS = ['Her', 'His', 'Their']
11. PERSONAL_PRONOUNS = ['She', 'He', 'They']
12. STATES = ['California', 'Texas', 'Florida', 'New York', 'Pennsylvania',
13. 'Illinois', 'Ohio', 'Georgia', 'North Carolina', 'Michigan']
14. NOUNS = ['Athlete', 'Clown', 'Shovel', 'Paleo Diet', 'Doctor', 'Parent',
15. 'Cat', 'Dog', 'Chicken', 'Robot', 'Video Game', 'Avocado',
16. 'Plastic Straw','Serial Killer', 'Telephone Psychic']
17. PLACES = ['House', 'Attic', 'Bank Deposit Box', 'School', 'Basement',
18. 'Workplace', 'Donut Shop', 'Apocalypse Bunker']
19. WHEN = ['Soon', 'This Year', 'Later Today', 'RIGHT NOW', 'Next Week']
20.
21.
22. def main():
23. print('Clickbait Headline Generator')
24. print('By Al Sweigart al@inventwithpython.com')
25. print()
26.
27. print('Our website needs to trick people into looking at ads!')
28. while True:
29. print('Enter the number of clickbait headlines to generate:')
30. response = input('> ')
31. if not response.isdecimal():
32. print('Please enter a number.')
33. else:
34. numberOfHeadlines = int(response)
35. break # Выходим из цикла, когда будет введено допустимое число.
36.
37. for i in range(numberOfHeadlines):
38. clickbaitType = random.randint(1, 8)
39.
40. if clickbaitType == 1:
41. headline = generateAreMillennialsKillingHeadline()
42. elif clickbaitType == 2:
43. headline = generateWhatYouDontKnowHeadline()
44. elif clickbaitType == 3:
45. headline = generateBigCompaniesHateHerHeadline()
46. elif clickbaitType == 4:
47. headline = generateYouWontBelieveHeadline()
48. elif clickbaitType == 5:
49. headline = generateDontWantYouToKnowHeadline()
50. elif clickbaitType == 6:
51. headline = generateGiftIdeaHeadline()
52. elif clickbaitType == 7:
53. headline = generateReasonsWhyHeadline()
54. elif clickbaitType == 8:
55. headline = generateJobAutomatedHeadline()
56.
57. print(headline)
58. print()
59.
60. website = random.choice(['wobsite', 'blag', 'Facebuuk', 'Googles',
61. 'Facesbook', 'Tweedie', 'Pastagram'])
62. when = random.choice(WHEN).lower()
63. print('Post these to our', website, when, 'or you\'re fired!')
64.
65.
66. # Все эти функции возвращают заголовки различных типов:
67. def generateAreMillennialsKillingHeadline():
68. noun = random.choice(NOUNS)
69. return 'Are Millennials Killing the {} Industry?'.format(noun)
70.
71.
72. def generateWhatYouDontKnowHeadline():
73. noun = random.choice(NOUNS)
74. pluralNoun = random.choice(NOUNS) + 's'
75. when = random.choice(WHEN)
76. return 'Without This {}, {} Could Kill You {}'.format(noun, pluralNoun,
77. when)
78.
79. def generateBigCompaniesHateHerHeadline():
80. pronoun = random.choice(OBJECT_PRONOUNS)
81. state = random.choice(STATES)
82. noun1 = random.choice(NOUNS)
83. noun2 = random.choice(NOUNS)
84. return 'Big Companies Hate {}! See How This {} {} Invented a Cheaper {}'.
format(pronoun, state, noun1, noun2)
85.
86. def generateYouWontBelieveHeadline():
87. state = random.choice(STATES)
88. noun = random.choice(NOUNS)
89. pronoun = random.choice(POSSESIVE_PRONOUNS)
90. place = random.choice(PLACES)
91. return 'You Won\'t Believe What This {} {} Found in {} {}'.format(state,
92. noun, pronoun, place)
93.
94. def generateDontWantYouToKnowHeadline():
95. pluralNoun1 = random.choice(NOUNS) + 's'
96. pluralNoun2 = random.choice(NOUNS) + 's'
97. return 'What {} Don\'t Want You To Know About {}'.format(pluralNoun1,
98. pluralNoun2)
99.
100.
101. def generateGiftIdeaHeadline():
102. number = random.randint(7, 15)
103. noun = random.choice(NOUNS)
104. state = random.choice(STATES)
105. return '{} Gift Ideas to Give Your {} From {}'.format(number, noun, state)
106.
107. def generateReasonsWhyHeadline():
108. number1 = random.randint(3, 19)
109. pluralNoun = random.choice(NOUNS) + 's'
110. # number2 should be no larger than number1:
111. number2 = random.randint(1, number1)
112. return '{} Reasons Why {} Are More Interesting Than You Think (Number {}
113. Will Surprise You!)'.format(number1, pluralNoun, number2)
114.
115.
116. def generateJobAutomatedHeadline():
117. state = random.choice(STATES)
118. noun = random.choice(NOUNS)
119.
120. i = random.randint(0, 2)
121. pronoun1 = POSSESIVE_PRONOUNS[i]
122. pronoun2 = PERSONAL_PRONOUNS[i]
123. if pronoun1 == 'Their':
124. return 'This {} {} Didn\'t Think Robots Would Take {} Job. {} Were
Wrong.'.format(state, noun, pronoun1, pronoun2)
125. else:
126. return 'This {} {} Didn\'t Think Robots Would Take {} Job. {} Was
Wrong.'.format(state, noun, pronoun1, pronoun2)
127.
128.
129. # Если программа не импортируется, а запускается, производим запуск:
130. if __name__ == '__main__':
131. main()
Когда вы введете исходный код и запустите его несколько раз, попробуйте поэкспериментировать с внесением в него изменений. Можете также сами попробовать придумать, как сделать следующее:
- добавить еще несколько типов заголовков-приманок;
- добавить новые категории слов, помимо NOUNS, STATES и т. д.
Исследование программы
Попробуйте найти ответы на следующие вопросы. Поэкспериментируйте с изменениями кода и запустите программу снова, чтобы увидеть, как они повлияют на ее работу.
1. Какое сообщение об ошибке вы получите, если удалите или закомментируете numberOfHeadlines = int (response) в строке 34?
2. Какое сообщение об ошибке вы получите, если замените int (response) на response в строке 34?
3. Какое сообщение об ошибке вы получите, если замените строку 19 на WHEN = []?
Более подробно с книгой можно ознакомиться на сайте издательства
» Оглавление
» Отрывок
По факту оплаты бумажной версии книги на e-mail высылается электронная книга.
Для Хаброжителей скидка 25% по купону — Python