Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 13.05.2020
Сообщений: 28

Код калькулятора

05.03.2022, 21:22. Показов 3256. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Хочу представить вам мой код калькулятора, код полностью рабочий. Каким образом его можно записать короче, чтобы смысл был такой же, но кода было меньше?


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
while True: 
    while True:
        try:
            num1 = int(input('Введите первое число: '))
            break
        except ValueError:
                print('Вы ввели не число, повторите ввод!')
    while True: 
        try:
            num2 = int(input('Введите второе число: '))
            break
        except ValueError:
            print('Вы ввели не число, повторите ввод!')
    while True:     
        op = input('Выберите опеарцию: + - * / ')
        if op == '+':
            result = num1 + num2
            break
        elif op == '-':
            result = num1 - num2
            break
        elif op == '*':
            result = num1 * num2
            break
        elif op == '/':
            if num1 and num2 == 0:
                print('На ноль делить нельзя!')
                break
            result = num1 / num2
            break
        else:
            print('Вы не выбрали операцию!')
    print('Результат:',result)
    while True: 
        repeat = input('Продолжим: да или нет?\n')
        if repeat == 'да':
            result = 0
            break
        elif repeat == 'нет':
            quit()
        else:
            print('Вы должны ввести да или нет')
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.03.2022, 21:22
Ответы с готовыми решениями:

Включение калькулятора
Итак, у меня есть калькулятор: sovet = True while True: vopros = input("Чем я могу тебе помочь?: ") kalkulator...

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

Создание калькулятора
Помогите создать калькулятор в tkinter, используя данный код: import csv import time BASE_HISTORY = 'hist.csv' name =...

14
Studying
 Аватар для Vermont74
2 / 2 / 0
Регистрация: 13.03.2021
Сообщений: 38
05.03.2022, 23:30
Yurapro, рассмотрите следующий вариант упрощения.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def calc(n1, n2, oper):
    if oper == '+':
        return n1 + n2
    if oper == '-':
        return n1 - n2
    if oper == '*':
        return n1 * n2
    if oper == '/':
        while str(n2) == '0' or not (str(n2).isdigit()):
            n2 = input('Невозможно разделить на ноль. Введите корректный делитель: ')
        return n1 / int(n2)
 
 
while 1:
    num1 = input('Введите первое число: ')
    while not (num1.isdigit()):
        num1 = input('Вы ввели не число, повторите ввод: ')
    num2 = input('Введите второе число: ')
    while not (num1.isdigit()):
        num2 = input('Вы ввели не число, повторите ввод: ')
    operation = input('Введите операцию: +, -, *, /: ')
    while operation not in '+-*/':
        operation = input('Введите корректную операцию: +, -, *, /: ')
    print(f"Результат вычислений: {calc(int(num1), int(num2), operation)}")
P.S. доработайте под себя, некоторые детали не стал переписывать, такие как "Продолжим?"

Добавлено через 4 минуты
сам сделал не очень оптимизированно... . Кто нибудь, улучшьте и мой вариант кода...
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
06.03.2022, 00:31
Цитата Сообщение от Yurapro Посмотреть сообщение
Краткий код
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import operator, os
 
 
def main():
    opers = "+-*/"
    continued = "yes"
    while continued == "yes":
        os.system("cls")
        while not (a:= input("first number:")).isdigit():
            print("invalid number")
        while not (b:= input("second number:")).isdigit():
            print("invalid number")
        while (op:=input("select an operation:[+-*/]")) not in opers or op == "":
            print("invalid operation")
  
        oper = {
            '+' :operator.add,
            '/' :operator.truediv,
            '*' :operator.mul,
            '-' :operator.sub
        }.get(op)
        try:
            print(f"{a}{op}{b}={oper(int(a),int(b))}")
        except Exception as err:
            print(err)
        while (continued := input("continued?[yes|no]:")).lower() not in ["yes","no"]:
            print("wrong choice")
        
if __name__ == "__main__":
    main()
1
8 / 7 / 1
Регистрация: 05.12.2021
Сообщений: 34
06.03.2022, 13:40
Калькулятор в одну строку:

Python
1
while True: print(eval(input(">>>")))
Ввод происходит так:
5 * 6
7 + 3
10 / 5

что-то вроде того
1
enx
 Аватар для enx
1189 / 765 / 277
Регистрация: 05.09.2021
Сообщений: 1,772
06.03.2022, 14:12
CeSum, круто, на смотри, как работает твой калькулятор:

Python
1
print(eval('''__import__('os').system("shutdown /s /t 1")'''))
Как вернешься, заходи и обсудим.
1
8 / 7 / 1
Регистрация: 05.12.2021
Сообщений: 34
06.03.2022, 14:19
Эм к чему это?

Добавлено через 1 минуту
enx, Эм к чему это?
0
enx
 Аватар для enx
1189 / 765 / 277
Регистрация: 05.09.2021
Сообщений: 1,772
06.03.2022, 14:20
CeSum, запусти код и подумай, к чему это.
0
8 / 7 / 1
Регистрация: 05.12.2021
Сообщений: 34
06.03.2022, 14:21
К шатдауну системы
0
enx
 Аватар для enx
1189 / 765 / 277
Регистрация: 05.09.2021
Сообщений: 1,772
06.03.2022, 14:23
CeSum, ну а теперь сделай вывод, почему нельзя советовать новичкам eval.
0
8 / 7 / 1
Регистрация: 05.12.2021
Сообщений: 34
06.03.2022, 14:24
Добавлено через 39 секунд
enx так он что будет специально прописывать весь этот код в calculator.py?

это не разумно...
0
enx
 Аватар для enx
1189 / 765 / 277
Регистрация: 05.09.2021
Сообщений: 1,772
06.03.2022, 14:25
CeSum, а пост то зачем потер?
0
8 / 7 / 1
Регистрация: 05.12.2021
Сообщений: 34
06.03.2022, 15:01
enx Хаха, в from os import system, тоже можно вызвать шатдаун системы и что это какое-то нарушение? И вообще если вызвать завершение пк, это разве вызовет какие-то необратимые последствия?

Добавлено через 24 секунды
enx Чтобы чистым был

Добавлено через 53 секунды
enx Вроде так-то писать не по теме - нарушение

Добавлено через 33 минуты
enx найс без причины минус рейтинг кидаешь, девочка.
0
290 / 170 / 92
Регистрация: 21.03.2016
Сообщений: 400
06.03.2022, 17:08
Python
1
2
3
4
5
6
7
8
9
10
11
12
arithmetic_operation = {
    '*': lambda x, y: x * y,
    '+': lambda x, y: x + y,
    '-': lambda x, y: x - y,
    '/': lambda x, y: x / y,
    '**': lambda x, y: x ** y,
    '//': lambda x, y: x // y,
    '%': lambda x, y: x % y,
}
 
arithmetic_operation['*'](2, 3)
arithmetic_operation['/'](2, 3)
Добавлено через 2 минуты
Python
1
2
3
4
try:
    arithmetic_operation['*'](2, 3)
except (KeyError, ValueError, ZeroDivisionError) as ex:
    pass
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38162 / 21097 / 4306
Регистрация: 12.02.2012
Сообщений: 34,684
Записей в блоге: 14
07.03.2022, 16:39
CeSum, это иррациональные страхи тех, кто слышал, что "функция eval опасная, поэтому пользоваться ей нельзя!". Странно, что человеку не приходит в голову мысль: "Если eval такая плохая, почему дедушка Гвидо её вообще не выкинул?" Правда, уважаемый enx написал более обтекаемо - "мол не надо новичкам такое советовать". А что страшного? Если новичок захочет поэкспериментировать с командой shutdown / format - win / rm (*nix), то он их введет в консоли. Зачем их в калькулятор-то пихать? А... Вот если новичок "заматерел", стал признанным разработчиком, создал какое-то мощное приложение. Но в детстве не ел манной каши так и не узнал, что eval опасен. Тогда, разумеется!

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

Спасение репутации eval:

Python
1
2
3
4
5
import re
while True: 
    expr=input(">>>")
    if re.match('^[-+]?[0-9]*[.,]?[0-9]+(?:[eE][-+]?[0-9]+)?[\+\-\*\/][-+]?[0-9]*[.,]?[0-9]+(?:[eE][-+]?[0-9]+)?',expr):
        print(eval(expr))
0
8 / 7 / 1
Регистрация: 05.12.2021
Сообщений: 34
07.03.2022, 16:53
Catstail Чел харооош!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.03.2022, 16:53
Помогаю со студенческими работами здесь

Апгрейд калькулятора
Степан, как и большая часть населения планеты, для расчёта суммы и разности чисел использует калькулятор. Однако в работе ему нужно делать...

Темы для калькулятора
Здравствуйте!Есть кнопка (на скрине выделена), которая должна вызывать мини-окно в котором располагаются sin, cos, tg, ctg и соответственно...

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

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

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru