image Привет, Хаброжители! Вы уже освоили основы синтаксиса 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

Комментарии (13)


  1. akryukov
    08.02.2022 18:42
    +9

    Если вдруг кому-то интересно, то в оригинале книга называется "The Big Book of Small Python Projects: 81 Easy Practice Programs"


    1. forthuser
      08.02.2022 23:58
      +3

      Не увидел текстов программ к книге в виде архивного файла.
      BigBookPythonResources.zip


  1. Pyhesty
    08.02.2022 22:35
    +1

    когда у меня спрашивают, как выучить тот или иной язык, я их отправляю кодить на acmp.ru или codeforces.com (для тех, кто хочет получить ещё больше удвольствия, на codingame) исключительно на нужном для изучения языке... за несколько недель кодинга погружение в язык обеспечено... интересные задачи, ранжирование по сложности...

    а книги, это интересно, да, на ночь почитать... =)


    1. vkni
      09.02.2022 07:32

      Увы, на acmp.ru слишком узок выбор языков. :-(


      1. Pyhesty
        09.02.2022 10:53
        +1

        питона разве там нет? специально зашёл проверить,

        ну и смысл моего поста не совсем про то...

        я книги очень люблю и с уважением к ним отношусь, сам обучался по книге "100 задач по программированию" с длинными листингами, от части бесполезными, так как никогда их не перебивал на комп... этот формат устарел, а для обучения языкам есть более эффективный формат в виде соревновательного программирования...


        1. vkni
          09.02.2022 16:13

          Питона там есть, там нет всякого более интересного. :-(


    1. ScarferNV
      09.02.2022 10:59
      +1

      Как вы тогда собираетесь узнавать теорию , если пренебрегаете книгами?


      1. Pyhesty
        09.02.2022 11:32

        в данной статье обучение предлагается через задачи

        "Вы уже освоили основы синтаксиса Python и готовы программировать? Отточите свои навыки на самых интересных задачах — графике, играх, анимации, расчетах и многом другом.  "

        а так по базовым алгоритмам у каждого свой букварь, а оттачивать синтаксис и навыки по конкретному языку только на задачах...


  1. Myxach
    09.02.2022 09:08

    Прям так и охота переписывать рандомный кликбейт как:

    for i in range(numberOfHeadlines):
    	headline_functions = [generateAreMillennialsKillingHeadline,generateWhatYouDontKnowHeadline,generateBigCompaniesHateHerHeadline,generateYouWontBelieveHeadline,generateDontWantYouToKnowHeadline, generateGiftIdeaHeadline,generateReasonsWhyHeadline,generateJobAutomatedHeadline]
    	
    	clickbaitType = random.randint(0, len(headline_functions))
    	headline = headline_functions[clickbaitType]()
    	
    	print(headline)
    


    1. underwit
      09.02.2022 11:54

      Открой для себя random.choice


      1. Myxach
        09.02.2022 15:45

        Даже так


  1. lilouse
    09.02.2022 13:22
    +2

    В оригинале книга доступна бесплатно на сайте автора для чтения онлайн.


  1. mobilkip
    11.02.2022 18:18

    Есть ли что-то подобное на Java?

    В принципе, насколько я понял, зная синтаксис питона использовать так же и для явы?