Четырёхбитный калькулятор из картона и шариков
Внешний вид картонного четырёхбитного калькулятора из картона. Хорошо видны полусумматор вверху и три сумматора в средней и нижней части калькулятора
Давным-давно, до изобретения электроники, люди изготавливали механические компьютеры из подручных материалов. Самым известным и сложным примером такой машины является антикитерский механизм — сложнейшее устройство из не менее чем 30 шестерёнок использовалось для расчёта движения небесных тел и позволяло узнать дату 42 астрономических событий.
В наше время механические компьютеры (калькуляторы) — скорее предмет развлечения гиков и повод устроить забавное шоу. Например, как компьютер из 10 000 костяшек домино, который складывает произвольные четырёхзначные бинарные числа и выдаёт пятизначную двухбитную сумму (математическая теория этого калькулятора и архитектура). Такие перфомансы позволяют детям лучше понять, как работают битовые логические операции в программировании, как устроены логические вентили. Да и вообще сделать маленький компьютер своими руками из подручных материалов очень интересно, тем более если вы делаете это вместе с ребёнком.
Логическая операция AND в компьютере из 10 000 костяшек домино
Для изготовления механического калькулятора отлично подходит конструктор Lego. На YouTube можно найти немало примеров таких калькуляторов.
Калькулятор из компьютера Lego
Вдохновлённый примером компьютера из домино и механических калькуляторов из конструктора Lego, программист C++ под ником lapinozz вместе со своими младшими сестричками решил соорудить в домашних условиях нечто подобное для школьного научного проекта одной из сестёр. Он задумал и реализовал полностью функциональный четырёхбитный калькулятор LOGIC (Logic cardbOard Gates Inpredictable Calculator). Для изготовления этой вычислительной машины не требуется ничего кроме картона и клея, а работает она не на электричестве, а на шариках и земной гравитации. Калькулятор умеет складывать числа от 0 до 15 с максимальной суммой 30.
В отличие от костяшек доминов и кубиков Lego, в производстве этого калькулятора не использовались никакие фабричные компоненты. Все элементы калькулятора склеены из картона с нуля, что хорошо понятно по фотографиям устройства. В этом смысле данное устройство можно считать уникальным.
Цель проекта
Наглядное представление, как складывать бинарные числа. Обучение школьника навыкам перевода из десятичной в двоичную систему счисления и обратно. Изучение битовых логических операций и основных логических схем.
Внешний вид калькулятора
Как можно рассмотреть на фотографии калькулятора, в верхней части располагается зона для ввода данных. После прохождения всех логических операций шарики показывают результат операции внизу.
Ввод данных осуществляется шариками. Шарик есть — 1, шарика нет — 0. Бит справа — это наименьший бит числа. Перед началом работы некоторые части калькулятора следует привести в исходное положение. После указания исходных значений отодвигается полоска картона, которая удерживает шарики в исходном положении — и начинается процесс сложения.
Например, так выглядит исходное положение шариков для операции 7+5 (0111 + 0101).
Устройство калькулятора
Логические операции картонного калькулятора осуществляется схожим образом, как и в вышеупомянутом компьютере из домино.
Схематически логические вентили для всех логических операций показаны на схеме.
То есть логический вентиль «И» (AND) означает, что при поступлении 0 шариков на входе получается 0 на выходе. При поступлении 1 шарика на входе получается 0 на выходе. При поступлении 2 шариков на входе получается 1 на выходе.
1 на входе, 0 на выходе
2 на входе, 1 на выходе
Логический вентиль XOR сделать немного сложнее. В этом случае если поступает один шарик, он должен пройти. А если поступает два шарика, то они должны аннулировать друг друга, то есть на выходе будет 0. Автор показывает, как это делать, через вертикально висящий кусочек картона с узким горлышком. Если два шарика приходят одновременно, то они блокируют друг друга — и таким образом эффективно реализуют логическую операцию XOR.
Логический вентиль XOR
Чтобы оптимизировать систему и не городить массу логических вентилей AND и XOR, автор реализовал полусумматор — комбинационную логическую схему, имеющую два входа и два выхода. Полусумматор позволяет вычислять сумму A + B, при этом результатом будут два бита S и C, где S — это бит суммы по модулю 2, а C — бит переноса. В нашей картонной конструкции это означает, что если на входе у нас 1 шарик, то он попадает на выход C, а если на входе 2 шарика, то 1 шарик попадает на выход S, а второй никуда не попадает.
Программист придумал довольно простую и эффективную схему для полусумматора. В ней 1 шарик на входе спокойно продолжает свой путь, переворачивая барьер, и проходя в отверстие C. Но если поступают два шарика, то второй шарик уже не может пройти через барьер, перевёрнутый первым шариком — и проваливается в отверстие, прибивая новый путь S. Это и есть полусумматор.
Один шарик на входе полусумматора
Два шарика на входе полусумматора
Наконец, настоящим шедевром является сумматор. Обычно его делают из двух полусумматоров и логического вентиля «ИЛИ», но автор реализовал другую конструкцию, которая фактически является небольшой модификацией полусумматора.
Один шарик на входе — один шарик по пути 1
Два шарика на входе — один шарик по пути 2
Три шарика на входе — один шарик по пути 1, а другой по пути 2
Весь калькулятор целиком состоит из одного полусумматора и трёх сумматоров.
Калькулятор выдаёт корректный результат вычислений в случае, если шарики падают с правильной скоростью, не слишком быстро и не слишком медленно, и не отскакивают друг от друга. Сама логика безупречна, но на практике калькулятор иногда глючит.
Делаем калькулятор!
Мысль собрать для себя калькулятор теплилась давно, но это ж нужно время, мысли и прочие ингредиенты. но вот подобрался пиз. кхм, карантин, и внезапно появилось время, зуд в членьях, идеи, и заверте.
Для начала попалась информация, что в далёком прошлом выпускался калькулятор «Элекон МК», вот такой,
. нет, не для постилания на стол и вытирания пыли, для иного, о чём ниже.
Оригинальная схема была основательно переделана, сохранилась только логика работы, а количество применённых микросхем сократилось больше чем в два раза (8 вместо 20). Поверьте, просто так корпуса микросхем не поменять друг на друга, но это была самая простая часть работы. После работы резаком, паяльником и «китайскими соплями» получилась такая конструкция:
Из-за технических различий светодиодного и лампового индикатора пришлось править прошивку. Ушло пять дней на вникание в код, прогонку в симуляторе, нахождении свободного места и упихивании своего куска кода. Но это никому не интересно, посему пропустим и двинемся далее.
Прибор, как известно, должен работать не в принципе, а в корпусе, поэтому начинаем мутить экстремальную панкуху на базе метода папье-маше. Вырезаем из пенопласта болван и фанерные закладные, на которые будет опираться наша плата:
Устанавливаем закладные в болван и начинаем оклеивать болван теми самыми газетами, перемежая каждые три слоя бумаги слоем марли. Эпоксидки нет, поэтому ПВА. После просушки получаем непрезентабельное, но прочное и лёгкое создание из двенадцатислойного композитного материала:
Закладные держатся крепко, поскольку перед установкой в них вкручены/вбиты микрошурупчики и гвоздички, головки которых впоследствии были замурованы в «мясе» газет. Вырезаем отверстия для клавиатуры, индикатора, и примеряем:
Мажем шпатлёвкой (с мраморной крошкой, так что корпус у нас бумажно-тряпошно-каменный):
Сушим, шлифуем, мажем ещё слой, снова сушим, ещё шлифуем, ещё подмазываем, сушим, красим, рисуем картинки на клавиши, наклеиваем, и получаем вот такого красавца,
Двенадцать разрядов, семь ячеек памяти (из которых четыре специальных), яркий индикатор, большие кнопки и чуть больше 1 ватта потребляемой мощности. От оригинала отличается только отсутствием функций печати на принтер, но это и не нужно. Главное — творчески переработано и сделано самостоятельно.
Всем здоровья и не кашлять!
43.3K поста 54.9K подписчика
Правила сообщества
В сообществе запрещена торговля, обсуждение цен, ссылки на страницы с продажами, контакты автора в комментариях. Обязательна информация о материалах и инструментах в текстовом виде.
1. Будьте вежливы, старайтесь писать грамотно.
2. В публикациях используйте четкие и красивые фотографии.
3. Автор поста с тегом [моё] может оставить ссылку на свой профиль, группу или канал на других источниках, при условии, что ссылки (активные и не активные) не ведут на прямые продажи. Допускается не больше четырёх ссылок и только в конце поста (п. 8.5 основных правил).
-ссылки рекламного характера/спам;
-ссылки, ведущие на магазины с указанием стоимости товара/услуги;
-ссылки, ведущие на призывы, покупки, продажи, подписки, репосты, голосование и тому подобное.
(нарушение основных правил сайта, п.8.1 и п. 8.2).
При переходе по ссылке запрещено наличие активных (кликабельных) ссылок, ведущих на вышеперечисленное в п.3, содержание таких ключевых слов как «товар», «услуга», «купить», «продам», «в наличии», «под заказ» и т.п.
3.1 Размещение контактов автора (самим автором или другими пользователями) в комментариях запрещено и подлежит удалению (п. 9.1 и 9.3 основных правил).
4. Обязательным для авторов является наличие технических характеристик изделия в публикациях (материалы, техники, авторские приемы, размеры, времязатраты и прочее) в текстовом виде.
Также помечайте свою работу тегом «Рукоделие с процессом» или «Рукоделие без процесса».
5. Пост-видео, пост-фото без текстового описания переносится в общую ленту. Даже если в видео показан подробный процесс изготовления, делайте краткое описание для тех, у кого нет возможности/желания смотреть видео.
Администрация оставляет за собой право решать, насколько описание соответствует п. 5.
6. Посты с нарушениями без предупреждения переносятся в общую ленту.
За неоднократные нарушения автор получает бан.
Автор может размещать новую публикацию в сообществе, не допуская полученных ранее замечаний.
корпус — огонь!
/в нас пропал дух авантюризма/
Немного технических подробностей (схема, прошивка) тут, http://rw6hrm.qrz.ru/calc.htm
Нет, тут плюс, конечно, но впечатления неоднозначные.
У самурая нет цели только путь
Решил по быстрому сделать прикольный светильник.
Лампа светодиодная. Такая не деммируется.
Это конечно не совсем самурайский меч. Но что вышло то вышло.
Потом всего покрасил черной краской ,нанес патину и покрыл лаком. Уже после всего этого процесса понял что надо было оставлять голый металл и красить матовым лаком.
Понедельничное моё
Продолжаем придумывать развлечения археологам будущего.
Берём вот такую каменюку и размечаем на глазок:
Детали, а именно работу болгаркой без кожуха и на весу, опустим и получим вот такие штуки. Кусок лезвия песчаник, рукоять серпентинит (вроде бы).
Потом проковыриваем крепежное отверстие дремелем:
Вклеиваем эпоксидкой огрызок лезвия и добавляем ещё обломки (сорян за качество фотки):
И вот такой вот итог:
А ещё быть может, спустя эоны какой-нибудь полый или негорящий или ещё какой избранный бомж поднимет этот огрызок в попытке принести огонь в этот мир.
Робот Скакун из Atomic Heart
Всем привет! Прошёл Atomic heart и под впечатлением от игры решил сделать робота — скакуна, с помощью которого главный герой взламывает компьютеры. Тело робота — мини bluetooth колонка. Так что он получился не только прикольным, но и функциональным
Лапки напечатаны на 3d принтере из PLA пластика. Имеют 3 степени подвижности плюс стопа на сферическом шарнире.
Когтеточка своими руками
Для ЛЛ результат в конце)
Нашла она пару углов которые требовали доработки на ее взгляд. Решение? Верно, ещё пару когтеточек, зашли в интернеты нашли пару тройку вариантов, не понравились либо визуально, либо по качеству.
Сие чудо показалось крайне не надёжным, да и цена как то так себе.
Данные вариант короткий, а по цене ещё более бешеный.
Что делать? Верно, собираемся и дуем в магазин за материалом!
поход по магазину закончился примерно в 1500р. (Если кому надо будет скину чек )) ) но есть одно НО, данный ценник вышел грубо говоря на три метровых чуда.
Основные статьи затрат, остальное саморезики, скобы, крепления и. Да и наверное всё.
ну, начнём?
Стоп. Вот как говорится и закончили!?)
Коть с первого раза пока не оценила,но к сведению приняла, процесс обучения прошла, как будет замечена при обновлении, будет зафиксирована и выложена в комментариях) в общем как то так, делов на пол часа-час (дольше по магазину ходить),затрат тоже не много. Всем спасибо, все свободны как говорится)
Крыло
По работе с камнями я соскучилась давно. После выложенного поста с остатками моих работ, найденными в гараже, решено было встряхнуть навыки и начать с чего-нибудь несложного. Один день ушёл на то, что бы сгрести в одну кучу найденное в закромах добро — заготовки, дремель, коллекцию камней и вообще всё, что накоплено непосильным трудом за долгое время.
Всем уже понятно, что в моих закромах можно найти небольшого мамонта, кинжал короля Артура и небольшую телегу всякой мелочёвки. Откопанное в углах заняло очередной стеллаж в гараже и радовало взгляд. Запасов кости и олова оказалось критически мало, в связи с чем вопрос — где брать нормальное олово не вагонами и складами, а чисто так, на развес? Если у кого завалялся кусочек с полкило, то тут интересующиеся есть.
Набросок простого был накидан за пару минут и тут фантазия столкнулась с суровой реальностью — кусок кости для затеи был не совсем чтобы подходящим по конфигурации. Но кого это может остановить? Я же так, чисто руки размять и навыки работы с материалом вспомнить.
Геометрия тоже озадачивала — по плану «крыло» должно было обхватывать камень цельновыпиленным монолитом. Такие штуки я ещё не делала. «Моя кость, хочу и порчу.» — решила я и взяла дремель в руки.
На середине процесса стало понятно, что всё идёт как запланировано. То есть куда попало. «Женщина, ты запилила приклад для ружья вот этими самыми руками. Ты справишься.» — геометрия найденного куска кости внесла коррективы по рисунку резьбы.
«Перья» ложиться не хотели, изнутри было снято слишком много и плотного обхвата не получалось. Решив допилить и потом выкинуть, никому не рассказав о моём позоре, я строгала дальше. Штука получилась в результате вполне соответствующая замыслу, но с некоторыми отклонениями от первоначального плана.
Размер крыла в высоту — 4,5 сантиметра, в ширину — 2,3 сантиметра. Материал — кость, камень покупался давно, похож на зелёный агат.
Рюкзак для снохи или рукожопства пост
Попросила младшая сноха сшить рюкзачок небольшой, определились с размерами- 35/30/13. Модель и шкурку выбирала она сама. Модель оказалась замороченной, кто шьёт тот поймёт. Я никогда не пользовался чужими выкройками а тут сплоховал-ну никак не доходило до меня как его правильно собрать.
Пришлось искать на буржуйских сайтах, выкупить помог хороший человек у которого есть возможность заплатить.
САША! Огромное тебе спасибо
И так- шкурка коровка,толщина 1-1,2мм, приятный цвет, нить вощеная синтетика 0,55, руки, две усатых морды и разный инструмент. Длинна ручного шва около 20 метров, а машинного там нет, всё только руками.
Начинаю отсекая всё лишнее
Матильда, контроль и учёт.
Макс как нормальный мужик сказал-идитенах я устамши.
Готовлю тушку, вырезал под карманы и оформил клапана.
Сшил карманы и вшил их.
Проклеил спинку внутри козой для усиления под крепёж.
Крепление под ремешки
Сборка тушки. Пробивка. Прошивка.
Вроде збс получается.
Ну и куда без контроля.
Тушка собрана, пробил отверстия под шнурок, вставил подклад, пришил.
Пришиваю верхний клапан.
Основное собрано, Сшил и вставил шнурки.
Наступила очередь ремешков, Это крепления у ушам рюкзака)))
Длинна Ремешков 70см, прошил, дальше покраска, шлифовка и полировка края.
Особо не усердствовал.
Финальная сборка и немного фото.
На этом всё! Всем здоровья и хороших выходных!
#8 Ключница женская
Кожа Краст 1.6, пола. Нить 0.8, седельный шов, пробойники с японским зубом, шаг 0.5, клей А240. Кромки срезаны, торцы обработаны Токонолле. Поверхность и торцы обработаны BRCraft Finish, глянцевый. Фурнитура никель. Выкройка из открытого доступа, откорректированная под себя.
Объективная критика приветствуется.
Сделал ключницу для супруги. Размеры 120х60. Финиш красиво изменил оттенок кожи. Швы хорошо получились. Отверстия наметили по выкройке, пробивал уже по намеченному.
Из минусов: нужно бы еще придумать и прикрепить петельку, для подвешивания.
Шприцевой насос или как я себя занимал во время болезни
Прежде чем рассказать о шприцевом насосе начну немного издалека, о том, что побудило меня заняться рукоделием
К моему большому огорчению этой осенью я обнаружил у себя опухоль на корне языка. Глубоко в душе надеялся, что пронесёт, и мне показалось, но не пронесло, буквально через день был диагноз — рак горла 3 ст. Потом оказалось, что первая, а чуть позже вторая, т.к. это понятие чисто субъективное. Начал лечение, сначала 5 курсов химии, не помогло, потом операция в январе, а теперь таргетная и лучевая, как говорят для закрепления результатов операции, чтобы не было рецидива. Жесть как неприятно и долго. Отнимает много сил и времени. После операции еще не все устаканилось, глотать я пока не научился, отчасти из-за этого горло мне временно отключили, глотать, говорить, втягивать сопли носом и ощущать запахи я не могу. Дышу через трахеостому.
Питаюсь через назогастральный зонд. Это такая тонкая трубочка как на фото ниже, диаметром примерно 4,7 мм, которая идет через нос в желудок
Еда подается через шприц Жане, это в основном шприцы на 150-200 мл. Через такую тонкую трубку много не съешь, а главное — еду надо вводить неспеша как при обычном питании, мы же не за 5 секунд порцию поглощаем, а шприцом это делать медленно тяжело и скучно, еда густая, рассчитать усилие непросто. Я как как бывший сисадмин ленивый, поэтому решил сделать приспособу которая меня будет кормить в буквальном смысле — шприцевой насос.
После модернизации своего Сапфира (3д принтер) у меня осталось много разного железа подходящего для сооружения такой помпы — шаговый двигатель, драйвера россыпью, ходовой винт, нашлась ардуина и прочая рассыпуха. Погуглил там, сям, посмотрел на thingiverse. Готового решения не нашел, но вдохновился идеями и решил делать сам. Времени до госпитализации на лучевую терапию оставалось 5-6 дней.
За ночь набросал проект в 3D редакторе
Начал печатать. Кое-что приходилось корректировать по месту, т.к. печать — самое затратное по времени мероприятие.До конца не знал каким у меня будет пульт управления, ну и всю электронику и софт отложил на последние дни. К слову сказать промежуточных фото у меня нет, из-за дефицита времени. Поэтому прошу прощения пост из серии — как нарисовать сову.
Думал сделать на ардуино, но у меня оказалась одна палата Arduino Nano которая была прошита скетчем печатающим в бесконечном цикле слово «Test» в последовательный порт. Быстро найти решение как прошить плату у которой с момента загрузки занят порт, я не нашел. Попробовал перепаять проц ( у меня их есть с десяток) не вышло, не завелось, подозреваю надо было хорошо отмыть флюс в ацетоне, но мне негде и времени на эксперименты не оставалось. Поэтому взял за основу ESP8266, а конкретно Wemos D3 mini. Собрал схему на бредборде, залил туда ESPHome, можете называть меня извращенцем, но я его знаю, а времени у меня не было. Все завелось с первого раза. Перенес все на две макетных платы 60х40 мм, одна с дисплеем и органами управления — энкодер и 2 тактовых кнопки. Вторая с драйвером TMC2208, Wemos и понижайкой для питания последней, т.к. драйвер переваривает от 8 до 36 вольт. Не сочтите за мажорство, я пробовал драйвера 4988 и LV8825 не понравились, первый откровенно дергает и громко шумит, второй получше, а вот 2208 просто идеал — крутит тихо и равномерно.
По поводу софта — для тех кто не знает ESPHome ( esphome.io ) , это часть умного дома Home Assistant которая использует за основу ESP , умеет общаться со множеством периферии, поддерживает самописные модули на С++. Кода как такового нет, работа модуля описывается конфигом на yaml который к моему счастью умеет в лямбды и скрипты. Выглядит примерно так
За код дисплея не бросайте в меня камнями, с точки зрения оптимизации он не эффективен (каждый раз проходится по всем условиям if, хотя сработать должно только одно) , но зато понятен и безглючен, а это для меня важнее.
В устройстве реализованы следующие фичи:
Рабочий ход со скоростью от 1 до 5000 импульсов за секунду
Обратный ход со скоростью от 1 до 5000 импульсов за секунду
Быстрый возврат по двойному клику с максимальной скоростью
Регулирование скорости и останов происходит при помощи энкодера. Вращение — регулировка, нажатие — стоп.
Оставлен доступ по WiFi можно посмотреть такие параметры как скорость, состояние кнопок и энкодера. А главное — можно заменить прошивку по OTA.
Видео основного процесса
Несколько фото с разных ракурсов
Если кого-то заинтересует, выложу со временем исходники на thingiverse, подскажу, если будут вопросы.
Написание простейшего калькулятора в Python 3
Язык программирования Python является отличным инструментом для обработки чисел и математических выражений. На основе этого качества можно создавать полезные программы.
В данном руководстве вам предлагается полезное упражнение: попробуйте написать простую программу командной строки для выполнения вычислений. Итак, в данном руководстве вы научитесь создавать простейший калькулятор в Python 3.
В руководстве используются математические операторы, переменные, условные выражения, функции.
Требования
Для выполнения руководства нужно установить Python 3 на локальную машину и развернуть среду разработки. Все необходимые инструкции можно найти здесь:
- Настройка локальной среды разработки для Python 3 в CentOS 7
- Настройка локальной среды разработки для Python 3 в Windows 10
- Настройка локальной среды разработки для Python 3 в Mac OS X
- Настройка локальной среды разработки для Python 3 в Ubuntu 16.04
1: Строка ввода
Для начала нужно написать строку ввода, с помощью которой пользователи смогут вводить данные для вычислений в калькуляторе.
Для этого используйте встроенную функцию input(), которая принимает сгенерированный пользователем ввод с клавиатуры. В круглых скобках функции input() можно передать строку. Пользовательскому вводу нужно присвоить переменную.
В данной программе пользователь сможет вводить два числа. Запрашивая ввод, нужно добавить пробел в конце строки, чтобы отделить ввод пользователя от строки программы.
number_1 = input(‘Enter your first number: ‘)
number_2 = input(‘Enter your second number: ‘)
Прежде чем запустить программу, сохраните файл. К примеру, назовём программу calculator.py. теперь можно запустить программу в окне терминала в среде разработки с помощью команды:
Программа предложит вам ввести два числа:
Enter your first number: 5
Enter your second number: 7
На данный момент калькулятор принимает любые входные данные, не ограничиваясь числами: слова, символы, пробелы, даже enter. Это происходит потому, что функция input() принимает данные как строки и не знает, что в данном случае нужны только числа.
Чтобы программа могла выполнять математические вычисления, она не должна принимать никаких данных, кроме чисел.
В зависимости от предназначения калькулятора, программа может преобразовывать строки функции input() в целые числа или в числа с плавающей точкой. В данном случае целые числа подходят больше. Функцию input() нужно передать внутри функции int(), чтобы преобразовать ввод в целое число.
Читайте также:
number_1 = int(input(‘Enter your first number: ‘))
number_2 = int(input(‘Enter your second number: ‘))
Теперь попробуйте ввести два целых числа:
Enter your first number: 23
Enter your second number: 674
Все работает без ошибок. Однако если вы введёте символы, пробелы или буквы, программа вернёт ошибку:
Enter your first number: hello
Traceback (most recent call last):
File «testing.py», line 1, in <module>
number_1 = int(input(‘Enter your first number: ‘))
ValueError: invalid literal for int() with base 10: ‘hello’
Итак, вы написали строку для ввода данных в программу.
Примечание: Попробуйте самостоятельно преобразовать входные данные в числа с плавающей точкой.
2: Добавление операторов
Теперь нужно добавить четыре базовых оператора: + (сложение), – (вычитание), * (умножение) и / (деление).
Программу лучше разрабатывать постепенно, чтобы иметь возможность протестировать её на каждом этапе.
Сначала добавьте оператор сложения. Поместите два числа в print, чтобы калькулятор отображал результат.
number_1 = int(input(‘Enter your first number: ‘))
number_2 = int(input(‘Enter your second number: ‘))
print(number_1 + number_2)
Запустите программу и попробуйте сложить два числа:
Enter your first number: 8
Enter your second number: 3
11
Теперь можно немного усложнить программу. Пусть кроме результата калькулятор также отображает числа, введенные пользователем.
number_1 = int(input(‘Enter your first number: ‘))
number_2 = int(input(‘Enter your second number: ‘))
print(‘<> + <> = ‘.format(number_1, number_2))
print(number_1 + number_2)
Снова запустите программу и попробуйте ввести какие-нибудь числа:
Enter your first number: 90
Enter your second number: 717
90 + 717 =
807
Теперь пользователь сможет убедиться, что ввел правильные числа.
На данном этапе можно добавить остальные операторы, используя такой же формат:
number_1 = int(input(‘Enter your first number: ‘))
number_2 = int(input(‘Enter your second number: ‘))
# Addition
print(‘<> + <> = ‘.format(number_1, number_2))
print(number_1 + number_2)
# Subtraction
print(‘<> — <> = ‘.format(number_1, number_2))
print(number_1 — number_2)
# Multiplication
print(‘<> * <> = ‘.format(number_1, number_2))
print(number_1 * number_2)
# Division
print(‘<> / <> = ‘.format(number_1, number_2))
print(number_1 / number_2)
Теперь калькулятор может выполнять математические вычисления при помощи операторов +, -, * и /. Далее нужно ограничить количество операций, которые программа может выполнить за один раз.
3: Добавление условного оператора
Добавьте в начало программы calculator.py небольшое описание с перечнем доступных операций. Выбрав один из операторов, пользователь сообщит программе, что именно ей нужно будет делать.
»’
Please type in the math operation you would like to complete:
+ for addition
— for subtraction
* for multiplication
/ for division
»’
Примечание: На самом деле здесь можно использовать любые символы (например, 1 для сложения, b для вычитания и так далее).
Передайте строку внутри функции input() и присвойте переменную значению ввода (к примеру, это будет переменная operation).
operation = input(»’
Please type in the math operation you would like to complete:
+ for addition
— for subtraction
* for multiplication
/ for division
»’)
number_1 = int(input(‘Enter your first number: ‘))
number_2 = int(input(‘Enter your second number: ‘))
print(‘<> + <> = ‘.format(number_1, number_2))
print(number_1 + number_2)
print(‘<> — <> = ‘.format(number_1, number_2))
print(number_1 — number_2)
print(‘<> * <> = ‘.format(number_1, number_2))
print(number_1 * number_2)
print(‘<> / <> = ‘.format(number_1, number_2))
print(number_1 / number_2)
В эту строку пользователь может ввести любой из предложенных символов, но ничего не произойдёт. Чтобы программа работала, нужно добавить условный оператор. Оператор if будет отвечать за сложение, три оператора elif – за остальные операции; оператор else будет возвращать ошибку, если вместо предложенных операторов пользователь ввёл другой символ.
operation = input(»’
Please type in the math operation you would like to complete:
+ for addition
— for subtraction
* for multiplication
/ for division
»’)
number_1 = int(input(‘Enter your first number: ‘))
number_2 = int(input(‘Enter your second number: ‘))
if operation == ‘+’:
print(‘<> + <> = ‘.format(number_1, number_2))
print(number_1 + number_2)
elif operation == ‘-‘:
print(‘<> — <> = ‘.format(number_1, number_2))
print(number_1 — number_2)
elif operation == ‘*’:
print(‘<> * <> = ‘.format(number_1, number_2))
print(number_1 * number_2)
elif operation == ‘/’:
print(‘<> / <> = ‘.format(number_1, number_2))
print(number_1 / number_2)
else:
print(‘You have not typed a valid operator, please run the program again.’)
Итак, сначала программа предлагает пользователю ввести символ операции. Затем она запрашивает два числа. После этого она отображает пользовательский ввод и результат вычислений. Например, пользователь вводит *, затем 58 и 40.
Please type in the math operation you would like to complete:
+ for addition
— for subtraction
* for multiplication
/ for division
*
Please enter the first number: 58
Please enter the second number: 40
58 * 40 =
2320
Если же на первый запрос программы пользователь введёт символ %, он получит ошибку.
На данный момент программа выполняет все необходимые вычисления. Однако чтобы выполнить другую операцию, программу придётся перезапустить.
4: Определение функций
Чтобы программу не пришлось перезапускать после каждого обработанного примера, нужно определить несколько функций. Для начала поместим весь существующий код в функцию calculate() и добавим в программу ещё один слой. Чтобы программа запускалась, нужно добавить функцию в конец файла.
# Определение функции
def calculate():
operation = input(»’
Please type in the math operation you would like to complete:
+ for addition
— for subtraction
* for multiplication
/ for division
»’)
number_1 = int(input(‘Please enter the first number: ‘))
number_2 = int(input(‘Please enter the second number: ‘))
if operation == ‘+’:
print(‘<> + <> = ‘.format(number_1, number_2))
print(number_1 + number_2)
elif operation == ‘-‘:
print(‘<> — <> = ‘.format(number_1, number_2))
print(number_1 — number_2)
elif operation == ‘*’:
print(‘<> * <> = ‘.format(number_1, number_2))
print(number_1 * number_2)
elif operation == ‘/’:
print(‘<> / <> = ‘.format(number_1, number_2))
print(number_1 / number_2)
else:
print(‘You have not typed a valid operator, please run the program again.’)
# Вызов функции calculate() вне функции
calculate()
Создайте ещё одну функцию, состоящую из условных операторов. Этот блок кода позволит пользователю выбрать: продолжить работу с программой или завершить её. В данном случае операторов будет три: один if, один elif и один else для обработки ошибок.
Пусть функция называется again(). Добавьте её в конец блока def calculate():
.
# Определение функции again()
def again():
# Ввод пользователя
calc_again = input(»’
Do you want to calculate again?
Please type Y for YES or N for NO.
»’)
# Если пользователь вводит Y, программа запускает функцию calculate()
if calc_again == ‘Y’:
calculate()
# Если пользователь вводит N, программа попрощается и завершит работу
elif calc_again == ‘N’:
print(‘See you later.’)
# Если пользователь вводит другой символ, программа снова запускает функцию again()
else:
again()
# Вызов calculate()
calculate()
Также можно устранить чувствительность к регистру: буквы y и n должны восприниматься так же, как Y и N. Для этого добавьте функцию строки str.upper():
.
def again():
calc_again = input(»’
Do you want to calculate again?
Please type Y for YES or N for NO.
»’)
# Accept ‘y’ or ‘Y’ by adding str.upper()
if calc_again.upper() == ‘Y’:
calculate()
# Accept ‘n’ or ‘N’ by adding str.upper()
elif calc_again.upper() == ‘N’:
print(‘See you later.’)
else:
again()
.
Теперь нужно добавить функцию again() в конец функции calculate(), чтобы программа запускала код, который спрашивает пользователя, хочет ли он продолжить работу.
def calculate():
operation = input(»’
Please type in the math operation you would like to complete:
+ for addition
— for subtraction
* for multiplication
/ for division
»’)
number_1 = int(input(‘Please enter the first number: ‘))
number_2 = int(input(‘Please enter the second number: ‘))
if operation == ‘+’:
print(‘<> + <> = ‘.format(number_1, number_2))
print(number_1 + number_2)
elif operation == ‘-‘:
print(‘<> — <> = ‘.format(number_1, number_2))
print(number_1 — number_2)
elif operation == ‘*’:
print(‘<> * <> = ‘.format(number_1, number_2))
print(number_1 * number_2)
elif operation == ‘/’:
print(‘<> / <> = ‘.format(number_1, number_2))
print(number_1 / number_2)
else:
print(‘You have not typed a valid operator, please run the program again.’)
# Добавление функции again() в calculate()
again()
def again():
calc_again = input(»’
Do you want to calculate again?
Please type Y for YES or N for NO.
»’)
if calc_again.upper() == ‘Y’:
calculate()
elif calc_again.upper() == ‘N’:
print(‘See you later.’)
else:
again()
calculate()
Запустите программу в терминале с помощью команды:
Теперь программу не нужно перезапускать.
5: Дополнительные действия
Написанная вами программа полностью готова к работе. Однако есть ещё много дополнений, которые при желании можно внести в код. Например, вы можете написать приветственное сообщение и добавить его в начало кода:
def welcome():
print(»’
Welcome to Calculator
»’)
.
# Затем нужно вызвать функции
welcome()
calculate()
Также можно добавить в программу больше функций для обработки ошибок. К примеру, программа должна продолжать работу даже если пользователь вводит слово вместо числа. На данный момент это не так: программа выдаст пользователю ошибку и прекратит работу.
Кроме того, если при выборе оператора деления (/) пользователь выбирает знаменатель 0, он должен получить ошибку:
ZeroDivisionError: division by zero
Для этого нужно написать исключение с помощью оператора try … except.
Программа ограничена 4 операторами, но вы можете расширить этот список:
.
operation = input(»’
Please type in the math operation you would like to complete:
+ for addition
— for subtraction
* for multiplication
/ for division
** for power
% for modulo
»’)
.
# Для возведения в степень и обработки модуля нужно добавить в код условные операторы.
Также в программу можно добавить операторы цикла.
Существует много способов для настройки обработки ошибок и улучшения каждого проекта. При этом всегда важно помнить, что не существует единственно правильного способа решить ту или иную проблему.
Заключение
Теперь вы знаете, как написать простейший калькулятор. После выполнения руководства вы можете самостоятельно добавить новые функции программы.
❤Как сделать бумажный Калькулятор и Мини Блокнот❤Кавайные оригами поделки из бумаги своими руками
Сегодня я покажу вам , как сделать милый бумажный Калькулятор и Мини Блокнот своими руками. Блокнотик может послужить для вас личным дневником. Очень легко и просто! Это будут Поделки из бумаги или канцелярия в школу. Калькулятор из бумаги — это отличные поделки самоделки своими руками , если нужно снова в школу. А , как сделать калькулятор мы вам покажем в этом видео. Легкие и простые поделки самоделки из бумаги своими руками — это всегда классно! Для его создания можно использовать только те материалы , которые нравятся , выбрать свой уникальный дизайн , украшения. Всё зависит от того , кто будет пользоваться блокнотом. Милую поделку можно подарить близким людям.
Для поделки из бумаги понадобится
• Цветная бумага ( плотность 120-160)
• Цветная бумага ( плотностью 80)
• Ножницы , клей , карандаш
• Маркер , фломастеры