stackoverflow社区!我再一次请求你的帮助...
我制作了一个随机方程生成器,它会生成如下所示的字符串:
def strmaker():
picker = random.randint(2, 5)
if picker == 5:
return "1" + random.choice(RandomSymbols) + "2" + random.choice(RandomSymbols) + "3" + random.choice(
RandomSymbols) + "4" + random.choice(RandomSymbols) + "5"
elif picker == 4:
return "1" + random.choice(RandomSymbols) + "2" + random.choice(RandomSymbols) + "3" + random.choice(
RandomSymbols) + "4"
elif picker == 3:
return "1" + random.choice(RandomSymbols) + "2" + random.choice(RandomSymbols) + "3"
else: return "1" + random.choice(RandomSymbols) + "2"
典型的结果如下所示:
1-2*3-4
所以基本上我想做的是:编写一些代码/函数,在任意位置插入一组或多组括号。
像这样!
(1-2)*3-4
或者这个!
(1-2)*(3-4)
或者..。
(1-2*3)-4
我想你在这一点上明白了。做这件事最简单的方法是什么?
发布于 2021-02-28 01:00:21
当然,最懒惰的方法是添加更多的大小写,其中每个大小写对应于开始和结束括号的特定排列。例如,我们可以添加案例:
elif picker == 6:
return "(1" + random.choice(RandomSymbols) + "2)"
然而,我认为我们可以做得更好,特别是考虑到这个程序强制每个数字只有一个数字长度的约束(如果我们想要推广到具有更多数字的代码,这将有点麻烦,但我认为应该不是太糟糕)。这个约束的意思是,如果我们要插入一个左括号,我们需要恰好插入一个右括号3,5,7,...字符离开。特别地,我们可以编写类似这样的代码:
s = strmaker()
i = 0
while i < len(s) - 2: # len(s) - 2 since we never want a starting paren on the last number
if random.randint(0, 1): # 50% chance of opening paren, can be tuned
s = s[:i] + "(" + s[i:]
i += 2
while i < len(s) - 2:
i += 2
if random.randint(0, 1): # 50% chance of closing paren, again can be tuned
s = s[:i] + ")" + s[i:]
break
if i >= len(s) - 2: # safety closing paren
s = s + ")"
i += 2
这不是我写过的最干净的代码,但它应该清楚解决方案是如何工作的(它只是在每个可能的位置添加括号,概率为50%,然后向前移动)。如果您有任何问题,请告诉我/希望我帮您整理一下
https://stackoverflow.com/questions/66400431
复制相似问题