在随机位置插入括号?
Inserting parentheses at random place?
Whosebug 社区!我再次请求您的帮助...
我制作了一个随机方程生成器,可以生成如下字符串:
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
所以基本上我想做的是:
制作一些插入一组或多组括号的 code/function
在随机地点。
像这样!
(1-2)*3-4
或者这个!
(1-2)*(3-4)
或者...
(1-2*3)-4
我想你现在明白了。
最简单的方法是什么?
当然,最懒惰的方法是添加更多案例,其中每个案例对应于一种特定的开闭括号排列。例如,我们可以添加案例:
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% 的几率向每个可能的位置添加括号,然后继续)。如果您有任何问题/希望我稍微清理一下,请告诉我
Whosebug 社区!我再次请求您的帮助...
我制作了一个随机方程生成器,可以生成如下字符串:
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
所以基本上我想做的是: 制作一些插入一组或多组括号的 code/function 在随机地点。
像这样!
(1-2)*3-4
或者这个!
(1-2)*(3-4)
或者...
(1-2*3)-4
我想你现在明白了。 最简单的方法是什么?
当然,最懒惰的方法是添加更多案例,其中每个案例对应于一种特定的开闭括号排列。例如,我们可以添加案例:
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% 的几率向每个可能的位置添加括号,然后继续)。如果您有任何问题/希望我稍微清理一下,请告诉我