我正在使用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)
我知道这是由于我的程序只能执行一个数字而引起的,但我希望它能够执行的操作不仅仅是个位数。
答案 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()
,它应该可以正常工作,就像我在第二代码部分中所述。