Архив метки: Программирование

Майкл Доусон — "Программируем на Python", ответы на задания 2-ой главы…

Ответы на задания 2-ой главы.

Первое устное задание рассматривать не будем.


Задача №2
Напишите программу, в окно которой пользователь сможет ввести названия двух своих любимых блюд. Программа должна сцеплять две эти строки и выводить полученную строку, как название нового, невиданного блюда.
name1 = input("Введите первое свое любимое блюдо: ")
name2 = input("Введите второе свое любимое блюдо: ")
print("nА теперь, внимание! Я придумал блюдо, которое объединяет ваше оба любимых: ")
print(name1+name2)
input("nnВведите Enter, чтобы выйти из приложения...")

Задача №3
Напишите программу "Щедрый посетитель", в окно которой пользователь сможет ввести сумму счета за обед в ресторане. Программа должна выводить два значения: чаевые из расчета 15% и 20% от указанной суммы.
print("Здравствуйте, уважаемый посетитель стриптиз-клуба 'Вертихвостка'!")
# Не могу удержаться. Процитируем Гарри Гаррисона :-)
print("Наш девиз: ЗАХОДИТЕ К НАМ, ЗАСРАНЦЫ, ЖДУТ ВАС ВЫПИВКА И ТАНЦЫ!")
print("Вас приветствует приложение для подсчета чаевых для официантки,")
print("которая, обслуживала вас.")
check = int(input("nДля начала введите сумму счета в долларах (без центов): "))
 
# Рассчитываем чаевые по американской системе
tip_good = check / 100 * 20
tip_bad = check / 100 * 10
print("nЕсли вам понравилось обслуживание, то оставьте официантке ",tip_good, "долларов")
print("Если же нет, то оставьте ", tip_bad, "долларов")
 
input("nnНажмите Enter, чтобы закрыть приложение...")

Задача №4

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

print("Здравствуйте! Вас приветствует приложение автоцентра Audi.")
print("Вводя стоимость автомобиля, мы расчитаем вам окончательную цену")
print("автомобиля со всеми наценками с каждым подпунктом")
price = int(input("nВведите стоимость автомобиля: "))
 
nalog = price / 100 * 13
print("nНалог: ", nalog, "рублей")
 
reg_sbor = price / 100 * 3
print("nРегистрационный сбор: ", reg_sbor, "рублей")
print("nАгентский сбор: ", 10000, "рублей")
print("nДоставка машины: ", 5000, "рублей")
 
full = price + nalog + reg_sbor + 10000 + 5000
print("nnИтого: ", full, "рублей")
 
print("nnБлагодарим за покупку!")
input("Введите Enter, чтобы закрыть приложение...")

P.S. За наглядный листинг кода спасибо сайту highlight.hohli.com.
P.P.S. Все разъезжается по швам. 

Автор: Alek Azimov

Программирование — обучение и тренировка

Предыстория

Впервые с программированием я столкнулся в 5 классе. В то время (1996 год) в школах еще было очень мало компьютеров и компьютерных классов, и многие школьники изучали информатику как чисто теоретический предмет.
Мне в этом плане очень повезло, в нашем лицее было достаточно машин для проведения уроков информатики даже в младших классах. В то время было невозможно сразу обучать детей реальному языку программирования (даже простому, типа BASIC). Сейчас это звучит странно, но в 96 году около 5-10% учащихся имели дома компьютер. Для развития наших алгоритмических навыков нам предложили особенную игру – Исполнитель Муравей. Это был простейший интерпретатор с элементарными задачами для детей. Работал он из под DOS.
Выглядело это примерно так:
Как и любому ребенку, мне нравились игры. А в особенности компьютерные игры. Думаю эта игра была одним из тех импульсов, которые и привели меня в будущем в класс с углубленным компьютерным обучением.

Кому все это надо?

Но вернемся в 2015. В современном мире появилось масса специальных программ, вебсайтов и других ресурсов направленных как на обучение детей, так и просто на обучение всех желающих различным языкам программирования.
Сегодня мы обойдем вопрос обучения детей программированию и сосредоточимся на ресурсах, которые позволяют людям уже умеющим программировать на базовом уровне, попрактиковать свои навыки, научиться новым языкам или технологиям, или посоревноваться с другими программистами.
Первый вопрос, который задает себе человек, перед тем как начать что-то делать – а зачем все это надо? Представьте себе молодого человека, которые решил на досуге повысить свои навыки программирования. В школе ему рассказывали какие-то базовые вещи и он даже писал простейшие программы. Но это было давно и он уже ничего не помнит. Что делать?
Конечно, можно пойти в магазин, купить книжку и засесть ее изучать. В большинстве случаев вы приобретете что-то вроде книги Б. Страуструпа “Язык программирования c++”, после которой в лучшем случае решите, что программирование это не ваше признание, а в худшем больше никогда в жизни не станете программировать. Отмечу, что я не считаю книгу Страуструпа плохой. Просто она совершенно не подходит для обучения языку, она скорее является отличным справочным материалом.

В чем плюс?

Те сайты, про которые я пишу сегодня, предлагают удобный интерактивный формат, который дает вам ряд преимуществ. По этому поводу, я даже слайдик для презентации делал:
Начну рассказывать с последнего пункта:
Для обучения доступен любой живой язык программирования. Будь то Javascript, C#, Java, Ruby, Python и многие многие другие.
Эти сайты рассчитаны на любой уровень. От нулевого с расчетом на детскую аудиторию до серьёзных сайтов, где по результатам соревнований можно получить реальные деньги и реального заказчикам.
Геймификация. Отличная мотивация для большинства людей. Вы получите различные уровни, достижения, значки и так далее, которыми можно похвастаться знакомым.
Масса интересных практических заданий. На мой взгляд один из самых важных пунктов. Теория мертва без практики. А придумать самому себе хорошее задание на нужную тему не так то просто. Плюс многие школьные сайты грешат заданиями, которые являются скорее практикой математики, нежели информатики. Вычислять на первых этапах корни уравнений – скукота. И создатели сайтов это отлично понимают. Поэтому и готовят куда более интересные задания, частенько с различного рода графикой.
Соревнование. При достижении определенного результата, нам становится интересно сравнить себя с другими людьми. Узнать на сколько хорошо у нас все получается? В нас живет дух соперничества. И обучающие ресурсы позволяют нам соревноваться с другими учениками по множеству параметров, в том числе проводя различные олимпиады в

Майкл Доусон — "Программируем на Python", ответы на задания 1-ой главы…

Ответы на задания 1-ой главы.

Объяснений тут не нужно, я полагаю.

Задача №1
Научитесь вызывать ошибку: в интерактивном режиме введите название своего любимого сорта мороженого. Потом исправьте ошибку и создайте команду, которая будет правильным образом выводить на экран название этого сорта мороженого.

print("Пломбир")

Задача №2Напишите и сохраните программу, которая будет выводить ваше имя и дожидаться, пока пользователь нажмет Enter для выхода. Запустите эту программу, дважды щелкнув на ее значке.

print("Альмир")

input(«nnНажмите Enter, для выхода…»)

 

Задача №3

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

print("Жить, как говорится, хорошо!")
print("А хорошо жить еще лучше!")
print("Авторы: Г. Вицин и Е. Моргунов")

input(«nnНажмите Enter, для выхода…»)

Автор: Alek Azimov

Чтение исходников

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

2. Примеры кода
Если код писал профессионал, то можно утащить себе в копилку красивые решения. Обратная ситуация — говнокод — в копилочку как делать не надо

3. Исходники могут быть единственным источником документации
«…код должен быть самодокументированным…», «…комментарии — трата времени…». Если разработчик библиотеки был из этих, то в перед к чтению исходного кода.

4. Для поиска багов
Баги есть везде, даже в стандартных библиотеках. И возникают ситуации когда — программа ведет себя не так как описано в документации и ошибка явно не в собственном коде, придется опускаться на уровень ниже  и читать исходники библиотек.

Автор: Евгений Курочкин

RetroShare — клиент F2F сетей. Установка

Итак, начинаем серию статей про замечательную программу RetroShare, которая способна в некотором случае заменить и ICQ-клиент, и программу обмена данными, и SKYPE. В последнее время я пользуюсь исключительно этой программой в виду ее удобства при использовании. В данной статье рассмотрим описание этой программы и ее установку.
Что это и  с чем едят?
RetroShare — свободная программа бессерверного обмена письмами, мгновенными сообщениями и файлами с помощью шифрованной F2F (и опционально P2P) сети, построенной на GPG. Не является жестко даркнетом, т.к. пиры могут обмениваться сертификатами и IP адресами со своими друзьями.
 
Аутентификация и соединение
После установки пользователь или генерирует пару GPG ключей с помощью RetroShare, или выбирает существующую. После проверки подлинности и обмена асимметричным ключом, соединение устанавливается по SSH. Для шифрования используется OpenSSL. Друзья друзей по умолчанию не могут соединяться, но могут видеть друг друга если пользователи включили такую возможность.
 
Обмен файлами
Можно шарить папки между друзьями. Передача файлов идет  сегментировано через несколько точек (multi-hop swarming). В целом данные передаются только между друзьями, но путь от отправителя до конечного получателя конкретного сегмента может идти через нескольких друзей. Функцию анонимного поиска по нескольким точкам (multi-hop search) является ещё одним способом находить файлы по сети.
Файлы представляются в виде своих SHA-1 хэшей. HTTP совместимые ссылки на них могут экспортироваться, копироваться и вставляться из/в RetroShare, чтобы опубликовать их виртуальное расположение в сети.
 
Общение
RetroShare предлагает несколько сервисов для общения друзей. Приватный чат и собственная почтовая система обеспечивают защищённую связь между известными друзьям. Система форумов, разрешающая как анонимные, так и аутентифицированные форумы также используется для обмена сообщений между друзьями. Канальная система позволяет автоматически загружать файлы размещенные на конкретном канале каждому подписанному клиенту.
 
Интерфейс пользователя
Ядро RetroShare основано на базовой библиотеке, к которой могут подсоединяются два модуля пользовательского интерфейса: модуль командной строки, который не дает почти никакого контроля, и модуль графического интерфейса на Qt4, который будет более приятен большинству пользователей. В дополнение к популярным функциям другого ПО обмена файлами, таким как вкладки поиска и визуализация закачек. RetroShare дает возможность управлять своей сетью путем сбора дополнительной информации о соседних друзьях и отображения её в виде матрицы доверия или в виде динамического графа сети. 
 
Анонимность
F2F структура RetroShare сети затрудняет вторжение и делает почти невозможным мониторинг сети извне. Степень анонимности может быть улучшена деактивацией DHT и сервисов обмена IP/сертификатами, превращая таким образом сеть RetroShare в настойщий даркнет. Друзья друзей не могут напрямую соединяться друг с другом. Тем не менее, возможность анонимного обмена файлами с друзьями друзей существует, если она включена пользователем. Поиск, доступ, загрузка и скачивание таких файлов производится путем «маршрутизации» через ряд друзей. Это означает, что связь между источником данных (uploader) и получателем данных (downloader) является косвенной через общих друзей. Хотя друзья-посредники не могут определить источник отправления или пункт назначения, они могут просматривать содержимое проходящих через них пакетов.
 
Особенности программы
  • Поиск друзей
  • Поиск файлов
  • Мгновенный обмен сообщениями
  • Групповой чат
  • Каналы наподобие IRC
  • Анонимные/аутенфицированные форумы
  • Поиск файлов через несколько точек (multi-hop)
  • NAT перфорация
  • Сегментированная передача, как в BitTorrent
  • Кроссплатформенный UI на Qt4
  • Локализация на 9 языках
  • Анонимный обмен файлами с друзьями
  • URL схема общих файлов
  • Полная децентрализация 
  • Поддержка переадресации UPnP / NAT-PMP портов
  • Обзор всех общих файлов
  • Несколько одновременных загрузок / закачек
  • Поддержка плагинов
  • Голосовой чат через VoIP плагин
  • Интеграция в панель задач
  • Возобновление прерванной загрузки после выхода
  • Добавление загрузок через веб ссылки
  • Обзор внутренней статистики маршрутизатора
  • Мастер первоначальной настройки
  • Автоматическая настройка портов маршрутизатора
  • Открытый или анонимный обмен данными с друзьями

 

 
Установка программы
Установку программы можно осуществить двумя способами:
1. качаем deb-пакет с официального сайта.
2. устанавливаем из терминала. Для этого нам нужно добавить два репозитория:
sudo add-apt-repository ppa:csoler-users/retroshare 
sudo add-apt-repository ppa:csoler-users/retroshare-snapshots
 
после обновляемся:
sudo apt-get update
 
и соответственно устанавливаем саму программу:
sudo apt-get install retroshare
 
Находим RetroShare  в Меню-Интернет. При первом запуске RetroShare Вам будет предложено создать новый профиль. Вопросы стандартные: 
— Ваше имя пользователя;
— Ваша почта. Неважно, можете поставить любой набор символов;
— Ваш пароль. Соответственно пароль должен быть сложным и стойким ко взлому;
— расположение. Какое-либо имя для идентификации пользователя. Например Home Computer.
Затем нажмите «Создать новый профиль».
Вам будет предложено ввести Ваш пароль и программа запустится. 

 В следующих статьях мы рассмотрим более детально интерфейс программы.

Автор: Роман Дмитриевич