def parse(expression):
operators= set("*/+-")
numbers= set("0123456789")#not used anywhere as of now
opExtrapolate= []
numExtrapolate= []
buff=[]
for i in expression:
if i in operators:
if len(buff) >0: #prevents buff if multiple operators
numExtrapolate.append(''.join(buff))
buff= []
opExtrapolate.append(i)
opExtrapolation=opExtrapolate
else:
buff.append(i)
numExtrapolate.append(''.join(buff))
numExtrapolation=numExtrapolate
print(numExtrapolation)
print("z:", len(opExtrapolation))
return numExtrapolation, opExtrapolation
def errors():
numExtrapolation,opExtrapolation=parse(expression)
#Error for muliple operators
if (len(numExtrapolation) ==3) and (len(opExtrapolation) !=2):
print("Bad1")
if (len(numExtrapolation) ==2) and (len(opExtrapolation) !=1):
print("Bad2")
#
我在一个较旧的问题中发布了类似的代码,但是在这篇文章中问题的前提是不同的。
上面的代码接受用户在变量表达式中输入的数学输入,并将其拆分为操作数和运算符。如果输入不正确,errors 函数稍后会打印错误。
输入看起来像这样,其中运算符只能在 set("*/+-") 中,操作数是实数。因此示例输入为 45/23+233
在 SO 用户的帮助下,我能够使其中一个错误正常工作(多个操作员的错误),但是我在实现更多错误消息时遇到了麻烦。
1)如果输入包含不是数字或不允许的运算符的项目,则显示错误消息
2)如果用户输入一个数字,例如 0.23 或类似 554 的数字。如果小数位之前或小数位之后没有数字,则会显示不同的错误。(请注意,像 0.23 这样的数字很好)。
3) 如果用户试图除以零,则会显示错误。
::我尝试过的:
在 parse() 的 else 语句中,我尝试在 buff.append(i) 上设置条件,以便它仅在 buff.isdigit()==true 时运行该代码,但我收到错误提示 buff 中没有数字. 我还尝试创建一个名为“数字”的集合(在下面的代码中),并通过类似于初始 for 语句的 for 语句将 buff.append(i) 限制为该集合。但不幸的是,没有任何效果。任何和所有的帮助将不胜感激。
请不要引入大量比下面代码更高级的代码。我正在尝试解决问题,而不是完全更改我的代码。感谢你的帮助。