Tar — один из наиболее распространённых архиваторов в Linux системах. Но tar не сжимает файлы в архиве. Tar всего лишь упаковывает файлы в архив без компрессии. Для сжатия tar умеет работать в паре с bzip2 или gzip. В статье приведено описание способов применения tar. Читать
Архив метки: Программирование
Настройка NGINX. Вывод переменных
Одной из самых непостижимых областей для меня остаётся nginx. Точнее его настройка/программирование. Но жизнь вынуждает изучить этот инструмент, который значительно снижает нагрузку на сервер. Читать
Программирование на Go
Несмотря на то что Go — это еще очень молодой язык, он уже используется во многих очень важных системах интернета и его область применения будет расти. Поэтому изучение программирования на Go — это одна из лучших инвестиций для программиста на данный момент. В этой статье мы сделаем небольшое введение в программирование на Go.
Конечно, сложно охватить программирование go полностью в одной статье, но вы узнаете основы, которые помогут вам в дальнейшем. Но перед тем как перейти к рассмотрению языка, давайте поговорим про историю его развития и структуру. Статья рассчитана в первую очередь на тех, кто уже знает какой-либо Си подобный язык программирования, поэтому новичкам материал может показаться сложным, но им тоже может быть полезно. Я не говорю, что программирование на Go с нуля невозможно, просто для этого нужна более подробная литература.
История развития Go
Язык Go элегантен и прагматичен, но некоторые его особенности имеют смысл только под определенным историческим контекстом. История Go начинается с Си. Во многих отношениях Си стал основой для создания JavaScript, Ruby, Python, C++, C# и Java. Компиляторы или интерпретаторы некоторых из этих языков даже написаны на Си. Влияние Си легко заметить во многих языках. Он был разработан Денисом Ритчи для создания ядра Unix и потом использовался для создания ядра Linux.
Язык Go был создан легендами эпохи Unix и Си. Работая в Google, Роберт Грисемер, Роб Пайк и Кен Томпсон были разочарованы в Си-языках из-за их проблем. Бъярн Страуструп, создатель C++ говорил так: «Си позволяет легко выстрелить себе в ногу, в C++ это сложнее, но если вы все же выстрелите, то взорвете ногу целиком».
Go наследует много хорошего от Си. Ключевые слова и сила синтаксиса, процедурный подход — это сильные стороны обоих языков. С другой стороны, ручное управление памятью и время компиляции — это проблема Си. Go решает эти проблемы с помощью сборки мусора, безопасной работы с памятью и очень быстрой компиляции.
Язык Java выбирают многие крупные компании с большими командами разработчиков. Go перенимает и этот плюс у Java и пытается быть отличным языком для больших групп разработчиков. Язык Go не имеет таких недостатков объективно ориентированного программирования, как наследование. Все реализуется с помощью лаконичного синтаксиса интерфейсов.
Также можно найти определенное сходство с динамическими языками, Go перенимает стиль написания кода у Python, настраиваемость у Ruby и простой параллелизм, вшитый в ядро языка, как у Node.js. Все начиналось, как язык, решающий некоторые проблемы Си и выросло в прекрасный язык программирования общего назначения.
Программирование на Go
Перед тем как мы перейдем к примерам написания программ, хотелось бы немного поговорить про синтаксис языка.
1. Синтаксис языка Go
Самое главное о чем стоит сказать — это структура программы. Она чем-то похожа на Java и Python. Программа разделяется на так называемые пакеты Package, которые можно рассматривать как альтернативу include или модулей в Python. В дополнение package позволяют настраивать области видимости для переменных. Импортируется пакет в программу с помощью инструкции import:
import имя_пакета
Любая программа будет иметь переменные. Go — это язык со строгой типизацией, поэтому каждую переменную перед использованием нужно объявить и указать ее тип:
var имя_переменной тип
В именах переменных можно использовать русский язык. Но если сразу задать переменной значение, то язык сам определит ее тип:
var имя_переменной := значение
Вы также можете создавать указатели. Для этого просто добавьте звездочку перед именем переменной:
var *имя_переменной тип
Чтобы получить доступ к переменной, которая была объявлена внутри package из другого package важно заметить, что доступны извне только переменные, написанные с большой буквы:
имя_пакета.имя_переменной
имя_пакета.имя_функции
Основные управляющие инструкции очень схожи по своему синтаксису с привычными в Си:
if условие {
действия
}
Цикл for тут точно такой, как и в Си, только без круглых скобок, так выглядит даже проще:
for i := 0; i <= ограничитель; i++ {
действия
}
Функции golang объявляются с помощью директивы func, и в ней можно указать не только параметры, но и возвращаемые переменные:
func имя_функции (принимаемые переменные) (возвращаемые переменные) {
действия
}
Важно заметить, что точка с запятой после строк не ставиться. Вместо ООП классов в Go используются структуры, которые могут иметь поля и методы, а также могут реализовать интерфейсы. Чтобы объявить структуру используется инструкция type:
type имя_структуры struct {
имя_поля тип_поля
}
Кроме полей, структуры могут иметь методы, что позволяет использовать их в качестве классов. Объявление метода немного отличается от функции golang:
func (имя_указателя *тип_структуры) имя_метода() {
действия
}
Создание объектов структур происходит так же, как и обычных переменных, а обращаться к их полям можно через точку:
имя_объекта.имя_метода(параметры)
К полям мы тоже обращаемся через точку:
имя_объекта.имя_поля
Теперь вы знаете основы языка и пришло время перейти ближе к практике. Дальше будет программирование на Go и примеры Golang, минимум теории.
2. Создание Hello World
Напишем нашу первую программу, как принято, это будет программа, которая выводит на экран строчку «Привет мир!». Вы можете установить Go в свою систему или же воспользоваться онлайн сервисом play.golang.org, который позволяет выполнять программы прямо в браузере. Мы будем работать с онлайн сервисом.
При открытии сайта вы увидите уже готовый код первой программы:
Как видите, синтаксис почти соответствует тому, что мы рассматривали ранее. В первой строке мы указываем, что этот файл относиться к пакету main, во второй импортируем пакет fmt, отвечающий за стандартные функции ввода и вывода. Скобки здесь нужны чтобы за один раз импортировать несколько пакетов, можно просто добавить имена через запятую.
Дальше объявляется функция main, которая будет выполнена при запуске программы. Каждая программа на Go должна содержать функцию main. В динамических языках выполнение скрипта начинается от верха файла вниз. В Go выполнение начинается с функции main, так называемой точки входа.
Внутри функции main мы вызываем функцию библиотеки fmt, которую импортировали ранее с помощью синтаксиса точки. Метод printLn выводит строчку на экран.
Для языка Go был принят определенный синтаксис. Даже если компилятор не будет выдавать ошибок из-за несоответствия, его лучше соблюдать. Для имен переменных принято использовать верблюжий синтаксис, то есть FooBar или Foobar вместо foo_bar. А также обратите внимание, что Go не терпит никаких символов перед открывающей скобкой. Даже если поставить перевод строки, вы получите ошибку:
Также в Go стандартизированы отступы, хотя здесь нет таких требований, как в Python.
3. Основы языка Go
Рассмотрим работу с переменными и структурами. Это будет полезно начинающим пользователям. Как я уже говорил, язык имеет статическую типизацию. В Python, Ruby или JavaScript нужно выполнять множество проверок на правильность. Go избавляет от этой проблемы. Например, усложним наш предыдущий пример:
В этом примере, за вывод отвечает новая функция — print. Здесь явно указано, что ей нужно передать строку (string). А в функции main мы создаем переменную типа string и передаем ее в print. Если передать что-то другое, получим ошибку. Если, например, вы поменяете тип переменной на int, то получите это:
Также вы получите ошибку, если объявили переменную или импортировали пакет, но не используете его. Существует еще множество вещей, которые можно сделать с помощью Go, одна из них — это структуры. Давайте еще больше усложним нашу программу, создадим структуру site, с полями name и url, которая будет описывать какой-либо сайт:

В структуры будет метод print, который выводит строку «Добро пожаловать…». В методе main мы инициализировали структуру и присвоили ее полям значения, а затем вызвали метод print.
Язык программирования Go имеет еще множество интересных особенностей и возможностей. И до большинства из них мы даже не приблизились. Если вы хотите научиться плавать, вам надо прыгать в воду. Только благодаря практике вы сможете свободно применять этот язык.
Выводы
Программирование на Go может стать будущим разработки. Это прекрасный язык, который набрал популярность за относительно короткий период времени. Надеюсь, информация из этой статьи была полезной для вас и теперь вам будет легче освоить этот язык.
https://www.youtube.com/watch?v=nI8YJSKjOSY
Программирование под Linux
Все действия в операционной системе выполняются с помощью программ, поэтому многим новичкам интересно не только использовать чужие программы, а писать свои. Многие хотят внести свой вклад в кодовую базу OpenSource.
Это обзорная статья про программирование под Linux. Мы рассмотрим какие языки используются чаще всего, рассмотрим основные понятия, а также возможности, разберем как написать простейшую программу на одном из самых популярных языков программирования, как ее вручную собрать и запустить.
1. На чем пишут программы?
Исторически сложилось так, что ядро Unix было написано на языке Си. Даже более того, этот язык был создан для написания ядра Unix. Поскольку ядро Linux было основано на ядре Minix (версии Unix), то оно тоже было написано на Си. Поэтому можно сказать, что основной язык программирования для Linux это Си и С++. Такая тенденция сохранялась на протяжении долгого времени.
А вообще, писать программы для Linux можно почти на любом языке начиная от Java и Python и заканчивая С# и даже Pascal. Для всех языков есть компиляторы и интерпретаторы. Писать программы на С++ сложно, а Си многими уже считается устаревшим, поэтому множество программистов используют другие языки для написания программ. Например, множество системных инструментов написаны на Python или Perl. Большинство программ от команды Linux Mint, установщик Ubuntu и некоторые скрипты apt написаны на Python. Множество скриптов, в том числе простые скрипты оптимизации написаны на Perl. Иногда для скриптов используется Ruby. Это скрипты OpenShift или, например, фреймворк Metasploit. Некоторые разработчики кроссплатформенных программ используют Java. Но основные компоненты системы написаны все же на Си.
Мы не будем рассматривать основы Си в этой статье. Си — сложный язык и вам понадобится прочитать как минимум одну книгу и много практиковаться чтобы его освоить. Мы рассмотрим как писать программы на Си в Linux, как их собирать и запускать.
Зачем учить Си:
2. Библиотеки
Естественно, что если вам необходимо вывести строку или изображение на экран, то вы не будете напрямую обращаться к видеокарте. Вы просто вызовете несколько функций, которые уже реализованы в системе и передадите им данные, которые нужно вывести на экран. Такие функции размещаются в библиотеках. Фактически, библиотеки — это наборы функций, которые используются другими программами. В них находится такой же код, как и в других программах, разница лишь в том, там необязательно присутствие функции инициализации.
Библиотеки делятся на два типа:
- Статические — они связываются с программой на этапе компиляции, они связываются и после этого все функции библиотеки доступны в программе как родные. Такие библиотеки имеют расширение .a;
- Динамические — такие библиотеки встречаются намного чаще, они загружены в оперативную память, и связываются с программной динамически. Когда программе нужна какая-либо библиотека, она просто вызывает ее по известному адресу в оперативной памяти. Это позволяет экономить память. Расширение этих библиотек — .so, которое походит от Shared Object.
Таким образом, для любой программы на Си нужно подключать библиотеки, и все программы используют какие-либо библиотеки. Также важно заметить, на каком языке бы вы не надумали писать, в конечном итоге все будет сведено к системным библиотекам Си. Например, вы пишите программу на Python, используете стандартные возможности этого языка, а сам интерпретатор уже является программой на Си/С++, которая использует системные библиотеки для доступа к основным возможностям. Поэтому важно понимать как работают программы на Си. Конечно, есть языки, вроде Go, которые сразу переводятся на ассемблер, но там используются принципы те же, что и здесь. К тому же системное программирование linux, в основном, это Си или С++.
3. Процесс сборки программы
Перед тем как мы перейдем к практике и создадим свою первую программу, нужно разобрать как происходит процесс сборки, из каких этапов он состоит.
Каждая серьезная программа состоит из множества файлов, это файлы исходников с расширением .c и заголовочные файлы с расширением .h. Такие заголовочные файлы содержат функции, которые импортируются в программу из библиотек или других файлов .с. Перед тем. как компилятор сможет собрать программу и подготовить ее к работе, ему нужно проверить действительно ли все функции реализованы, доступны ли все статические библиотеки и собрать ее в один файл. Поэтому, первым делом выполняется препроцессор, который собирает исходный файл, выполняются такие инструкции, как include для включения кода заголовочных файлов.
На следующем этапе к работе приступает компилятор, он выполняет все необходимые действия над кодом, разбирает синтаксические конструкции языка, переменные и преобразовывает все это в промежуточный код, а затем в код машинных команд, который мы можем потом посмотреть на языке ассемблера. Программа на этом этапе называется объектный модуль и она еще не готова к выполнению.
Далее к работе приступает компоновщик. Его задача связать объектный модуль со статическими библиотеками и другими объектными модулями. Для каждого исходного файла создается отдельный объектный модуль. Только теперь программа может быть запущена.
А теперь, давайте рассмотрим весь єтот процесс на практике с использованием компилятора GCC.
4. Как собрать программу
Для сборки программ в Linux используется два типа компиляторов, это Gcc и Clang. Пока что GCC более распространен, поэтому рассматривать мы будем именно его. Обычно, программа уже установлена в вашей системе, если же нет, вы можете выполнить для установки в Ubuntu:
sudo apt install gcc
Перед тем как мы перейдем к написанию и сборке программы, давайте рассмотрим синтаксис и опции компилятора:
$ gcc опции исходный_файл_1.с -o готовый_файл
С помощью опций мы говорим утилите что нужно сделать, какие библиотеки использовать, затем просто указываем исходные файлы программы. Давайте рассмотрим опции, которые будем сегодня использовать:
- -o — записать результат в файл для вывода;
- -c — создать объектный файл;
- -x — указать тип файла;
- -l — загрузить статическую библиотеку.
Собственно, это все самое основное, что нам понадобится. Теперь создадим нашу первую программу. Она будет выводить строку текста на экран и чтобы было интереснее, считать квадратный корень из числа 9. Вот исходный код:
include <stdio.h>
#include <math.h>
int main(){
printf(«losst.pron»);
printf(«Корень: %fn», sqrt(9));
return 0;
}
Я специально добавил функцию корня чтобы показать как работать с библиотеками. Сначала нужно собрать объектный файл. Перейдите в папку с исходниками и выполните:
gcc -c program.c -o program.o
Это этап компиляции, если в программе нет ошибок, то он пройдет успешно. Если исходных файлов несколько, то такая команда выполняется для каждого из них. Далее выполняем линковку:
gcc -lm program.o -o program
Обратите внимание на опцию -l, с помощью нее мы указываем какие библиотеки нужно подключить, например, здесь мы подключаем библиотеку математических функций, иначе компоновщик просто не найдет где есть та или иная функция. Только после этого можно запустить программу на выполнение:
./program
Конечно, все эти действия могут быть выполнены и с помощью различных графических сред, но выполняя все вручную, вы можете лучше понять как все работает. С помощью команды ldd вы можете посмотреть какие библиотеки использует наша программа:
ldd ./program
Это две библиотеки загрузчика, стандартная libc и libm, которую мы подключили.
5. Автоматизация сборки
Когда мы рассматриваем программирование под Linux невозможно не отметить систему автоматизации сборки программ. Дело в том, что когда исходных файлов программы много, вы не будете вручную вводить команды для их компиляции. Можно записать их один раз, а затем использовать везде. Для этого существует утилита make и файлы Makefile. Этот файл состоит из целей и имеет такой синтаксис:
цель: зависимости
<Tab> команда
В качестве зависимости цели может быть файл или другая цель, основная цель — all, а команда выполняет необходимые действия по сборке. Например, для нашей программы Makefile может выглядеть вот так:
program: program.o
gcc -lm program.o -o program
program.o: program.c
gcc -c program.c -o program.o

Затем вам достаточно выполнить команду make для запуска компиляции, только не забудьте удалить предыдущие временные файлы и собранную программу:
make
Программа снова готова и вы можете ее запустить.
Выводы
Создание программ Linux очень интересно и увлекательно. Вы сами убедитесь в этом, когда немного освоитесь в этом деле. Сложно охватить все в такой небольшой статье, но мы рассмотрели самые основы и они должны дать вам базу. В этой статье мы рассмотрели основы программирования в linux, если у вас остались вопросы, спрашивайте в комментариях!
Возможно, вам также будут интересны 5 онлайн сервисов для изучения программирования.
Курс программирования на Си под Linux:
Как создать Snap пакет Ubuntu 16.04
Технология Snap разработанная в Canonical для облегчения установки программного обеспечения в дистрибутиве Ubuntu появилась совсем недавно. Она разрабатывалась на протяжении последних нескольких лет, но только к релизу Ubuntu 16.04 стала более-менее готова к использованию широкой аудиторией.
Основное преимущество Snap, это возможность установки программ без зависимостей. Все необходимые программе библиотеки находятся уже в пакете с программой и для ее запуска ничего не требуется от системы. При обновлении вам достаточно обновить один snap пакет, не обновляя всю систему, а при сбоях и ошибках можно откатить пакет до предыдущей версии. Сейчас ходит много споров по поводу того действительно ли хороша технология snap или нужно от нее отказаться в пользу deb пакетов. Но все это покажет время и тестирование, а в этой статье мы рассмотрим создание snap пакетов. Тем более, что создавать их немного проще, чем те же самые deb пакеты.
Создание Snap пакетов в Ubuntu 16.04
Чтобы создать snap пакет мы будем использовать специальный инструмент — Snapcraft. Это официальный инструмент для создания snap пакетов, который позволяет разработчику упаковывать программы собирая необходимые файлы по всей системе. Snapcraft позволяет не только копировать файлы, но и скачивать исходники и собирать программу.
В этой статье мы рассмотрим как создавать snap пакеты на примере небольшого приложения Samplenote.
Сначала нам нужно установить Snapcraft. Чтобы получить самую новую версию добавим к нашей системе PPA:
sudo add-apt-repository ppa:snappy-dev/tools
Теперь обновим список пакетов и установим программу:
sudo apt-get update
$ sudo apt-get install snapcraft
Когда завершится установка Snapcraft можно переходить к получению исходников программы. Сначала скачаем исходники из GitHub и распакуем их:
wget https://github.com/Automattic/simplenote-electron/releases/download/v1.0.1/Simplenote-linux-x64.1.0.1.tar.gz
$ tar xvzf Simplenote-linux-x64.1.0.1.tar.gz
Поскольку программу не нужно компилировать наша задача немного облегчается. Переходим в папку с программой и инициализируем там окружение сборки Snapcraft:
cd Simplenote-linux-x64
snapcraft init
После выполнения последней команды, в папке появится файл snapcraft.yml. С помощью редактирования этого файла мы и настроим процесс создания нашего пакета snap. Нам понадобится файл такого содержания:
Первые четыре строчки — это информация о самом пакете, название программы, версия и краткое и полное описание.
Command — это команда запуска программы, мы будем использовать скрипт warpper, потому, что нам нужно указать дополнительные переменные окружения.
plugs — это интерфейсы, которые может использовать программа. Дело в том, что программы snap работают в изолированной среде, откуда они не могут получить доступ к оборудованию и персональным данным. Чтобы наша программа могла нормально работать ей нужно дать доступ к интерфейсу opengl, unity7 и network.
Посмотреть доступные интерфейсы, и программ, которые их используют можно выполнив команду:
snap interfaces
В разделе parts мы указываем сами файлы программы. А если точнее, то что нужно сделать snapcraft при создании пакета. Поскольку нам ничего компилировать не нужно, мы будем использовать плагин copy, для копирования файлов. Файлы, которые нужно скопировать, перечислены в разделе files. Там есть не только исполняемые файлы, но и все необходимые библиотеки, так что программа получит все необходимые ей компоненты.
Формат записи такой:
Есть одна нестандартная запись:
Символ подстановки * позволяет скопировать весь каталог. Чтобы не копировать все файлы из системы, мы можем в секции site-packages сказать программе, какие пакеты следует установить в пакет snap, в нашем случае это libnss3 , fontconfig-config и gnome-themes-standard.
Чтобы посмотреть какие библиотеки использует программа, можно воспользоваться командой:
Обратите внимание, эти библиотеки поставляются вместе с программой, а поэтому нам нужно прописать их в конфигурационном файле snapcraft.yaml. Все остальные библиотеки доступны в системе и будут обнаружены snapcraft автоматически.
Далее создадим файл wrapper:
!/bin/sh
export FONTCONFIG_PATH=$SNAP/etc/fonts
export FONTCONFIG_FILE=$SNAP/etc/fonts/fonts.conf
export XDG_DATA_HOME=$SNAP/usr/share
export LD_LIBRARY_PATH=$SNAP_LIBRARY_PATH:$SNAP/usr/lib/x86_64-linux-gnu/
exec "$SNAP/Simplenote" "$@"
Здесь нет ничего сложного, обычный скрипт на Bash. Мы устанавливаем пути для шрифтов, и указываем программе где нужно искать библиотеки, чтобы libnote.so и libffmpeg.so были успешно найдены. А последняя строка запускает на выполнение simplenote.
Дальше осталось сделать этот файл исполняемым:
chmod +x wrapper
Для начала сборки пакета выполните:
snapcraft
Сборка может занять кое-какое время, а после завершения сборки вы сможете установить пакет:
sudo snap install simplenote_1.0.1_amd64.snap
Для запуска программы вы можете воспользоваться обычной командой:
simplenote
Вот и все, программа установлена и работает. Точно такой же способ создания snap пакетов вы можете использовать для упаковки своих программ.
Выводы
Несмотря на то, что snap довольно спорная технология, ее уже используют многие разработчики программ, в том числе разработчики популярного браузера Firefox. Если вы разрабатываете свое программное обеспечение, то вполне можете создать snap пакеты. Учитывая, что snap скоро будет поддерживать и другие дистрибутивы, то это вполне неплохая затея. Более подробную информацию вы можете получить в официальной документации по snapcraft.
Майкл Доусон — Программируем на Python, ответы на 5-ую главу…
Задача №1
- # coding=utf-8
- # Создайте программу, которая будет выводить список слов в случайном порядке.
- # На экране должны печататься без повторений все слова из представленного списка.
- import random
- print(«Введите 4 слова для демонстрации программы:»)
- a = input(«Первое слово: n«)
- b = input(«Второе слово: n«)
- c = input(«Третье слово: n«)
- d = input(«Четвертое слово: n«)
- WORDS = [a, b, c, d]
- print(«nИзначальный список:n«, WORDS)
- # Эта функция не упоминалась в главе, но чтобы не писать лишнего, лучше заменим строчки этим:
- random.shuffle(WORDS)
- print(«nСписок в случайном порядке:n«, WORDS)
- input(«nНажмите Enter, чтобы выйти…»)
Задача №2
- «»» coding=utf-8
- Напишите программу «Генератор персонажей» для ролевой игры.
- Пользователю должно быть предоставлено 30 пунктов,которые можно
- распределить между четырями характеристиками: Сила, Здоровье,
- Мудрость и Ловкость. Надо сдлать так, чтобы пользователь мог
- не только брать эти пункты из общего»пула», но и возвращать их туда из
- характеристик, которым он решит присвоить другие значения.»»»
- «»» Также, хоть это и не требуется в задании, мы будем требовать
- от игрока, чтобы он улаживался в отведенные 30 очков и использовал их все.
- Также, только после окончания задания заметил, что 5 глава была
- про списки и словари, соответственно, автором, скорей всего,
- подразумевалось, что здесь должны использоваться словари.
- Переделывать или писать вторую версию с использованием словаря
- не буду, так как считаю, что алгоритм решения ясен.Даже будет короче.
- А в следующей главе изучите функции и попробуйте сделать это задание,
- сипользуя функции. И вы удивитесь, насколько сократится код.
- Но, следуя согласно книге, подразумевается, что мы пока не знаем о них.»»»
- # Объяснение условий игроку.
- print(«»»Вам будут представлены изначальные характеристики героя: Сила, Здоровье, Мудрость и Ловкость.
- Вам нужно будет, как в ролевой игре, распределить 30 очков между навыками»»»)
- # Объявляем переменные.
- strength = 0
- health = 0
- wisdom = 0
- agility = 0
- choice = None
</li >
- global_choice = None
- while global_choice != 0:
- # Вывод актуальной таблицы после действия.
- ost_points = (30 — strength — health — wisdom — agility)
- print(«Таблица характеристик на данный момент: n«
- «ttt1. Сила:», strength, «n«
- «ttt2. Здоровье:», health, «n«
- «ttt3. Мудрость:», wisdom, «n«
- «ttt4. Ловкость:», agility, «nn«
- «tttСвободное количество очков:», ost_points, «n«)
- # Первый выбор
- print(«Что вы хотите сделать сейчас?n«
- «ttt1. Добавить очки в одну из характеристик.n«
- «ttt2. Убрать очки из характеристики.n«
- «ttt3. Закончить распределиние очков.n«)
- global_choice = int(input())
- if global_choice == 1:
- print(«В какую из характеристик вы хотите добавить очки?n«
- «ttt1. Сила.n«
- «ttt2. Здоровье.n«
- «ttt3. Мудрость.n«
- «ttt4. Ловкость.n«)
- choice = int(input())
- if choice == 1:
- print(«Сколько очков вы хотите добавить?n«)
- scores = int(input())
- if scores >= 0 and scores <= ost_points:
- strength += scores
- else:
- print(«Недопустимое количество очков.n«)
- elif choice == 2:
- print(«Сколько очков вы хотите добавить?n«)
- scores = int(input())
- if scores >= 0 and scores <= ost_points:
- health += scores
- else:
- print(«Недопустимое количество очков.n«)
- elif choice == 3:
- print(«Сколько очков вы хотите добавить?n«)
- scores = int(input())
- if scores >= 0 and scores <= ost_points:
- wisdom += scores
- else:
- print(«Недопустимое количество очков.n«)
- elif choice == 4:
- print(«Сколько очков вы хотите добавить?n«)
- scores = int(input())
- if scores >= 0 and scores <= ost_points:
- agility += scores
- else:
- print(«Недопустимое количество очков.n«)
- # Второй выбор
- elif global_choice == 2:
- print(«Из какой характеристики вы хотите убрать очки?n«
- «ttt1. Сила.n«
- «ttt2. Здоровье.n«
- «ttt3. Мудрость.n«
- «ttt4. Ловкость.n«)
- choice = int(input())
- if choice == 1:
- print(«Сколько очков вы хотите убрать?n«)
- scores = int(input())
- if scores >= 0 and (strength — scores) >= 0:
- strength —= scores
- else:
- print(«Недопустимое количество очков.n«)
- elif choice == 2:
- print(«Сколько очков вы хотите убрать?n«)
- scores = int(input())
- if scores >= 0 and (health — scores) >= 0:
- health —= scores
- else:
- print(«Недопустимое количество очков.n«)
- elif choice == 3:
- print(«Сколько очков вы хотите убрать?n«)
- scores = int(input())
- if scores >= 0 and (wisdom — scores) >= 0:
- wisdom —= scores
- else:
- print(«Недопустимое количество очков.n«)
- elif choice == 4:
- print(«Сколько очков вы хотите убрать?n«)
- scores = int(input())
- if scores >= 0 and (agility — scores) >= 0:
- agility —= scores
- else:
- print(«Недопустимое количество очков.n«)
- # Третий выбор. Проверяем, все ли очки использованы.
- elif global_choice == 3:
- if ost_points == 0:
- break
- else:
- print(«Используйте все очки, данные вам!n«)
- print(«Ваш герой готов! Таблица его характеристик выглядит так: n«
- «ttt1. Сила:», strength, «n«
- «ttt2. Здоровье:», health, «n«
- «ttt3. Мудрость:», wisdom, «n«
- «ttt4. Ловкость:», agility, «n«)
- input(«nНажмите Enter, чтобы выйти…»)
Задача №3
- # coding=utf-8
- «»»
- Напишите программу «Кто твой папа?», в которой пользователь будет
- вводить имя человека, а программа — называть отца этого человека.
- Чтобы стало интересней, можно «научить» программу родственным
- отношениям среди литературных персонажей, исторических персонажей,
- исторических лиц и современных знаменитостей.
- Предоставьте пользователю возможность добавлять,
- заменять и удалять пары «сын-отец».»»»
- MENU = («»»
- 1 — Поиск отца человека по имени
- 2 — Изменение данных
- 3 — Удаление данных
- 4 — Добавить новые данные
- 5 — Выход
- «»»)
- family = {«Остап Бендер»: «Турецкоподанный»,
- «Люк Скайуокер»: «Дарт Вейдер»,
- «Солид Снейк»: «Биг Босс»}
- choice = None
- son = «»
- father = «»
- while choice != 5:
- print(MENU)
- choice = int(input(«Выберите пункт меню:»))
- # Поиск отца человека по имени.
- if choice == 1:
- son = input(«Введите имя человека: «)
- if son in family:
- print(«nРодителем человека по имени», son, «является», family[son])
- else:
- print(«Ошибка, такого человека нет в базе данных»)
- # Изменение данных.
- elif choice == 2:
- son = input(«Введите имя человека: «)
- if son in family:
- father = str(input(«Введите новое имя его отца: «))
- family[son] = father
- print(«nРодителем человека по имени», son, «является», family[son])
- else:
- print(«Ошибка, такого человека нет в базе данных»)
- # Удаление данных.
- elif choice == 3:
- son = input(«Введите имя человека: «)
- if son in family:
- del family[son]
- print(«nЗапись удалена»)
- else:
- print(«Ошибка, такого человека нет в базе данных»)
- # Добавить новые данные.
- elif choice == 4:
- son = input(«Введите имя человека: «)
- if son in family:
- print(«nТакая запись уже существует»)
- else:
- father = str(input(«Введите имя родителя: «))
- family[son] = father
- print(«Добавлено в базу данных»)
- # Выход.
- elif choice == 5:
- print(«До свиданья!»)
Задача №4
- # coding=utf-8
- «»»
- Доработайте программу «Кто твой папа? так, чтобы можно было,
- введя имя человека, узнать, кто его дед. Программа должна
- по-прежнему пользоваться словарем с парами «сын-отец».
- Подумайте, как включить в этот словарь несколько
- поколений. «»»
- MENU = («»»
- 1 — Поиск деда человека по имени
- 2 — Изменение данных
- 3 — Удаление данных
- 4 — Добавить новые данные
- 5 — Выход
- «»»)
- family = {«Остап Бендер»: {«Турецкоподанный»: «Отец турецкоподанного»},
- «Люк Скайуокер»: «Дарт Вейдер»,
- «Солид Снейк»: «Биг Босс»}
- choice = None
- son = «»
- father = «»
- while choice != 5:
- print(MENU)
- choice = int(input(«Выберите пункт меню:»))
- # Поиск от ца человека по имени.
- if choice == 1:
- son = input(«Введите имя человека: «)
- if son in family:
- print(«nРодителем человека по имени», son, «является», family[son[0]], «а его дедом», family[son[1]])
- else:
- print(«Ошибка, такого человека нет в базе данных»)
- # Изменение данных.
- elif choice == 2:
- son = input(«Введите имя человека: «)
- if son in family:
- father = str(input(«Введите новое имя его отца: «))
- family[son] = father
- print(«nРодителем человека по имени», son, «является», family[son])
- else:
- print(«Ошибка, такого человека нет в базе данных»)
- # Удаление данных.
- elif choice == 3:
- son = input(«Введите имя человека: «)
- if son in family:</ div>
- del family[son]
- print(«nЗапись удалена»)
- else:
- print(«Ошибка, такого человека нет в базе данных»)
- # Добавить новые данные.
- elif choice == 4:
- son = input(«Введите имя человека: «)
- if son in family:
- print(«nТакая запись уже существует»)
- else:
- father = str(input(«Введите имя родителя: «))
- family[son] = father
- print(«Добавлено в базу данных»)
- # Выход.
- elif choice == 5:
- print(«До свиданья!»)
Автор: Alek Azimov









