ввод калькулятора питона - PullRequest
       12

ввод калькулятора питона

0 голосов
/ 21 октября 2018

Я пишу проект на Python3, который является продвинутым калькулятором.Он состоит из двух модулей: научного калькулятора и базового калькулятора.У меня проблема со вторым.Я хочу создать ввод, который не требует пробелов между числами и математическими символами.Понятия не имею, как это сделать.Вы можете помочь?

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

from os import  system
zbior = input().split(" ")
liczby = []
dzialania = []

if zbior[0] == "-" or zbior[0] == "+":
    for i in range(1, len(zbior), 2):
        try:
            zbior[i] = float(zbior[i])
        except ValueError:
            print("Pamiętaj o poprawnym wprowadzeniu działania (odzziel liczby spacją), zobacz instrukcję.")
            # calls the function which loops back code
elif zbior[0]=="m":
    #calls menu function from differnet file
    print("menu")
elif zbior[0] == "+" or str(zbior[0])[0] in "0123456789":
    for i in range(0, len(zbior), 2):
        try:
            zbior[i] = float(zbior[i])
        except ValueError:
            print("Pamiętaj o poprawnym wprowadzeniu działania (odzziel liczby spacją), zobacz instrukcję.")
            # calls the function which loops back code
else:
    print("Pamiętaj o poprawnym wprowadzeniu działania, zobacz instrukcję.")
    # calls the function which loops back code

if zbior[0] == "-" or zbior[0] == "+":
    for znak in zbior:
        if zbior.index(znak) % 2 != 0:
            liczby.append(znak)
        else:
            dzialania.append(znak)
else:
    for znak in zbior:
        if zbior.index(znak) % 2 == 0:
            liczby.append(znak)
        else:
            dzialania.append(znak)

ind = 0
suma = liczby[0]
while (ind+1) <= (len(dzialania)):
    if dzialania[ind] == "+":
        suma += liczby[ind+1]
    if dzialania[ind] == "-":
        suma -= liczby[ind + 1]
    if dzialania[ind] == "*":
        suma = suma*liczby[ind+1]
    if dzialania[ind] == "/":
        if liczby[ind+1] == 0:
            print("""Pamiętaj cholero, nie dziel przez zero!!!""")
            system('cls')
            # calls the function which loops back code
        else:
            suma = suma/liczby[ind + 1]
    if dzialania[ind] == "%":
        if liczby[ind+1] == 0:
            print("""Pamiętaj cholero, nie dziel przez zero!!!""")
            system('cls')
            #calls the function which loops back code
        else:
            suma = suma % liczby[ind + 1]

    ind += 1

print(suma)

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Простой список с пропущенными пробелами, после которых следуют эти символы, будет работать хорошо.

А пока .

Как только вы войдете в более сложные выражения, вы получитемного проблем, вместо этого напишите правильный математический оценщик выражений.То есть, если вы действительно имеете в виду расширенный калькулятор .

Рассмотрите возможность следования этому руководству: https://ruslanspivak.com/lsbasi-part1/

В части 6 у вас будет калькулятор, который может оценивать ЛЮБОЙ вводу которого меньше тысячи ( левых скобок, прежде чем они будут закрыты на ), Python имеет глубину рекурсии 1000, ее можно увеличить, но есть предел по причине.

Что я имею в видуэто то, что это будет хорошо с выражением, которое имеет "(" * 999 до того, как произойдет первый ), но я не ожидаю, что кто-то напишет такое чудовище, если они не захотят потратить следующие 3 года на размышления о выраженииили напишите генератор математических выражений, который обратен этому.TL; DR - практически, эта вещь может оценить все, что вы когда-либо хотели.Расширенный калькулятор наверняка.

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

0 голосов
/ 21 октября 2018

Я не знаю, что означают некоторые слова в вашем скрипте, но если бы я хотел ввести что-то вроде 2+2 и получить ["2", "+", "2"], я бы сделал что-то вроде этого:

zbior = [x for x in list(input()) if x != " "]

list(input()) разбивает каждый символ на входе, а if x != " " гарантирует, что пробелы на входе игнорируются.

Пример:

>>> zbior = [x for x in list(input()) if x != " "]
1+2*3+4
>>> zbior
['1', '+', '2', '*', '3', '+', '4']
...