Вы находитесь на странице: 1из 26

Урок 5

ФОРМАТИРОВАНИЕ
СТРОК.
СОЗДАНИЕ ИГРЫ
«БОЕВЫЕ РОБОТЫ»

Содержание
Форматирование строк................................................3
Служебные символы......................................................12
Игра «Боевые роботы»............................................... 15

В ЭТОМ УРОКЕ ИСПОЛЬЗУЮТСЯ ВИДЕОМАТЕРИАЛЫ.


Каждый раз, когда вы видите на странице иллюстрацию со
значком PLAY поверх нее — это видео. Щелкните по нему,
чтобы просмотреть видео.

2
Форматирование строк. Создание игры «Боевые роботы»

Форматирование строк
За время нашего обучения мы постоянно сталкива-
лись со строками, печатая их на экран или держа в них
важную информацию. Сегодня поработаем с их фор-
матированием, чтобы научиться делать их более чита-
бельными и красивыми.
На самом деле существует три подхода к форма-
тированию строк. Первым рассмотрим самый но-
вый, известный под названием «форматирование с
f-строками». С их помощью внутрь строки можно пе-
редать переменную. Запишем:

name = "Ann"
print(f"Happy birthday, {name}!")

Запустим код (видео 1):

Видео 1

3
Урок 5

Но кроме самой переменной, можно подставить


выражение (видео 2):

name = "Ann"
print(f"Happy birthday, {name*2}!")

И даже функцию (видео 3):

name = "Ann"
print(f"Happy birthday, {len(name)}!")

Видео 2

Видео 3

4
Форматирование строк. Создание игры «Боевые роботы»

Конечно, в одной строке может быть несколько пе-


ременных (видео 4):

name = "Ann"
day = 13
print(f"Today is friday {day}. Happy birthday,
{name} You are {len(name)} years old!")

Видео 4

Стоит заметить, переменные ищутся таким же обра-


зом, как и при использовании функций.
Но кроме подставки переменных и выражений,
можно форматировать часть, привлеченную для их вы-
вода, например, изменить количество знаков. Для это-
го после названия надо поставить двоеточие и указать
число символов (см. видео 5 на стр. 6).

5
Урок 5

Видео 5

Заметьте, строки выравниваются по левому краю, а


числа – по правому. Кроме этого, можно указать, какой
тип данных должен передаваться, а в случае передачи
другого, возникнет ошибка. Если переменная должна
быть числом, то после указания количества знаков не-
обходимо поставить символ d или n (видео 6).

Видео 6

Если тип переменной строка, то используется сим-


вол s (видео 7).
6
Форматирование строк. Создание игры «Боевые роботы»

Видео 7

Когда необходимо форматировать действительное


число, используется символ f. Кроме того, можно от-
дельно форматировать количество знаков, задейство-
ванных для отображения дробной части. Для этого
необходимо после количества знаков и перед символом
f поставить точку и число. Именно столько символов
будет привлечено к форматированию дробной части
(видео 8):

Видео 8

7
Урок 5

Обратите внимание, если дробная часть длиннее


количества знаков, указанных в форматировании, она
округлится.
А указав символ %, число умножится на 100 и сразу
за ним появится знак % (видео 9):

Видео 9

Кроме того, во время форматирования строк можно


выбрать, как будут выравниваться данные. Реализуется
это с помощью таких знаков (видео 10):
■■ > – выравнивание по правому краю;
■■ < – выравнивание по левому краю;
■■ ^ – выравнивание по центру.

8
Форматирование строк. Создание игры «Боевые роботы»

Видео 10

Оказывается, получаемые пробелы можно запол-


нить. Для этого необходимо выбрать соответствующий
знак и поставить его впереди знака, указывающего на
выравнивание (видео 11):

Видео 11

При желании можете ознакомиться с полным фун-


кционалом мини-языка форматирования по ссылке:
https://docs.python.org/3/library/string.
html#formatspec.

9
Урок 5

Следующий тип форматирования реализуется с


помощью метода format() (видео 12). Но перед тем
как его рассмотреть, обратите внимание на то, что все
спецсимволы, рассмотренные выше, будут работать и
здесь. Запишем:

day = 13
print("Today is friday, {:10d}.".format(day))

Видео 12

При передаче нескольких параметров методу вну-


три фигурных скобок можно указать номер аргумента,
который там должен быть (см. видео 13 на стр. 11).
А еще можно передать именованные параметры (см.
видео 14).

10
Форматирование строк. Создание игры «Боевые роботы»

Видео 13

Видео 14

11
Урок 5

Последний метод форматирования предусматри-


вает использование знака %. Поскольку это устаревший
и негибкий формат, то рассматривать его не будем, но
рассмотрим общий вид на примере (видео 15):

Видео 15

Служебные символы
Кроме вышеописанных методов, для форматиро-
вания любых строк внутри них могут использоваться
служебные символы, впереди которых располагается
знак \:
■■ \n – переносит строку на строку ниже (см. видео
16 на стр. 13);
■■ \b – удаляет символ впереди (см. видео 17);
■■ \t – добавляет табуляцию (см. видео 18 на стр. 14);
■■ \r – удаляет все данные в строке впереди себя,
оставляя те, что после (см. видео 19).

12
Форматирование строк. Создание игры «Боевые роботы»

Видео 16

Видео 17

13
Урок 5

Видео 18

Видео 19

14
Форматирование строк. Создание игры «Боевые роботы»

Игра «Боевые роботы»


Не секрет, что конструирование роботов – дело
интересное: поэтому создадим игру, в которой
каждый сможет сконструировать собственного
боевого монстра!

Рисунок 1

Создадим словарь с названиями и ценой оружия:

details_damage_price = {"energy gun": 100,


"minigun": 70, "Thor hammer": 50, "laser gun": 80,
"rail gun": 90, "sniper rifle": 150}

15
Урок 5

Но кроме оружия будет классно защищать робота,


поэтому добавим словарь с соответствующими деталя-
ми и умениями:

details_survive_price = {"shield": 50, "energy


shield": 80, "resist": 30, "evasion": 100,
"armor": 140}

Создадим словарь, в котором будут храниться вы-


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

users_bot = {}
users_list = []

Поработаем над функцией, которая наполнит этот


список:

def player_maker(player_list):
user_choose = "yes"
while user_choose == "yes" or user_choose == "y":
user_input = input("Input a Player name – ")
if len(user_input)<3:
continue
player_list.append(str.capitalize
(user_input))
user_choose = input("More players – Y/N – ")
print(f"Players – {str(player_list)[1:-1]}")

16
Форматирование строк. Создание игры «Боевые роботы»

Рассмотрим работу функции.


■■ Создается переменная user_choose, которой прис-
ваивается значение yes.
■■ Начинается цикл while, условием выхода из которого
является переменная user_choose.
■■ В самом цикле объявляется переменная user_input,
которая после введения имени пользователем прове-
ряется на корректность ввода и добавляется в список
игроков.
■■ Следующий шаг – сделать запрос на увеличение ко-
личества игроков.
■■ Когда список сформирован, выводим его на экран.
Перейдем к написанию функции по созданию ро-
ботов. Входными параметрами для нее будут стартовая
сумма и список игроков. Первым шагом пройдемся цик-
лом for по списку игроков и создадим для каждого из
них кошелек с деньгами и словарь внутри словаря для
роботов, в котором будут храниться выбранные детали:

def bot_maker(start_sum, player_list):


for player in player_list:
wallet = start_sum
users_bot[player] = {}

Добавим цикл while, условием выхода из которого


станет отсутствие денег в кошельке игрока.

while wallet >= min(details_damage_price.values()):

17
Урок 5

В теле цикла выведем на консоль информацию об


остатке монет и деталей, доступных для покупки:

string_1 = f"{player}, you have {wallet} coins"


print(f"{string_1:=^82}")
string_2 = "You can buy:"
print(f"{string_2:-^82}")
print("{detail:^^80}".format(detail="Damage deal
details"))
for gun, price in details_damage_price.items():
print(f"{gun} – {price}")
print("{detail:^^80}".format(detail="Survive
details"))
for survive_detail, price in details_survive_
price.items():
print(f"{survive_detail} – {price}")

Создадим переменную для выбора пользователем


детали:

user_choose = str.lower(input("Choose the


detail – "))

Проверим, что ввел пользователь и по совпадению


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

18
Форматирование строк. Создание игры «Боевые роботы»

if user_choose in users_bot[player].keys():
print("{string:!^80}".format(string="Your
bot has this detail"))
continue
if user_choose in details_damage_price.keys():
if wallet < details_damage_price[user_choose]:
print("{string:!^80}".format(string="Not
enough coins"))
continue
wallet -= details_damage_price[user_choose]
users_bot[player][user_choose] =
details_damage_price[user_choose]
else:
if user_choose in details_survive_price. keys():
if wallet < details_survive_price[user_
choose]:
print("{string:!^80}\n".format(string="Not
enough coins"))
continue
wallet -= details_survive_price[user_choose]
users_bot[player][user_choose] = details_
survive_price[user_choose]
else:
print("\nYour choose is wrong!\n")
continue

19
Урок 5

Выведем на экран детали, которые пользователь уже


купил, добавив:

print(f"\n\n{player} bot details:


{str(users_bot[player].keys())[11:-2]}\n\n")

С циклом while и for закончили, а потому в самой


функции при помощи нового цикла for напечатаем по-
лученный результат:

for player in player_list:


print(f"{player} bot details:
{str(users_bot[player].keys())[11:-2]}")

С написанием функций закончили, следовательно


пора их вызвать. Первой привлечем player_maker(),
чтобы модифицировать список игроков. Добавим:

player_maker(player_list)

Имея список игроков, остается указать стартовую


сумму:

start_sum = int(input("Input start capital – "))

Но перед процессом сбора мы должны защитить


программу от пользователя. Если введенная сумма бу-
дет больше суммарной цены всех элементов, то она
установится на уровне суммарной цены. Если стартовая
сумма будет ниже, чем цена самого дешевого оружия, то
она установится именно на этом уровне:
20
Форматирование строк. Создание игры «Боевые роботы»

max_start_sum = sum(details_damage_price.
values()) + sum(details_survive_price.values())
min_start_sum = min(details_damage_price.
values())
if start_sum > max_start_sum:
start_sum = max_start_sum
if start_sum < min_start_sum:
start_sum = min_start_sum

Имея все параметры, передадим их вызову функции.


Готовый код будет иметь такой вид:

details_damage_price = {"energy gun": 100,


"minigun": 70, "Thor hammer": 50, "laser gun": 80,
"rail gun": 90, "sniper rifle": 150}
details_survive_price = {"shield": 50, "energy
shield": 80, "resist": 30, "evasion": 100,
"armor": 140}

users_bot = {}
player_list = []

def player_maker(player_list):
user_choose = "yes"
while user_choose == "yes" or user_choose == "y":
user_input = input("Input a Player name – ")
if len(user_input)<3:
continue

21
Урок 5

player_list.append(str.capitalize
(user_input))
user_choose = input("More players – Y/N – ")
print(f"Players – {str(player_list)[1:-1]}")

def bot_maker(start_sum, player_list):


for player in player_list:
wallet = start_sum
users_bot[player] = {}
while wallet >= min(details_damage_price.
values()):
string_1 = f"{player}, you have {wallet}
coins"
print(f"{string_1:=^82}")
string_2 = "You can buy:"
print(f"{string_2:-^82}")
print("{detail:^^80}".format(detail="Damage
deal details"))
for gun, price in details_damage_price.
items():
print(f"{gun} – {price}")
print("{detail:^^80}".format(detail="Survive
details"))
for survive_detail, price in
details_survive_price.items():
print(f"{survive_detail} – {price}")

22
Форматирование строк. Создание игры «Боевые роботы»

user_choose = str.lower(input("Choose the


detail – "))
if user_choose in users_bot[player].keys():
print("{string:!^80}".format(string="Your
bot has this detail"))
continue
if user_choose in details_damage_price.keys():
if wallet <
details_damage_price[user_choose]:
print("{string:!^80}".format(string="Not
enough coins"))
continue
wallet -= details_damage_price[user_choose]
users_bot[player][user_choose] =
details_damage_price[user_choose]
else:
if user_choose in details_survive_price.keys():
if wallet <
details_survive_price[user_choose]:
print("{string:!^80}\n".
format(string="Not enough coins"))
continue
wallet -= details_survive_price[user_choose]
users_bot[player][user_choose] =
details_survive_price[user_choose]
else:
print("\nYour choose is wrong!\n")

23
Урок 5

continue
print(f"\n\n{player} bot details:
{str(users_bot[player].keys())[11:-2]}\
n\n")
for player in player_list:
print(f"{player} bot details:
{str(users_bot[player].keys())[11:-2]}")

player_maker(player_list)

start_sum = int(input("Input start capital – "))


max_start_sum = sum(details_damage_price.
values()) + sum(details_survive_price.values())
min_start_sum = min(details_damage_price.
values())
if start_sum > max_start_sum:
start_sum = max_start_sum
if start_sum < min_start_sum:
start_sum = min_start_sum

bot_maker(start_sum=start_sum, player_list=
player_list)

24
Форматирование строк. Создание игры «Боевые роботы»

Посмотрим, как работает разработанная игра


(видео 20):

Видео 20

Сегодня мы научились работать со строками, встав-


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

25
Урок 5
ФОРМАТИРОВАНИЕ СТРОК.
СОЗДАНИЕ ИГРЫ
«БОЕВЫЕ РОБОТЫ»

© Компьютерная Академия ШАГ


www.itstep.org

Все права на охраняемые авторским правом фото-, аудио- и видеопроизведения,


фрагменты которых использованы в материале, принадлежат их законным владель-
цам. Фрагменты произведений используются в иллюстративных целях в объеме,
оправданном поставленной задачей, в рамках учебного процесса и в учебных целях,
в соответствии со ст. 1274 ч. 4 ГК РФ и ст. 21 и 23 Закона Украины «Про авторське
право і суміжні права». Объем и способ цитируемых произведений соответствует
принятым нормам, не наносит ущерба нормальному использованию объектов
авторского права и не ущемляет законные интересы автора и правообладателей.
Цитируемые фрагменты произведений на момент использования не могут быть
заменены альтернативными, не охраняемыми авторским правом аналогами, и
как таковые соответствуют критериям добросовестного использования и честного
использования.
Все права защищены. Полное или частичное копирование материалов запрещено.
Согласование использования произведений или их фрагментов производится
с авторами и правообладателями. Согласованное использование материалов
возможно только при указании источника.
Ответственность за несанкционированное копирование и коммерческое исполь-
зование материалов определяется действующим законодательством Украины.

Вам также может понравиться