Riecht wie ein rekursiven Algorithmus
Edit: misread und haben Sie alle Möglichkeiten, wollte
#!/usr/bin/python
import re, random
def expand(line, all):
result = re.search('\([^\)]+\)', line)
if result:
variants = result.group(0)[1:-1].split("|")
for v in variants:
expand(line[:result.start()] + v + line[result.end():], all)
else:
all.append(line)
return all
line = "Today (is|will be) a (great|good|nice) day."
all = expand(line, [])
# choose a random possibility at the end:
print random.choice(all)
ein ähnliches Konstrukt, das eine einzelne Zeile erzeugt Zufalls:
def expand_rnd(line):
result = re.search('\([^\)]+\)', line)
if result:
variants = result.group(0)[1:-1].split("|")
choice = random.choice(variants)
return expand_rnd(
line[:result.start()] + choice + line[result.end():])
else:
return line
Wird jedoch auf verschachtelte Konstrukte
+1 Es scheint wie die gleiche Antwort geschrieben, ohne Ihre zu sehen. Ich werde meine löschen. Übrigens, keine Notwendigkeit für "skalar", da "rand" sein erstes Argument im skalaren Kontext auswertet. –
Ich weiß darüber, aber ich ziehe es vor, es (Skalar) einzufügen, um sicherzustellen, dass es 100% lesbar und nicht mehrdeutig ist. –
@depesz Verstanden. Ich bin das Gegenteil. –