Как взять данные с одной стороны символа

#python #regex

#python #регулярное выражение

Вопрос:

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

В настоящее время я использую регулярное выражение для поиска всех чисел, но это даже разделит число, такое как 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)

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

Ответ №1:

 
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() значением, find all вернул вам список, а с помощью str() вы сказали интерпретатору снова объединить список в строку, что дало вам третий [] материал. Если вы оставите str() подальше, это должно сработать, как я описал во втором разделе кода.

Комментарии:

1. @chargamerправильно сейчас отредактирую сообщение, чтобы добавить больше информации.

Ответ №2:

Вы могли бы разделить входные данные с помощью 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

Комментарии:

1. как бы мне импортировать уравнение туда? могу ли я сделать что-то вроде var.split («1 — 3»)

2. точно так же, как вы сделали это в своем примере: через input (). только разделить… well разбивает уже существующую строку на части.

Ответ №3:

Если вас интересует только вычитание между двумя числами, и оно отформатировано точно так же, как 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]))