#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]))