Как сделать принт в питоне

Добавил пользователь Cypher
Обновлено: 04.10.2024

Print () – наверное, самая первая команда, с которой сталкивается новичок при изучении Python с нуля. Почти все начинают с вывода на экран простого приветствия и переходят к дальнейшему изучению синтаксиса, функций и методов языка, не задумываясь о дополнительных возможностях print(). Однако в Pyt h on 3 эта команда предоставляет доступ к базовой функции вывода данных с присущими ей параметрами и возможностями. Знание этих особенностей позволит оптимизировать вывод данных для каждого конкретного случая.

Преимущества функции print () в Python 3

В третьей версии Pyt h on print () входит в базовый набор функций. При выполнении проверки type ( print ) выводится информация: class builtin _ function _ or _ method . Слово builtin указывает на то, что проверяемая функция встроенная.

В Pyt h on 3 выводимые объекты ( object s) помещают в скобках после слова print . На примере вывода традиционного приветствия это будет выглядеть так:

Для Python 3: print(‘Hello, World!’) .

В Python 2 оператор применяется без скобок: print Hello , World !’

Результат в обеих версиях будет одинаковый: Hello , World !

Если во второй версии Python значения после print поместить в скобки, тогда выведен будет кортеж – тип данных, представляющий собой неизменяемый список:

print(1, ‘first’, 2, ‘second’)

(1, ‘ first’, 2, ‘ second ‘)

При попытке убрать скобки после print в третьей версии Python, программа выдаст синтаксическую ошибку.

Особенности синтаксиса print() в Python 3

Синтаксис функции print() включает собственно объект или объекты ( objects ), которые также могут называться значениями (values) или элементами ( items ), и несколько параметров. То, как именно будут выводиться объекты, определяется четырьмя именованными аргументами: разделителем элементов (sep), строкой, выводимой после всех объектов ( end ), файлом, куда выводятся данные ( file ), и параметром, отвечающим за буферизацию вывода ( flush ).

Вызов функции возможен без указания значений параметров и даже без каких-либо объектов: print(). В этом случае задействованы параметры по умолчанию, и при отсутствии элементов выведется неотображаемый символ пустой строки – фактически, значение параметра end‘\ n . Такой вызов, к примеру, можно использовать для вертикального отступа между выводами.

В поток данных записываются все аргументы (объекты), не относящиеся к ключевым словам, преобразованные в строки, разделенные sep и завершаемые end . Аргументы параметров sep и end также имеют строковый тип, они могут не указываться при использовании дефолтных значений.

Параметр sep

Значения всех параметров print описываются в виде аргументов ключевых слов sep , end , file , flush . Если параметр sep не указывается, то применяется его дефолтное значение: sep =’ ‘, и выводимые объекты разделяются пробелами. Пример:

print (1, 2, 3)

В качестве аргумента sep можно указать другое значение, например:

print (1, 2, 3, sep=’слово-разделитель’)

1слово-разделитель2слово-разделитель3

Параметр end

one_two_three

Параметр file

fileitem = open(‘printfile.txt’,’a’)

def test(objects):

for element in objects:

print(element, file=fileitem)

fileitem.close()

test ([1 0 , 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 ,1])

На выходе элементы списка будут записаны в printfile . txt по одному в строке.

Параметр flush

Этот параметр имеет отношение к буферизации потока данных и, поскольку он является логическим, может принимать два значения – True и False . По умолчанию параметр отключен: flush = False . Это означает, что сохранение данных из внутреннего буфера в файл будет происходить только после закрытия файла или после непосредственного вызова flush(). Для сохранения после каждого вызова print() параметру требуется присвоить значение True:

file_flush = open(r’file_flush.txt’, ‘a’)

print(« Запись строки в файл «, file=file_flush, flush=True)

print(« Запись второй строки в файл «, file=file_flush, flush=True)

file_flush.close()

Еще один пример использования параметра flush с помощью модуля time:

В этом случае аргумент True параметра flush позволит выводить числа по одному в три секунды, в то время как по умолчанию все числа были бы выведены на экран по истечении 15 секунд. Чтобы наглядно увидеть действие параметра flush, лучше запустить скрипт в консоли. Дело в том, что при использовании некоторых веб-оболочек, в частности, Jupyter Notebook, программа реализуется иначе (без учета параметра flush ).

Вывод значений переменных с помощью print()

При выводе строки, содержащей присвоенное переменной значение, достаточно указать через запятую нужный идентификатор (имя переменной). Тип переменной указывать не следует, поскольку print преобразует данные любого типа в строки. Приведем пример:

b = ‘Python from scratch’

print(a,’– число , а ‘,b,’– строка .’)

0 – число, а Python from scratch – строка.

Еще один инструмент для передачи значений переменных на вывод – метод format. Print при этом выступает в качестве шаблона, в котором вместо имен переменных в фигурных скобках указываются индексы позиционных аргументов:

b = ‘Python from scratch’

print (‘ является числом, а – строкой.’. format ( a , b ))

0 является числом, а Python from scratch – строкой.

Вместо format может быть использован символ %, который работает по тому же принципу заполнителей (в предыдущем примере роль заполнителей выполняли фигурные скобки). В этом случае номера индексов заменяются типом данных, получаемым функцией:

  • заполнитель %d применяют для числовых данных;
  • заполнитель %s – для строк.

b = ‘Python from scratch’

print (‘% d является числом, а % s – строкой.’%( a , b ))

0 является числом, а Python from scratch – строкой.

Print() в Python. Синтаксис, ошибки, аргументы end и sep

Заключение

С помощью функции print могут быть реализованы различные варианты вывода данных. Помимо описанных в этой статье способов, существуют и другие возможности применения этого инструмента, которые станут доступны по мере углубления в мир программирования Python.

Favorite

Добавить в избранное

Основы Python. Как печатать на Python?

П ри распечатке чего-либо с использованием Python довольно часто допускают ошибки, если вы новичок в написании сценариев Python.

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

Итак, в этой статье мы объясним, как напечатать что-то на Python, и перечислим некоторые распространенные ошибки, которых вы можете избежать.

Как печатать на Python

По сути, это то, как вы вызываете функцию печати в Python:

Внутри скобок вам нужно будет передать аргументы (значения, которые вы обычно хотите передать через функцию или метод).

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

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

Лучше использовать двойные кавычки, потому что вы можете использовать одинарные кавычки в строке, поэтому во избежание путаницы и ошибок предпочтительнее использовать двойные кавычки.

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

Здесь возможные параметры/аргументы:

  • *objects – Вы можете иметь еще один объект
  • sep = ” – относится к параметру разделителя
  • end = ‘\ n’ – относится к конечному параметру
  • file = sys.stdout – файл в режиме записи, который печатает строку внутри него
  • flush = True – помогает очистить внутренний буфер

Ну, вот как вы печатаете что-то на Python – легко, правда?

Однако вам придется быть немного более осторожным при передаче аргументов различных типов (или объектов). Ниже мы приведем несколько примеров, чтобы вы могли больше узнать об этом.

1. Передача объектов с функцией print

Давайте рассмотрим простой пример:

Выход для этого будет:

Аналогично, вы можете расширить ту же программу другой переменной и распечатать ее, используя функцию печати следующим образом:

Выход будет такой:

Здесь, в приведенном выше примере, вы можете заметить, что при разделении объектов, которые вы передаете, в функции печати с помощью (запятая), которая автоматически добавляет пробел в выводе, также известный как функция мягкого пространства.

Но что, если вам не нужно пространство между ними или вы хотите отформатировать вывод – что еще вы можете сделать?

Не беспокойтесь, вы можете использовать разделитель и конечный параметр для достижения этой цели. Давайте посмотрим на это ниже.

2. Печать с использованием разделителя в Python

Аргумент separator ( sep = ‘separator’ ) в Python помогает форматировать вывод и потенциально удалять функцию программного пространства, как упомянуто выше.

Вот что вы должны сделать:

Таким образом, когда вы добавляете sep = ” в качестве другого аргумента в функции печати, он отключает функцию программного пространства и вывод будет выглядеть следующим образом:

Как вы можете заметить, после строки и цифры 2 нет места.

Разделители также могут пригодиться для печати дат, вот как это можно сделать:

Выход для этого будет:

Полезно, правда? Точно так же вы можете использовать параметр разделителя для дальнейшего форматирования вывода. Теперь, в дополнение к разделителю, вы также можете использовать параметр end, чтобы напечатать следующий вывод в новой строке.

3. Печать с использованием разделителя и конечного параметра

Стоит отметить, что параметр end помогает указать, что печатать в конце. Другими словами, он вводит новую строку для следующего вывода.

Вот пример кода для этого:

Как вы можете заметить, мы добавили три новые строки в конце первого вывода. Итак, вывод выглядит так:

Позвольте нам попробовать что-то еще вместо добавления трех новых строк. Взглянем:

Вывод будет такой:

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

4. Печать с параметром файла

Если вы знаете об операциях файлового ввода-вывода , вы можете легко передать параметр файла с помощью функции печати следующим образом:

Вы также можете добавить аргумент flush = True к приведенному выше коду перед закрытием файла – если вы этого хотите. Но это не обязательно.

Итог

Мы что-то здесь пропустили? Или вы исследовали что-то интересное при использовании функции print в Python? Позвольте нам знать в комментариях ниже.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Доброго дня на моем канале о программировании и программистах. Old Programmer всегда к вашим услугам.

Некоторые ссылки по моему каналу.

Стандартная функция print(). Полное описание

Структура аргументов функции print()

Основное предназначение функции print() - вывод на консоль. В действительности, как мы увидим далее, с тем же успехом функция может быть использована и для форматного вывода в текстовый файл.

Функция print() может содержать четыре группы параметров или не содержать параметры вовсе.

  • Без параметров функция print() просто выводит на консоль символ перевода строки. Т.е. следующий вывод начнется с новой строки. Вообще об этом свойстве print() следует всегда помнить. После вывода всего, что указано в print() всегда осуществляется перевод строки, если только не заменить символ перевода строи другим символом. Ниже мы разберем этот случай.
  • Первая группа параметров это данные которые нужно вывести на консоль или в файл. Объекты записываются через запятую. Слово "объекты" используются нами в прямом смысле, в котором употребляется этот термин в объектно-ориентированном программировании. А поскольку в python все является объектами, то выводить с помощью функции print можно все. Важно понимать получившийся результат.
  • Следующие три параметра являются именованными: sep - определяет разделитель для объекта из первой группы, end - определяет разделитель в конце выведенной группы объектов, file - описатель открытого файла, flush - с помощью этого параметра можно немедленно сбросить выводимые данные в файл.

Простейшее использование функции print()

Рассмотрим простой фрагмент программы на языке python.

В данном фрагменте функция print() выводит пять объекта, разного типа: целое число, число с плавающей точкой, строка. Результат работы фрагмента:

вывод на консоль 101 45.89 60.344 конец вывода

Обращаем внимание, что:

  1. По-умолчанию каждый выводимый объект отделяется друг от друга пробелом. Ниже мы увидим как самим определить разделитель между отдельными объектами.
  2. В конце выводимой строки (как я уже отметил) обязательно осуществляется перевод строки.

Заметим также, что функция print() понимает специальные символы. Например

print(r + '\n', a, b, 60.344, 'конец вывода')

сделает перевод строки после вывода первого параметра.

Функция print() может быть использована в цикле, например так

в результате получим

Как ранее говорилось, после каждого вывода осуществляется переход к следующей строке.

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

Мы знаем, что задать значение строковой переменной можно с помощью и двойных и одинарных кавычек. Например строки

s1 = "Это строка в языке Python"

s2 = 'Это строка в языке Python'

совершенно идентичны. Для это достаточно вывести их на консоль с помощью нашей функции print() .

Но и в самой функции print() можно использовать строковые константы определяя их вперемежку и двойными и одинарными кавычками.

print('Это первая строка,', "а это вторая")

результат выполнения, естественно

Это первая строка, а это вторая

Интересен вопрос, что если внутри выводимой строки будут кавычки, как с этим быть.

Предположим, мы хотим вывести строку

Название фильма "Путешествие на Марс"

Это можно сделать тремя способами (!)

print('Название фильма "Путешествие на Марс"')

print('Название фильма \"Путешествие на Марс\"')

print("Название фильма \"Путешествие на Марс\"")

Конечно, второй способ несколько избыточен, но имеет место быть.

Разделители между параметрами и в конце строки в функции print()

Вернемся к следующему фрагменту

При очередной итерации цикла вывод осуществляется с новой строки. А вот если мы хотим, чтобы вывод осуществлялся одной строкой, то необходимо использовать параметр end .

Мы задали разделитель в конце каждого вывода функции print() . В результате получим числа, отделенные друг от друга пробелом

Разделитель это строка с любым набором символов. Например print(i, ';\n') приведет к

Если в функции print() сразу выводятся несколько параметров, для определения разделителя между ними используется ключевое слово sep . Например, так

вывод на консоль***101***45.89***60.344***конец вывода

В случае, если у нас несколько функций print() или print() используется в цикле, то удобно применить sep и end вместе.

в результате получим

1/10/100;
2/20/200;
3/30/300;
4/40/400;

Вывод коллекций с помощью функции print()

В случае коллекций, мы конечно, можем использовать те возможности, которые мы уже знаем. Например так

В результате получаем

1: 100;
2: 101;
3: 1000;
4: 1001;
5: 0;

Символ '\t' обозначает символ табуляции.

Но для вывода элементов можно использовать и специальный подход.

в результате получаем

100 101 1000 1001 0

Т.е. мы легко обошлись без цикла и вывели все элементы списка. Для вывода же каждого элемента в отдельной строке запишем просто

100
101
1000
1001
0

Вывод в текстовый файл с помощью функции print()

./program > file.txt

но можно работать и непосредственно с открытым файлом. Следующий фрагмент

создает файл с содержимым

1/10/100;
2/20/200;
3/30/300;
4/40/400;

Параметр flush в данном случае указывает, что каждая строка должна записываться в файл сразу, минуя буфер. По умолчанию flush=False .

Закончив повествование, подумал, что все таки не совсем полное описание получилось. Например, как выводит print() разные объекты. Но это скорее важно для отладки или для изучения языка python. А моя статья о том, что непосредственно используется в программах. Так что не буду ничего менять.

До скорой встречи на моем канале Old Programmer . Канале о программировании и программистах. Пишите комментарии, ставьте лайки и подписывайтесь.

При разработке программ постоянно используется вывод данных в консоль. Например, при тестировании функций программы, которая ещё не обзавелась графическим интерфейсом, или как средство нахождения ошибок и отладки кода.

Python предоставляет программисту инструменты, позволяющие не просто выводить данные в консоль, но и форматировать их.

Функция print и её параметры

Функция print() включена в стандартную библиотеку языка Python, как основной инструмент для вывода данных в консоль или любое другое устройство (экран, принтер и так далее).

Программист может настраивать вывод данных, используя аргументы функции:

*objects

Это данные, которые выводятся на экран. Программист передает в функцию сколько угодно объектов, которые автоматически преобразуются в строковый формат и направляются в поток вывода.

Передавая объекты в функцию, программист может их передавать через запятую или использовать конкатенацию. Передача нескольких аргументов не приведёт к конфликту между *objects и другими необязательными аргументами, потому что интерпретатор автоматически распознаёт остальные параметры по ключевому слову (sep, end, file, flush)!

Вот пример:

Вот пример:

Вот пример скрипта на Python, который откроет файл temp.txt и запишет в него текст с помощью функции print:

flush

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

Форматированный вывод

Для того чтобы выведенную в консоль информацию можно было без проблем прочитать и понять, она должна быть форматирована. Python предоставляет программисту инструменты, позволяющие форматировать вывод в консоль разными способами. С их помощью можно даже создать ровную и читаемую таблицу.

Оператор %

Оператор % часто используется для форматирования и хорошо известен не только программистам на Python, но и программистам на C/С++. По сути, оператор % — это метка, вместо которой подставляется значение переменной или выражение. Оператор % размещается непосредственно в выводимой строке, а подставляемые значения — в кортеже после второго %. Пример:

Помимо символа % указывается тип значения, а также, по желанию, длина и точность. Синтаксис выглядит так:

Если рассмотреть пример, можно увидеть, что:

Метод format

Подставляемые значения указываются в кортеже после ключевого слова format. Их можно указывать как позиционно, так и присваивать по имени. Пример:

Метод format также позволяет форматировать числа, то есть указывать их ширину и точность:

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

Строковый метод

Вывод с помощью строкового метода формируется с использованием операций среза и методов строк. Для работы со строковым типом данных создано несколько методов, которые позволяют просто и изящно форматировать вывод, среди них методы: ljust() , rjust() , center() .

centre()

Эта функция выравнивает строку по центру в соответствии с указанной шириной, заполняя недостающую ширину пробелами. Она имеет следующий синтаксис:

Здесь:

  • str — это строка, которую будем центрировать.
  • len – это ширина строки.
  • fillchr — символ, которым заполняется недостающее пространство (по умолчанию — пробел).

Пример:

Важно понимать, что функция располагает текст не в центре консоли, а в центре поля указанной ширины (в примере это 50 символов).

Если поменять символ заполнения, получится следующее:

ljust()

Метод работает аналогично centre() , только выравнивает текст не по центру, а по левому краю. То есть недостающие символы дополняются не с двух сторон, а только с правой.

rjust()

Метод работает аналогично centre() , но выравнивает текст по правому краю. То есть символы дополняются только с левой стороны.

f-строки

Поля заданной ширины

Установка ширины полей работает так:

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

Примеры

С помощью форматированного вывода можно полностью настроить любой вывод в консоль, например:

Вывод ошибки

Вывод списка

Ниже пример того как выводится список в одну строку:

Если нужно перечислить элементы списка в столбик с указанием порядковых номеров, то это можно сделать следующим образом:

Вывод массива

Здесь выводим массив построчно с указанием номеров элементов.

Вывод словаря

Здесь приведём два варианта для словарей.

Простой вариант:

В виде таблицы:

Вывод матрицы

Сложность в выводе матрицы состоит в том, что из-за разных длин чисел элементы столбца будут стоять не друг под другом, а со смещением. С помощью форматирования можно решить эту проблему.

Здесь мы создали матрицу в виде двумерных списков, но если вы работаете с матрицами с помощью библиотеки NumPy, то там вывод в консоль форматируется автоматически.

Python – универсальный и гибкий язык. Часто в нем есть несколько способов добиться какой-либо цели. В этом руководстве мы разберем несколько способов вывести строку и переменную одновременно.

Итак, давайте начнем!

Как использовать функцию print() в Python

Чтобы вывести что-либо на экран, мы используем функцию print() . Пишем ключевое слово print , за которым следует пара круглых скобок () . Внутри этих скобок мы помещаем то, что хотим распечатать. Это выглядит следующим образом:

Если вы пишете код в специальном редакторе или IDE, например, в Visual Studio Code с расширением Python, ошибка типа пропущенных скобок сразу будет подчеркнута. Вы также получите подсказку о том, что именно не так в вашем коде:


Как упоминалось выше, print() используется для вывода данных самых разных типов. Вы можете вывести строки, числа, переменные и другие типы данных.

Вы также можете выводить в одной инструкции print() и текст (или строки), и переменные .

В следующих разделах мы разберем несколько способов справится с этой задачей.

Лаборатория Django-разработки

За 3 месяца отработай навыки Django-разработки до профессионального уровня на серьезном проекте под руководством наставника.

Как вывести переменную и строку в Python с помощью конкатенации

Если мы обратимся к словарю, то узнаем, что слово конкатенация означает объединение, связывание чего-либо в одну цепочку или ряд.

В Python мы объединяем данные друг с другом при помощи оператора сложения (+).

Имейте в виду, что конкатенация используется только для строк. Поэтому, если переменная, которую вы хотите объединить с остальными строками, имеет, к примеру, целочисленный тип данных, вам придется преобразовать ее в строку с помощью функции str() .

В следующем примере давайте выведем значение переменной вместе с каким-нибудь другим текстом.

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

При конкатенации строк вам нужно добавлять пробелы самостоятельно. Поэтому, если бы в предыдущем примере мы не включили пробелы в кавычки, результат выглядел бы следующим образом:

Вы даже можете добавить пробелы отдельно:

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

Как вывести переменную и строку в Python, разделив их запятыми

Вы можете указать строку и переменную в качестве аргументов функции print() , просто перечислив их через запятую. К примеру, можно сделать следующим образом:

После закрывающей кавычки мы добавили запятую, которая отделяет этот фрагмент текста от значения, содержащегося в имени переменной ( first_name ). После этого мы добавили саму переменную.

Мы могли бы добавить ещё какой-нибудь текст после переменной, например так:

Этот метод также работает с более чем одной переменной:

Обязательно разделяйте все аргументы функции print() запятыми!

Если бы между first_name и last_name не была добавлена ​​запятая, код выдал бы следующую ошибку:

Выводим переменную и строку с использованием форматирования строк

Чтобы использовать форматирование строк, нужно добавить пару фигурных скобок <> в то место, где вы хотите добавить значение переменной. Это выглядит следующим образом:

В данном примере есть одна переменная – first_name .

Внутри print() в качестве аргумента передана строка, котрую мы хотим вывести. Строка берется в двойные кавычки. А внутри строки мы добавили пару фигурных скобок в том месте, где хотим добавить значение переменной first_name .

Если мы попытаемся запустить данный код, он будет иметь следующий результат:

Как мы видим, значение переменной first_name не вывелось!

Если у вас больше одной переменной, вы используете столько пар фигурных скобок, сколько у вас переменных:

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

Что касается метода .format() , важно понимать, что здесь имеет значение порядок, в котором вы помещаете имена переменных внутрь метода.

На место первой пары фигурных скобок будет вставлено значение той переменной, имя которой вы указали в методе format() первым. На место второй пары фигурных скобок встанет значение второй указанной переменной.

Внутри метода обязательно разделяйте имена переменных запятыми:

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

Как вывести переменную и строку с помощью f-строк

f-строки – лучший, более читаемый и лаконичный способ форматирования строк по сравнению с методом, который мы видели в предыдущем разделе.

Его синтаксис проще и требует меньше ручной работы.

Общий синтаксис для создания f-строки выглядит следующим образом:

Перед открывающими кавычками внутри функции print() добавляется буква f/

Чтобы напечатать переменную со строкой в ​​одном операторе print() , вы снова включаете символ f в то же место – прямо перед кавычками.

Затем вы добавляете нужный текст, а в том месте, где нужно вставить значение переменной, вы добавляете пару фигурных скобок <> с именем переменной внутри них. После этого можно добавить еще текст и закрыть кавычки (или просто закрыть кавычки). Вот так это должно выглядеть:

Чтобы напечатать больше одной переменной, вы добавляете еще один набор фигурных скобок со вторым именем переменной:

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

Если бы мы изменили порядок имен, мы бы получили следующий результат:

Заключение

Спасибо, что дочитали до конца! Теперь вы знаете, как вывести одновременно строку и переменную в одной строке.

Надеемся, что данная статья была вам полезна. Успехов в написании кода!

Лаборатория Django-разработки

За 3 месяца отработай навыки Django-разработки до профессионального уровня на серьезном проекте под руководством наставника.

Читайте также: