如何从符号的一侧获取数据

时间:2019-03-28 20:10:05

标签: python regex

我正在使用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 :(得分:0)

您可以使用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 :(得分:0)

如果您只对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]))

答案 2 :(得分:0)


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(),它应该可以正常工作,就像我在第二代码部分中所述。