Как взять данные с одной стороны символа - PullRequest
0 голосов
/ 28 марта 2019

Я работаю над созданием калькулятора с python, и мне нужен способ определить, какое число находится на каждой стороне знака оператора.Например, 3 - 61, я хочу, чтобы он обнаружил 3 и 61 и поместил их в переменные num1 и num2

В настоящее время я использую RegEx, чтобы найти все числа, но это даже разделит число, например 10 или87 в 1 и 0 или 8 и 7.

Это то, что у меня сейчас есть:

import re

var = input("Type equation:")

elif " - " in var:
    nums = str(re.findall(r'\d',var))
    nums2 = nums.replace("['", "")
    nums3 = nums2.replace("', '", "")
    Numbers = nums3.replace("']", "")
    num1, num2 = (int(i) for i in str(Numbers))
    answer = num1 - num2
    print(answer)

Мои ожидаемые результаты для задачи, такой как 10 - 6, будут 4

Мои реальные результаты - слишком много чисел. Ошибка ValueError: слишком много значений для распаковки (ожидается 2)

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

Ответы [ 3 ]

0 голосов
/ 28 марта 2019

Если вас интересует только вычитание между 2 числами, и оно отформатировано точно так же, как X - X, тогда вы можете просто использовать функцию split для ее решения:

var = input("Type equation:")
nums = var.split(" - ")
print(int(nums[0]) - int(nums[1]))

Если вы настаиваете на использовании регулярного выражения, то выможно решить так же, как это:

var = input("Type equation:")
nums = re.findall(r'\d+',var) #\d+ means 1 or more digits
print(int(nums[0]) - int(nums[1]))
0 голосов
/ 28 марта 2019

var = input("Type equation:")

if " - " in var:
    nums = var.split(' - ')
    num1, num2 = (int(i) for i in nums)
    answer = num1 - num2
    print(answer)

это решение, которое подойдет для описанной вами ситуации.Обратите внимание, что я удалил часть str() в части num1, num2, потому что split вернет вам список значений, которые он разделил.Если вы поставите str(), то снова их объедините, и вы не будете дальше, чем раньше.

Вы были близки к решению с вашей попыткой.

import re

var = input("Type equation:")

if " - " in var:
    nums = re.findall(r'\d+',var)
    num1, num2 = (int(i) for i in nums)
    answer = num1 - num2
    print(answer)

, это сработает.Вы злоупотребили значением str(), найдите, что все вернули вам список, и с помощью str() вы сказали переводчику снова объединить список в строку, что дало вам странный материал [].Если вы оставите str(), он должен работать, как я описал во втором разделе кода.

0 голосов
/ 28 марта 2019

Вы можете разделить ввод с помощью var.split(" - "). Это вернуло бы массив строк. Затем вы можете просто привести все строки к целым и добавить или вычесть их:

# get all the numbers (only works for subtraction)
numbers = var.split(" - ")

result = 0
for number in numbers:
    # no error checking here; should be implemented
    result -= int(number)

print(result)

Имейте в виду, что вам также необходимо проверить наличие нескольких признаков, например, 4 + 2 - 5

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...