Главная страница
Навигация по странице:

  • File ⇒ New File

  • Enter

  • Таблица 4.1. Экранированные символыЭкранированный символ На экран выводится

  • Одинарные и двойные кавычки

  • Параметр end функции print()

  • Как играть в «Царство драконов»

  • В ЭТОЙ ГЛАВЕ РАССМАТРИВАЮТСЯ СЛЕДУЮЩИЕ ТЕМЫ

  • Рис. 5.1. Блок-схема игры «Царство драконов»Исходный код игры «Царство драконов» В редакторе файлов создайте новый файл, вы- брав команду меню File ⇒ New File

  • Функции в игре «Царство драконов»

  • Где указывать определение функций

  • Учим Python, делая крутые игры 2018. Invent your owncomputer gameswith python


    Скачать 6.56 Mb.
    НазваниеInvent your owncomputer gameswith python
    Дата10.12.2022
    Размер6.56 Mb.
    Формат файлаpdf
    Имя файлаУчим Python, делая крутые игры 2018.pdf
    ТипДокументы
    #837554
    страница8 из 39
    1   ...   4   5   6   7   8   9   10   11   ...   39
    66
    Глава 4
    Кариес!
    Тук-тук.
    Кто там?
    Невежливая корова.
    Невежливая корова?-МУУУ!
    Исходный код программы «Шутки»
    В редакторе файлов создайте новый файл, вы- брав команду меню File
    New File (Файл ⇒ Но- вый файл). В открывшемся окне введите приве- денный ниже исходный код и сохраните файл под именем jokes.py. Затем нажмите клавишу F5 и запу- стите программу. Если при выполнении программы возникают ошибки, сравните код, который вы на- брали, с оригинальным кодом с помощью онлайн- инструмента на сайте inventwithpython.com/diff/.
    jokes.py
    1. print('Что получится, если скрестить снеговика с вампиром?')
    2. input()
    3. print('Обморожение!')
    4. print()
    5. print('Что дантисты называют \'черной дырой\'?')
    6. input()
    7. print('Кариес!')
    8. print()
    9. print('Тук-тук.')
    10. input()
    11. print("Кто там?")
    12. input()
    13. print('Невежливая корова.')
    14. input()
    15. print('Невежливая корова?', end='')
    16. print('-МУУУ!')
    Как работает код
    Для начала взглянем на первые четыре строки кода.
    Make sure you’re using Python 3, not Python 2!
    УБЕ ДИТЕСЬ,
    ЧТО ИСПО ЛЬЗУЕТЕ
    PY THON 3,
    А НЕ PY THON 2!

    Программа-шутник
    67
    1. print('Что получится, если скрестить снеговика с вампиром?')
    2. input()
    3. print('Обморожение!')
    4. print()
    В строках 1 и 3 вызов функции print() используется для того, чтобы за- дать вопрос и дать на него ответ в пределах первой шутки. Вы ведь не хоти- те, чтобы пользователь сразу же прочел ответ на шутливый вопрос, поэтому требуется вызов функции input() после первого вызова print(). Пользователь прочитает шутку, нажмет клавишу Enter, а затем прочитает окончание.
    Пользователь может ввести некую строку и нажать клавишу Enter, но эта возвращаемая строка не сохранится ни в одной переменной. Программа ее попросту проигнорирует и перейдет к следующей строке кода.
    Последний вызов функции print() не содержит строкового аргумента.
    Так программе передается инструкция вывести пустую строку. Пустые стро- ки полезны для того, чтобы избежать нагромождения текста.
    Экранируемые символы
    Строки с 5 по 8 выводят на экран текст (вопрос и ответ) следующей шутки .
    5. print('Что дантисты называют \'черной дырой\'?')
    6. input()
    7. print('Кариес!')
    8. print()
    Обратите внимание, что символ \ — это обратный слеш (или обратная косая черта), а / — прямой слеш (или просто косая черта). В строке 5 два раза указан обратный слеш (косая черта) прямо перед одиночной кавычкой: \'.
    Этот обратный слеш означает, что символ, указанный следом, экранируемый .
    Экранируемые символы , позволяют выводить специальные символы, которые трудно или невозможно обычным образом вставить в исходный код. К при- меру, к таким символам относится одиночная кавычка в строковом значении, которое само по себе начинается и заканчивается одинарными кавычками.
    В этом случае, если мы не укажем символы обратного слеша, одинарные кавычки в тексте \'черной дырой\' будут расценены как конец строки, и мы получим ошибку синтаксиса. Но эти кавычки должны быть частью стро-

    68
    Глава 4
    ки. Если их заэкранировать, они будут выведены в составе строкового зна- чения.
    Что же делать, если вы захотите отобразить обратный слеш?
    Завершите работу вашей программы jokes.py и в интерактивной оболочке введите следующую инструкцию print():
    >>>
    print('Фото в папке d:\photo\tennis.')
    Фото в папке d:\photo ennis.
    Здесь не отобразился второй обратный слеш, потому что буква t после него была определена как экранированный символ. Символы \t распознают- ся как символ табуляции (нажатие клавиши Tab на клавиатуре).
    Следующая строка кода правильно отобразит текст:
    >>>
    print('Фото в папке d:\photo\\tennis.')
    Фото в папке d:\photo\tennis.
    В этом случае последовательность \\ определяется как символ обратного слеша и сочетание \t перестает выводиться как символ табуляции.
    В таблице 4.1 представлен список некоторых экранированных символов в Python, включая \n, который обозначает символ перехода на новую строку, ранее использованный нами.
    Таблица 4.1.
    Экранированные символы
    Экранированный символ
    На экран выводится
    \\
    Обратный слеш (\)
    \'
    Одинарная кавычка (')
    \"
    Двойные кавычки (")
    \n
    Новая строка
    \t
    Табуляция
    В Python существует еще несколько экранированных символов, но указан- ные выше вы будете чаще всего использовать во время разработки своих игр.
    Одинарные и двойные кавычки
    Пока мы еще находимся в интерактивной оболочке, давайте подробнее рассмотрим кавычки. Строки в Python не всегда обрамляются одинарными

    Программа-шутник
    69
    кавычками . Вы можете использовать и двойные кавычки . Следующие две строки выводятся одинаково:
    >>>
    print('Привет, мир!')
    Привет, мир!
    >>>
    print("Привет, мир!")
    Привет, мир!
    Но вы не можете использовать и те и другие кавычки одновременно, ина- че получите сообщение об ошибке (достигнут конец строки во время испол- нения строки с одной кавычкой) .
    >>>
    print('Привет, мир!")
    SyntaxError: EOL while scanning single-quoted string
    Я предпочитаю использовать одинарные кавычки, потому что нет необ- ходимости удерживать клавишу Shift во время их ввода. Их проще набрать с клавиатуры, а для Python нет никакой разницы.
    Также обратите внимание, что по аналогии с символами \' в строке, об- рамленной одинарными кавычками, следует использовать символы \" в стро- ке, обрамленной двойными кавычками.
    Взгляните на пример:
    >>>
    print('Я попросил у Артура \'Мерс\' на неделю. Он сказал, "Конечно!"')
    print('Я попросил у Артура \'Мерс\' на неделю. Он сказал, "Конечно!"')
    Вы используете одинарные кавычки в начале и в конце строки, поэтому необходимо добавить обратный слеш перед одинарными кавычками, окру- жающими слово «Мерс». Но при использовании кавычек в слове «Конечно!» обратный слеш не нужен. Интерпретатор Python достаточно сообразителен, чтобы понять, что строка, которая начинается с одного типа кавычек, не мо- жет заканчиваться другим типом.
    Теперь взгляните на другой пример:
    >>>
    print("Она сказала, \"Не могу поверить, что ты одолжил им 'Мерс'.\"")
    print("Она сказала, \"Не могу поверить, что ты одолжил им 'Мерс'.\"")

    70
    Глава 4
    Мы заключили строку в двойные кавычки, поэтому потребовалось до- бавить обратный слеш ко всем двойным кавычкам внутри строки. Нам нет необходимости экранировать одинарные кавычки вокруг слова «Мерс».
    Итак, в строках, обрамленных одинарными кавычками, вам не нужно экранировать двойные кавычки, но вы должны экранировать одинарные.
    Аналогично в строках, обрамленных двойными кавычками, вам не нужно экранировать одинарные и нужно экранировать двойные.
    Параметр end функции print()
    Теперь вернемся к файлу jokes.py и взглянем на строки 9–16.
    9. print('Тук-тук.')
    10. input()
    11. print("Кто там?")
    12. input()
    13. print('Невежливая корова.')
    14. input()
    15. print('Невежливая корова?', end='')
    16. print('-МУУУ!')
    Обратили ли вы внимание на второй аргумент функции print() в стро- ке 15? Обычно функция print() добавляет символ новой строки в конце строки, которую печатает. Поэтому функция print() без аргументов просто выводит пустую строку . Но у print() есть еще один необязательный параметр — end .
    Помните, что аргумент — это значение, которое передается в вызове функции. Пустая строка, которая передается функции print(), называется по-
    зиционным аргументом. А end='' — именованным аргументом. Чтобы пере- дать именованный аргумент функции, вы должны ввести перед значением аргумента его имя — как, например, end=.
    Когда мы запустим эту часть кода, то получим результат:
    Тук-тук.
    Кто там?
    Невежливая корова.
    Невежливая корова?-МУУУ!
    Так как мы передали пустую строку параметру end, функция print() ото- бразит пропуск вместо перехода на новую строку. Вот почему текст '-МУУУ!'
    отображается в той же строке, а не новой. Символ новой строки после строки 'Невежливая корова?'
    не выводится.
    Заключение
    В этой главе мы рассмотрели различные способы использования функ- ции print(). Экранированные символы используются для вывода специаль- ных символов. Если в строке вам нужно использовать специальные символы, укажите обратный слеш \ вместе с буквой специального символа. Например,
    \n
    — символ новой строки. Если же в строке нужно вывести обратный слеш, используйте сочетание символов \\.
    Функция print() автоматически добавляет символ новой строки в конец каждой строки. Чаще всего это полезно. Но иногда переход на новую строку не требуется. Для этого вы можете добавить в функцию print() именованный аргумент end. Например, чтобы вывести на экран слово спам без перехода на новую строку, следует использовать код print('спам', end='').

    72
    Глава 5
    5
    ИГРА «ЦАРСТВО ДРАКОНОВ»
    В этой главе вы создадите игру, которая называется «Царство драконов». В ней игрок выбирает между двумя пещера- ми, в одной из которых его ждет сокро- вище, а в другой — гибель.
    Как играть в «Царство драконов»
    Согласно условиям, игрок находится в землях, заселенных драконами.
    Все драконы живут в пещерах с кучами сокровищ, которые они насобирали.
    Некоторые драконы дружелюбны и делятся своими сокровищами. Другие — злы и съедают любого, кто попадает в их пещеру.
    Игрок приближается к двум пещерам: одна — с дружелюбным драконом, а вторая — со злым. Игрок должен сделать выбор, не зная, какой из драконов ему встретится.
    В ЭТОЙ ГЛАВЕ РАССМАТРИВАЮТСЯ СЛЕДУЮЩИЕ ТЕМЫ:
    • Блок-схемы
    • Создание собственных функций с помощью ключевого слова def
    • Многострочный текст
    • Инструкции while
    • Логические операторы and
    , or и not
    • Таблицы истинности
    • Ключевое слово return
    • Глобальная и локальная области видимости переменных
    • Параметры и аргументы
    • Функция sleep()

    Игра «Царство драконов»
    73
    Пример запуска игры «Царство драконов»
    Вот как выглядит эта игра при запуске. Текст, который вводит игрок, вы- делен полужирным шрифтом.
    Вы находитесь в землях, заселенных драконами.
    Перед собой вы видите две пещеры.
    В одной из них — дружелюбный дракон,
    который готов поделиться с вами своими сокровищами.
    Во второй — `жадный и голодный дракон, который мигом вас съест.
    В какую пещеру вы войдете? (нажмите клавишу 1 или 2)
    1
    Вы приближаетесь к пещере...
    Ее темнота заставляет вас дрожать от страха...
    Большой дракон выпрыгивает перед вами! Он раскрывает свою пасть и...
    ...моментально вас съедает!
    Попытаете удачу еще раз? (да или нет)
    нет
    Блок-схема игры «Царство драконов»
    Чаще всего стоит записать все, что должна выполнять ваша игра или про- грамма, до начала работы над кодом. Этот этап называется проектированием
    программы.
    В этом вам поможет создание блок-схемы. Блок-схема — это диаграмма, показывающая все возможные действия, которые могут происходить в игре, и их связи между собой. На рис. 5.1 показана блок-схема для игры «Царство драконов».
    Чтобы узнать, что произойдет во время игры, поместите свой палец на поле «Старт».
    Далее следуйте по стрелкам от этого блока к другим. Ваш палец играет роль интерпретатора программы. Выполнение программы заканчивается, когда ваш палец достигнет блока «Конец».
    Когда вы доберетесь до блока «Проверка дракона (дружелюбный или голодный)», далее вы можете попасть как в блок «Игрок побеждает», так и в блок «Игрок проигрывает».
    В этой точке ветвления выполнение программы может пойти в разных направлениях. В любом случае оба пути в конечном итоге попадут в блок
    «Спрашиваем, хочет ли сыграть снова».

    74
    Глава 5
    START
    Show introduction
    Ask to play again
    Player chooses a cave
    Check for friendly or hungry dragon
    Player wins
    Player loses
    END
    Старт
    Конец
    Показать вступление
    Игрок выбирает пещеру
    Спрашиваем, хочет ли сыграть снова
    Проверка дракона
    (дружелюбный или голодный)
    Игрок побеждает
    Игрок проигрывает
    Рис. 5.1.
    Блок-схема игры «Царство драконов»
    Исходный код игры «Царство драконов»
    В редакторе файлов создайте новый файл, вы- брав команду меню File
    New File (Файл ⇒ Но- вый файл). В открывшемся окне введите приве- денный ниже исходный код и сохраните файл под именем dragon.py. Нажмите клавишу F5 для запуска программы. Если при ее выполнении возникают ошибки, сравните код, который вы набрали, с ори- гинальным кодом с помощью онлайн-инструмента на сайте inventwithpython.com/diff/.
    dragon.py
    1. import random
    2. import time
    3.
    4. def displayIntro():
    Make sure you’re using Python 3, not Python 2!
    УБЕ ДИТЕСЬ,
    ЧТО ИСПО ЛЬЗУЕТЕ
    PY THON 3,
    А НЕ PY THON 2!

    Игра «Царство драконов»
    75
    5. print('''Вы находитесь в землях, заселенных драконами.
    6. Перед собой вы видите две пещеры. В одной из них — дружелюбный дракон,
    7. который готов поделиться с вами своими сокровищами. Во второй —
    8. жадный и голодный дракон, который мигом вас съест.''')
    9. print()
    10.
    11. def chooseCave():
    12. cave = ''
    13. while cave != '1' and cave != '2':
    14. print('В какую пещеру вы войдете? (нажмите клавишу 1 или 2)')
    15. cave = input()
    16.
    17. return cave
    18.
    19. def checkCave(chosenCave):
    20. print('Вы приближаетесь к пещере...')
    21. time.sleep(2)
    22. print('Ее темнота заставляет вас дрожать от страха...')
    23. time.sleep(2)
    24. print('Большой дракон выпрыгивает перед вами! Он раскрывает свою пасть и...')
    25. print()
    26. time.sleep(2)
    27.
    28. friendlyCave = random.randint(1, 2)
    29.
    30. if chosenCave == str(friendlyCave):
    31. print('...делится с вами своими сокровищами!')
    32. else:
    33. print('...моментально вас съедает!')
    34.
    35. playAgain = 'да'
    36. while playAgain == 'да' or playAgain == 'д':
    37. displayIntro()
    38. caveNumber = chooseCave()
    39. checkCave(caveNumber)
    40.
    41. print('Попытаете удачу еще раз? (да или нет)')
    42. playAgain = input()
    Давайте проанализируем исходный код.

    76
    Глава 5
    Импорт модулей random и time
    Эта программа импортирует два модуля:
    1. import random
    2. import time
    Модуль random предоставляет функцию randint(), которую мы использо- вали в игре «Угадай число» в главе 3. Код в строке 2 импортирует модуль time , содержащий функции для работы со временем.
    Функции в игре «Царство драконов»
    Функции позволяют запускать один и тот же код несколько раз без не- обходимости повторного копирования и вставки этого кода. Вы помещаете код внутрь функции, которую вызываете при необходимости. И, поскольку вы пишете этот фрагмент кода только один, то в случае ошибки функции вам нужно будет внести изменения только в одном месте кода программы.
    Вы уже использовали несколько функций, такие как print(), input(), randint()
    , str() и int(). Ваши программы вызывали эти функции для вы- полнения их кода. В игре «Царство драконов» вы будете писать собственные функции с помощью инструкции def.
    Инструкции def
    Код в строке 4 — это как раз и есть инструкция def .
    4. def displayIntro():
    5. print('''Вы находитесь в землях, заселенных драконами.
    6. Перед собой вы видите две пещеры. В одной из них — дружелюбный дракон,
    7. который готов поделиться с вами своими сокровищами. Во второй —
    8. жадный и голодный дракон, который мигом вас съест.''')
    9. print()
    Инструкция def определяет новую функцию (в данном случае — функ- цию displayIntro()), которую вы можете вызвать позже в программе.
    Рисунок 5.2 демонстрирует часть инструкции def. Она содержит ключе- вое слово def, за которым следует имя функции с круглыми скобками, а затем двоеточие (:). Блок после инструкции def называется блоком def .

    Игра «Царство драконов»
    77
    y def displayIntro():
    ключевое слово def круглые скобки имя функции двоеточие
    Рис. 5.2.
    Компоненты инструкции def
    Вызов функции
    Когда вы определяете функцию, вы указываете инструкции для ее запу- ска в следующем блоке. Когда вы вызываете функцию , выполняется код вну- три блока def. Пока вы не вызовете эту функцию, инструкции в блоке def не будут выполняться.
    Другими словами, когда интерпретатор доходит до инструкции def, он пропускает следующей за ней блок def целиком и переходит к первой стро- ке после него. При вызове функции интерпретатор переходит внутрь этой функции к первой строке кода в блоке def.
    Например, взгляните на вызов функции displayIntro() в строке 37:
    37. displayIntro()
    Вызов этой функции запускает функцию print(), которая выводит на экран вступление с текстом «Вы находитесь в землях, заселенных драко нами…».
    Где указывать определение функций?
    Определение функции и блок def должны предшествовать вызову функ- ции. Точно так же, как вы сначала определяете значение переменной, а за- тем уже используете эту переменную. Если вы укажете вызов функции перед ее определением, при выполнении программы отобразится ошибка. Давайте рассмотрим маленькую программу в качестве примера. Откройте новое окно редактора файлов, введите указанный ниже код, сохраните его под именем
    example.py и запустите.
    sayGoodbye()
    def sayGoodbye():
    print('Пока!')

    78
    Глава 5
    При попытке запустить эту программу вы получите следующее сообще- ние об ошибке:
    Traceback (most recent call last):
    File "C:/Users/Al/AppData/Local/Programs/Python/Python36/example.py",
    line 1, in
    sayGoodbye()
    NameError: name 'sayGoodbye' is not defined
    Чтобы исправить эту ошибку, поменяйте местами определение функции и ее вызов.
    def sayGoodbye():
    print('Пока!')
    sayGoodbye()
    Теперь функция sayGoodbye() определена прежде, чем будет вызвана, та- ким образом Python будет знать, как ее интерпретировать. В противном слу- чае Python не будет иметь инструкций для функции sayGoodbye() во время ее вызова и, таким образом, не сможет ее обработать и вывести текст.
    1   ...   4   5   6   7   8   9   10   11   ...   39


    написать администратору сайта