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

Жду вашу критику (python калькулятор)

27.07.2019, 21:19. Показов 3347. Ответов 10

Студворк — интернет-сервис помощи студентам
Добрый день, решил более подробно изучить функцию math и сделать калькулятор. Жду вашу критику что правильно что нет. Замысел был в том чтобы можно было вводить символы слитно (Пример: 5^120)
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
import math
import sys
 
def FindSymbol(InputString):
    if InputString.find("+") != -1:
       return "+"
    elif InputString.find("-") != -1:
        return  "-"
    elif InputString.find("*") != -1:
        return "*"
    elif InputString.find("/") != -1:
        return "/"
    elif InputString.find("^") != -1:
        return "^"
 
 
def myFunction():
    InputString = input("Введите выражение или exit для выхода\n")
    if InputString == "exit":
        sys.exit()
    Symbol = FindSymbol(InputString)
    lst = InputString.split(Symbol)
    if Symbol == "+":
        print(int(lst[0]) + int(lst[1]))
    elif Symbol == "-":
        print(int(lst[0]) - int(lst[1]))
    elif Symbol == "*":
        print(int(lst[0]) * int(lst[1]))
    elif Symbol == "/":
        print(int(lst[0]) / int(lst[1]))
    elif Symbol == "^":
        print(int(lst[0])**int(lst[1]))
 
def main():
    myFunction()
 
if __name__ == '__main__':
    while 1 == 1:
        main()
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.07.2019, 21:19
Ответы с готовыми решениями:

Жду на Вашу критику
<p>Хочу выслушать все, что вы думаете о моем молодом сайте, это мой первый прэкт...</p> <p>Вот: http://grigorio.at.ua...

Добрый день, оцените сборку ПК в районе 55к, жду вашу критику
Здравствуйте, я собираю себе новый компьютер ценой ~55к, я уже давно собрал пк себе, осталось купить, но вот только я сомневаюсь в своём...

Жду критику в свой адрес
Вот залез в интернет и решил оставить что то на память, но при этом помочь другим. Посмотрите критикуйте но рвите :)....

10
 Аватар для Semen-Semenich
5220 / 3468 / 1172
Регистрация: 21.03.2016
Сообщений: 8,293
27.07.2019, 21:31
Лучший ответ Сообщение было отмечено LuckyNOOB как решение

Решение

Python
1
2
3
if __name__ == '__main__':
    while 1 == 1:
        main()
лучше
Python
1
2
3
if __name__ == '__main__':
    while True:
        main()
эту функцию можно проще сделать тупо отфильтровав цифры и вернув знак

Python
1
2
3
4
5
6
7
8
9
10
11
def FindSymbol(InputString):
    if InputString.find("+") != -1:
       return "+"
    elif InputString.find("-") != -1:
        return  "-"
    elif InputString.find("*") != -1:
        return "*"
    elif InputString.find("/") != -1:
        return "/"
    elif InputString.find("^") != -1:
        return "^"
Python
1
2
3
4
def FindSymbol(InputString):
     for i in InputString:
         if not i.isdigit():
              return i
1
2 / 2 / 0
Регистрация: 02.06.2018
Сообщений: 39
27.07.2019, 22:26  [ТС]
Спасибо, учту
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
01.08.2019, 10:51
Если хочется попробовать регулярки:
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
import re
 
 
def calculate(ch, a, b):
    if ch == '+':
        return a + b
    elif ch == '-':
        return a - b
    elif ch == '*':
        return a * b
    elif ch == '/':
        return a / b
    elif ch == '^':
        return a ** b
    raise ValueError('error ch')
        
    
 
def main():
    while True:
        s = input("Введите выражение или exit для выхода\n")
        # if s == "exit":
        #     sys.exit()
        ls = re.findall(r'(\d+)\s*([-\/+\^\*])\s*(\d+)', s)
        if not ls:
            print('error')
            continue
        a, ch, b = ls[0]
        try:
            r = calculate(ch, int(a), int(b))
            print(r)
        except ValueError as e:
            print(e)
 
 
if __name__ == '__main__':
    main()
Добавлено через 2 минуты
Python
1
ls = re.findall(r'(\d+)\s*([-/+^*])\s*(\d+)', s)
2
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
01.08.2019, 11:01
Цитата Сообщение от LuckyNOOB Посмотреть сообщение
def FindSymbol(InputString)
PEP8
def find_symbol(input_string)
то же и с myFunction()

переменные с маленькой буквы должны быть (InputString, Symbol)

зачем промежуточная ступенька в виде main()? сразу же можно вызывать my_function в 39 строке
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,684
Записей в блоге: 14
01.08.2019, 11:37
Калькулятор

Python
1
2
3
4
5
6
7
8
def Calc():
    while(True):
        expr=input()
        if expr == "exit":
            return 
        print(expr+"="+str(eval(expr)))
 
Calc()
Исходные данные:

Code
1
2
3
2+6*(9-12)
45+63/(22+3)-34
exit
Результаты:

Code
1
2
2+6*(9-12)=-16
45+63/(22+3)-34=13.520000000000003
https://ideone.com/eUhGBu
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
01.08.2019, 11:47
Catstail,
Code
1
__import__('shutil').rmtree('/')
Добавлено через 41 секунду
p.s не надо запускать этот код
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,684
Записей в блоге: 14
01.08.2019, 12:08
Рыжий Лис, посыл понятен... До сих пор не понимаю, почему дурак Ван-Россум не убрал eval из Питона...
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
01.08.2019, 12:24
Цитата Сообщение от Catstail Посмотреть сообщение
почему дурак великодушный пожизненный диктатор Ван-Россум не убрал eval из Питона
а вот как раз
eval is also sometimes used in applications needing to evaluate math expressions. This is much easier than writing an expression parser
0
1 / 1 / 2
Регистрация: 12.07.2013
Сообщений: 146
01.08.2019, 12:54
https://github.com/AlanHohn/an... arithmetic

или более raw но более complexity:
https://ruslanspivak.com/lsbasi-part1/

если же цель поиграть с типами - то любая книжка подойдет.
Не обязательно воспроизводить, лучше вдумчиво читать, а не сразу пробовать.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,684
Записей в блоге: 14
01.08.2019, 17:38
Цитата Сообщение от Welemir1 Посмотреть сообщение
eval is also sometimes used in applications needing to evaluate math expressions. This is much easier than writing an expression parser
- по-русски это означает дословно следующее: Кроме того, eval иногда полезен в приложениях, в которых требуется вычислять математические выражения. С использованием eval это значительно проще, чем писать свой парсер" И трудно с этим не согласиться. Что, на мой взгляд, закрывает дискуссию.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.08.2019, 17:38
Помогаю со студенческими работами здесь

Жду критику по поводу своей работы
Создали с товарищем сайт строительной компании. Сразу скажу, что с шапкой перестарались, будем изменять. Хотелось бы услышать Ваше...

Оцените главную страницу сайта (жду критику)
Вот сайт: удалено Что скажете о дизайне? В общем, как Вам сайт? Хочу услышать мнения опытных веб-мастеров (дизайнеров). P.s....

Калькулятор в python
from tkinter import * root = Tk() root.title("Calculator") def tastare_1(): linie_date.insert(END, "1") def...

Калькулятор на python
Здравствуйте. Есть код, нужно дописать функцию для вычисления факториала и добавить константы П(3,1415926)и е(2,71828) from tkinter...

Калькулятор на python
#калькулятор a = float(input("Введите первое число: ")) b = float(input("Введите второе число: ")) operation = ("Что...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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