我正在创建一个程序,它将布尔表达式作为字符串输入,并将中缀公式转换为后缀公式,同时确保公式的形式有效。我很难找到一种方法来检查输入的公式是否有效。不允许导入(使用内置的python函数/方法),允许循环和递归。如果公式无效,请返回None。
公式可以包含:
variables in 'abcdefghijklmnopqrstuvwxyz'
operators in '-+*'
"x"
"-y"
"(x*y)"
"((-x+y)*(-y+x))"
"X" variable not lower case letter
"x*y" missing parentheses
"-(x)" extraneous parentheses
"(x+(y)*z)" mismatched parentheses
一些转换示例如下:
(x+y) -> xy+
(x*y) -> xy*
-(x+y) -> xy+-
-x -> x-
((x*y)+(z*x)) -> xy*zx*+
不需要一个完整的工作程序,一个检验公式是否有效的算法就可以了。
我的当前实现将公式从中缀转换为后缀:
def infix_to_postfix(infix_expression):
precedence = {}
precedence["*"] = 2
precedence["+"] = 2
precedence["-"] = 2
precedence["("] = 1
storage_stack = Stack()
postfix_list = []
tokenList = list(infix_expression)
for token in tokenList:
if(token not in "-+*()"):
postfix_list.append(token)
elif(token == '-'):
storage_stack.push(token)
elif(token == '('):
storage_stack.push(token)
elif(token == ')'):
topToken = storage_stack.pop()
while(topToken != '('):
postfix_list.append(topToken)
topToken = storage_stack.pop()
else:
while(not storage_stack.is_empty() and precedence[storage_stack.peek()] >= precedence[token]):
postfix_list.append(storage_stack.pop())
storage_stack.push(token)
while(not storage_stack.is_empty()):
postfix_list.append(storage_stack.pop())
result = "".join(postfix_list)
return result
((a+b)*(c+d))
F1 = (a+b)
F2 = (c+d)
((a+b)*(c+d)) = (F1 * F2)
If F1 and F2 are valid, then the whole thing is valid.
这是一个老问题,但这里有一个潜在的解决方案,有人有相同的问题。
import re
def formula(string):
if not string: return 0
string = re.sub("[^0-9+*/%-=]", "", string)
try:
string, result = string.split("=")
return eval(string) == int(result)
except:
return 0
例如,如果我的程序是这样正确启动的: 但是,我想阻止用户输入此表单以外的内容。 因此,只要命令行参数的格式不是我希望我的程序退出并打印错误代码。 我不知道怎么做。对于这种情况,如果有人输入什么,我只是用ArrayIndexOutofBound尝试捕捉,但我不知道如何特别捕捉每一个可能的命令行参数,这是不正确的形式。
问题内容: 如何检查布尔值是否为null?因此,如果我知道“ hideInNav”为空。如何阻止它进一步执行?像下面这样的东西似乎不起作用,但是为什么呢? 问题答案: 只能是或因为它是原始数据类型(+ 变量的默认值为)。如果要使用值,则可以改用类。布尔是一种引用类型,这就是您可以分配给布尔“变量”的原因。例:
数学环境 \placeformula[1]%给数学公式编号[引用标记] \startformula %数学环境起始声明 y=x^2 \stopformula %数学环境结束声明 这是行内的数学环境 $\int_0^1 x^2 dx$ 运算符 可以直接使用的基本运算符有: + - = < > 数学符号 命令 ± \pm × \times ÷ \div * \ast ★ \st
在java以下作品:
问题内容: 因此,我听说如果将2个字符串与==进行比较,则只有它们都引用相同的对象/实例时,我才会返回true。那是琴弦。布尔呢? 问题答案: ==是否检查布尔值是否完全相等?-Java 这取决于您是在谈论s(对象包装,请注意大写)还是s(原始,请注意小写)。如果您在谈论s(对象包装器),就像处理所有对象一样,请检查 身份 ,而不是对 等 。如果您在谈论s(基元),它将检查是否相等。 所以: 但
我正在尝试编写布尔方法,但它不起作用 它的工作,如果我写这个方法: 我应该如何为它制作布尔方法?