<p>是的,你可以用Python的方式生成随机的算术表达式。不过,你需要改变你的方法。不要试图生成一个字符串并计算parens数。而是生成一个随机的表达式树,然后输出它。在</p>
<p>我所说的表达式树是一个类的实例,例如,<code>Expression</code>,子类为<code>Number</code>,<code>PlusExpression,</code>MinusExpression<code>, 'TimesExpression</code>,<code>DivideExpression</code>,和{<cd6>}。除了<code>Number</code>之外,每个都有<code>Expression</code>类型的字段。给每个人一个合适的<code>__str__</code>方法。生成一些随机表达式对象并打印“根”</p>
<p>你能把它从这里拿走还是让我把它编码?在</p>
<p><strong>附录</strong>:一些启动程序代码示例。不会生成随机表达式(还没有?)但这可以补充。。。。在</p>
<pre><code># This is just the very beginning of a script that can be used to process
# arithmetic expressions. At the moment it just defines a few classes
# and prints a couple example expressions.
# Possible additions include methods to evaluate expressions and generate
# some random expressions.
class Expression:
pass
class Number(Expression):
def __init__(self, num):
self.num = num
def __str__(self):
return str(self.num)
class BinaryExpression(Expression):
def __init__(self, left, op, right):
self.left = left
self.op = op
self.right = right
def __str__(self):
return str(self.left) + " " + self.op + " " + str(self.right)
class ParenthesizedExpression(Expression):
def __init__(self, exp):
self.exp = exp
def __str__(self):
return "(" + str(self.exp) + ")"
e1 = Number(5)
print e1
e2 = BinaryExpression(Number(8), "+", ParenthesizedExpression(BinaryExpression(Number(7), "*", e1)))
print e2
</code></pre>
<p>**附录2**</p>
<p>回到Python真的很有趣。我忍不住实现了随机表达式生成器。它是基于上面的代码构建的。很抱歉硬编码!!在</p>
^{pr2}$
<p>以下是我得到的输出:</p>
<pre><code>(23)
86 + 84 + 87 / (96 - 46) / 59
((((49)))) + ((46))
76 + 18 + 4 - (98) - 7 / 15
(((73)))
(55) - (54) * 55 + 92 - 13 - ((36))
(78) - (7 / 56 * 33)
(81) - 18 * (((8)) * 59 - 14)
(((89)))
(59)
</code></pre>
<p>一点都不漂亮。我想这会让很多家长感到厌烦。也许改变在括号表达式和二进制表达式之间选择的概率可能会很好。。。。在</p>