Python 查看字符串中是否有*个*字符并将其删除

Python 查看字符串中是否有*个*字符并将其删除,python,string,Python,String,所以我有一个简单的Python3程序,它只是一个基本的计算器。 以下是代码的一部分: calculation = input("What calculation do you want to do?\n") if "+" in calculation: numbers = calculation.split("+") answer = int(numbers[0]) + int(numbers[1]) 我在下面设置了一些其他操作。 问题是,如果有人输入任何内容以及操作(例如10

所以我有一个简单的Python3程序,它只是一个基本的计算器。 以下是代码的一部分:

calculation = input("What calculation do you want to do?\n")
if "+" in calculation:
    numbers = calculation.split("+")
    answer = int(numbers[0]) + int(numbers[1])
我在下面设置了一些其他操作。 问题是,如果有人输入任何内容以及操作(例如10++2或10+abc2),代码会抛出一个错误,因为它显然无法将10添加到abc2中


我认为我可以通过测试每个角色来解决这个问题,但这肯定是一个很长的路要走。有没有办法用Python解决这个问题?

Python,你也喜欢吗

s = ''.join(filter(lambda x: x.isdigit() or x=='+', list(s)))

通过
string.isdigit()
方法检查两侧是否由数字组成:

if numbers[0].isdigit() and numbers[1].isdigit():
     answer = int(numbers[0]) + int(numbers[1])
如果您想进一步使用计算器,您应该担心学习和解析问题。

试试以下方法:

calculation = "5+4+3.5"

numbers = calculation.split("+")
numbers2 = []

for num in numbers:
    try:
        numbers2.append(float(num))
    except:
        print("incorrect input")

print(sum(numbers2))

您可以使用正则表达式获取数字:

s = "10++abc2.0"

import re
if "+" in s:
    print(sum(map(float,re.findall("\d+|\d+\.\d+", s))))

12.0
如果要忽略abc2.0并捕捉负数,请尝试使用try/except进行强制转换:

def parse(s, sign):
    spl = s.split(sign)
    sm = 0
    for i in spl:
        try:
            print(i)
            sm += float(i)
        except ValueError:
            pass
    return sm

sm = parse(s, "+")
print(sm)
10.0

你还必须考虑负数,但是有些情况下你可以在字符串中加上+和-所以你还需要决定做什么:< /P>

s = "10++abc2.0+-2"
sm = parse(s,"+")
print(sm)
8.0

一个合适的解析器最好使用
abc2
不是一个变量?这有点类似于最近的一个I。
num
是一个字符串,所以
isinstance(num,(int,long,float,complex))
将始终返回
False
现在
4.5
将导致
输入不正确
(因此最后一个语句是不正确的)
false
不是python,您也可以
如果不是num.isdigit()
,您的代码也会因多个不同的输入而失败。OK,我修复了它。。。不过我认为一般的方法是可以理解的。作者希望在有无效字符的情况下抛出错误,但是
filter
将忽略无效部分。如果不是全部(lambda x:x.isdigit()或x='+',s),我会使用
如果我想确保输入是有效的。还请注意,不需要将
s
转换为
list
,就像
str
一样iterable@tmrlvi请随意建议编辑!我只是python的初学者。对于
2.0
等,这将失败。。这是一个有效的数字我知道OP只是启动一个基本的计算器,它执行
int+int
。我更新了答案,指出他应该使用解析和正则表达式进行更复杂的操作。