Собираем и запускаем калькулятор из windows xp в среде windows 10 c помощью gcc x 64

Сборка функций в одну программу calculator

Для оптимизации кода и его легкой поддержки создадим три основные функции:

  • operation() для запроса операции от пользователя;

  • calc() для выполнения математических операций;

  • run() — главная функция, вызывающая остальные и управляющая ходом программы.

Функции operation() и calc():

def operation():

    mes = input('Выберите операцию (Введите +, -, * или /): ')

    if mes == '+':

        print('Вы выбрали сумму')

    elif mes == '-':

        print('Вы выбрали разность')

    elif mes == '*':

        print('Вы выбрали умножение')

    elif mes == '/':

        print('Вы выбрали деление')

    return mes


def calc(first, second, oper):

    result = None

    if oper == '+':

        result = summa(first, second)

    elif oper == '-':

        result = sub(first, second)

    elif oper == '*':

        result = mult(first, second)

    elif oper == '/':

        result = div(first, second)

    else:

        print('Некорректная операция!')

    return result

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

def run():

    first = int(input('Введите первое число: '))

    second = int(input('Введите второе число: '))

    oper = operation()

    result = calc(first, second, oper)

    print(f'Результат: {result}')

Эта функция интегрирует все предыдущие:

  • вызывает operation() для выбора операции;

  • вызывает calc() для вычисления результата, который затем выводится.

Чтобы запустить программу, нужно вызвать функцию run(). 

Введите первое число: 7
Введите второе число: 10
Выберите операцию (Введите +, -, * или /): +
Вы выбрали сумму
Результат: 17
Введите первое число: 7
Введите второе число: 10
Выберите операцию (Введите +, -, * или /): *
Вы выбрали умножение
Результат: 70
Введите первое число: 7
Введите второе число: 10
Выберите операцию (Введите +, -, * или /): er
Некорректная операция!
Результат: None

Настройка окружения

Определимся, что нам потребуется:

  1. Хост с установленной Windows. В моем случае Windows 10.

  2. Qt. Я использую как QtCreator, так и порт GCC для Windows MinGW-64. Устанавливал оба с помощью Qt Maintanance Tool. После установки компилятор необходимо добавить в Path.

  3. Собирать будем с помощью Makefile. Для этого надо установить утилиту make.

Дисклеймер

Все действия, описанные автором в статье, сделаны исключительно в исследовательских и образовательных целях. Windows является зарегистрированным товарным знаком Microsoft.

Обработка ввода данных

Перейдем к работе с пользовательским вводом. Обработка ввода в Python осуществляется функцией input(), которая позволяет написать строку-подсказку для пользователя. Она учитывает введенную информацию до нажатия клавиши Enter.

Рассмотрим на примере имени и фамилии два результата — без ввода строки и с ним.

name = input()  #Иван

surname = input()  #Петров

print('Ваше имя и фамилия:')

print(name)

print(surname)

Иван 
Петров
Ваше имя и фамилия:
Иван 
Петров

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

:/>  «В чем преимущество использования маршрутизатора 5 ГГц, и что такое WiFi 5 ГГц, а также чем он отличается от стандарта 2,4 ГГц — какие различия существуют и какой диапазон частот следует выбрать при настройке маршрутизатора. ?"

На практике пример с вводом выглядит следующим образом:

name = input('Укажите имя: ')   #Иван     

surname = input('Укажите фамилию: ')  #Петров   

print('Ваше имя и фамилия: ')

print(name)

print(surname)

Укажите имя: Иван
Укажите фамилию: Петров
Ваше имя и фамилия:
Иван
Петров

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

name = input('Укажите имя: ')            #Иван

surname = input('Укажите фамилию: ')     #Петров

print('Ваше имя и фамилия: ', end = ' ')

print(name, end = ' ')

print(surname)

В результате имя и фамилия будут отображены в одной строке:

Укажите имя: Иван
Укажите фамилию: Петров
Ваше имя и фамилия: Иван Петров

Вместо множественных вызовов print() можно эффективно управлять выводом текста с помощью методов объединения и форматирования строк.

Управление потоком выполнения

Условные операторы (if-операторы) в Python позволяют управлять потоком выполнения программы. 

Основной оператор if работает по простому принципу:

if условие_верно:

    # Выполняется данный блок кода

Простое сравнение чисел:

num1 = int(input('Введите первое число: '))

num2 = int(input('Введите второе число: '))

if num1 == num2:

    print('Одинаковые числа')

Введите первое число: 9
Введите второе число: 9
Одинаковые числа

Если написать разные числа, то не будет никакого результата, так как нет инструкций для этого случая:

Введите первое число: 9
Введите второе число: 7

Для выполнения разных блоков кода в зависимости от условия используется конструкция if-else:

if условие_верно:

    # Выполняется данный блок кода

else:

    # Выполняется данный блок кода

Чтобы перебрать несколько инструкций, можно использовать ветвь if-elif-else:

if условие_1:

    # Блок кода 1

elif условие_2:

    # Блок кода 2

# ...

else:

    # Блок кода n

Пример с if-else — сравнение чисел:

num1 = int(input('Введите первое число: '))

num2 = int(input('Введите второе число: '))

if num1 == num2:

    print('Одинаковые числа')

else:

    print('Числа разные')

Введите первое число: 10
Введите второе число: 20
Числа разные

Пример выбора операции:

oper = input('Выберите операцию (Введите +, -, * или /): ')

if oper == '+':

    print('Вы выбрали сумму')

elif oper == '-':

    print('Вы выбрали разность')

elif oper == '*':

    print('Вы выбрали умножение')

elif oper == '/':

    print('Вы выбрали деление')

else:

    print('Некорректная операция!')

Выберите операцию (Введите +, -, * или /): *
Вы выбрали умножение
Выберите операцию (Введите +, -, * или /): Y
Некорректная операция!

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

Расширение функционала калькулятора

Чтобы улучшить калькулятор, можно добавить в него больше функций.
Например:

  • возведение в степень;

  • вычисление логарифма (потребуется импортировать библиотеку math).

Обновим функцию calc() следующим образом:

import math


def calc(first, second, oper):

    result = None

    if oper == '+':

        result = first + second

    elif oper == '-':

        result = first - second

    elif oper == '*':

        result = first * second

    elif oper == '/':

        result = first / second

    elif oper == '%':

        result = (first / second) * 100

    elif oper == '**':

        result = first ** second

    elif oper == 'log':

        result = math.log(first, second)

    else:

        print('Неизвестная операция!')

    return result

Теперь обновим функцию operation():

def operation():

    mes = input('''Выберите операцию (Введите +, -, *, /, %, **, log):

    + - Сложение

    - - Вычитание

    * - Умножение

    / - Деление

    % - Процент первого числа от второго

    ** - Возведение в степень

    log - Логарифм первого числа по основанию второго\n''')

    

    if mes == '+':

        print('Вы выбрали сложение')

    elif mes == '-':

        print('Вы выбрали вычитание')

    elif mes == '*':

        print('Вы выбрали умножение')

    elif mes == '/':

        print('Вы выбрали деление')

    elif mes == '%':

        print('Вы выбрали нахождение процента первого числа от второго')

    elif mes == '**':

        print('Вы выбрали возведение в степень')

    elif mes == 'log':

        print('Вы выбрали логарифм')

    else:

        print('Неизвестная операция!')

        

    return mes

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

:/>  К сожалению процесс com android settings остановился lg что делать

Для иллюстрации рассмотрим пример вычисления 30% от 100.

Введите первое число: 30
Введите второе число: 100
Выберите операцию (Введите +, -, *, /, %, **, log):
+ – сложение двух чисел
– – вычитание двух чисел 
* – произведение двух чисел
/ – деление двух чисел
% – процент первого числа от второго
** – возведение первого числа в степень второго
log – логарифм первого числа по основанию второго
%
Вы выбрали процент
Результ: 30

Функциональная архитектура калькулятора

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

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

Каждая функция примет два аргумента: first и second.

def summa(first, second):

    return first + second
def sub(first, second):

    return first - second

def mult(first, second):

    return first * second
def div(first, second):

    return first / second

После определения функций проверим их работу:

num1 = int(input('Введите первое число: '))

num2 = int(input('Введите второе число: '))

print(f'Сумма двух чисел: {summa(num1, num2)}, разность: {sub(num1, num2)}, '

      f'умножение: {mult(num1, num2)}, частное: {div(num1, num2)}')

Введите первое число: 10
Введите второе число: 5
Сумма двух чисел: 15, разность: 5, умножение: 50, частное: 2.0

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

Функции калькулятора

Созданный калькулятор будет иметь все базовые арифметические функции:

Также в калькуляторе будут предусмотрены расширенные функции:

  • расчет процента от числа;

  • возведение числа в степень;

Например, программа сможет выполнять такие вычисления:

  • 20 + 30 = 50;

  • 40 – 8 = 32;

  • 9 * 5 = 45;

  • 25 / 5 = 5.

Определив функции программы, можно приступать к написанию кода.

:/>  Компьютер не запускается после настройки msconfig

Отображение результата в коде

Для отображения текста и результатов мы будем использовать функцию print(). 

В качестве примера можно написать в консоли произвольный текст:

print ('Создаем калькулятор на Python!')

Создаем калькулятор на Python!

print 795

Комьюнити теперь в Телеграм

Подпишитесь и будьте в курсе последних IT-новостей

Обработка исключений и улучшение кода

Чтобы сделать калькулятор более надежным и удобным, нужно доработать четыре задачи:

  • ошибку «деление на ноль»;

  • ввод нечисловых данных;

  • некорректный ввод символа операции;

  • работа программы calculator после завершения (по желанию пользователя).

Чтобы решить проблему с делением на ноль, нужно модифицировать функцию calc() следующим образом:

if (second == 0):

   print('Деление на ноль запрещено!')

   return

Теперь, если пользователь попытается разделить на ноль, программа выдаст предупреждение и прекратит выполнение операции.

Для обработки ошибок ввода и некорректных символов операции будем использовать циклы и исключения. 

Работа с ошибками

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

first = int(input('Укажите первое число: '))  #abc

Укажите первое число: abc
ValueError: invalid literal for int() with base 10: ‘abc’

Это связано с тем, что функция int() не может преобразовать произвольный текст в число. Чтобы избежать таких ситуаций, целесообразно организовать механизм повторного ввода, пока пользователь не внесет корректные данные. Детально разберем этот аспект ниже, при обсуждении циклов. 

Конвертация строк в числа

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

first = input('Укажите первое число: ')  #70

second = input('Укажите второе число: ') #300

summ = first + second

print(f'Сумма чисел: {summ}')

Укажите первое число: 70
Укажите второе число: 300
70300

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

first = int(input('Укажите первое число: '))  #70

second = int(input('Укажите второе число: ')) #300

summ = first + second

print(f'Сумма чисел: {summ}')

Укажите первое число: 70
Укажите второе число: 300
Сумма чисел: 370

Работа с переменными

Аналогично предыдущему примеру, рассмотрим сценарий с сохранением результата в переменную. 

Это позволит проводить вычисления:

result = 7 * 6

print(result)

Оставьте комментарий