如何从symb的一侧获取数据

2024-05-28 18:53:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用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)

我知道这是因为我的程序只能做单数,但我希望它能够做更多的单数


Tags: answerinrevar数字replace计算器numbers
3条回答

var = input("Type equation:")

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

这将是一个适用于您描述的情况的解决方案。注意,我删除了num1, num2部分中的str()部分,因为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()你告诉解释器把列表再次压缩成一个字符串,这给了你wird []的东西。如果不使用str(),它应该可以工作,就像我在第二个代码部分中描述的那样

如果您只对两个数字之间的减法感兴趣,并且它的格式与X - X完全相同,那么您可以简单地使用split函数来解决它:

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

如果您坚持使用regex,您可以类似地解决它:

var = input("Type equation:")
nums = re.findall(r'\d+',var) #\d+ means 1 or more digits
print(int(nums[0]) - int(nums[1]))

您可以使用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

相关问题 更多 >

    热门问题