Вот один из способов попробовать то, что вам нужно.Отделяет гласные от согласных, перетасовывает их для случайности, застегивает гласные и согласные в неудачной попытке выделить гласные (но это не удастся, если есть слишком много больше гласных, чем согласные), случайным образом выбирает длину слова, гарантируя минимум один символ на слово, ичто количество выходных слов совпадает с количеством входных слов.
Вы, вероятно, могли бы лучше изолировать гласные, создав при необходимости больше одиночных гласных слов.Однако, в зависимости от соотношения гласных и согласных и количества слов, всегда будут сценарии, в которых вы не можете одновременно выделить гласные и вывести нужное количество слов.
from itertools import chain, zip_longest
from random import randint, random, shuffle
s = 'this is a loop'
vowels = []
consonants = []
for char in s.replace(' ', ''):
if char in 'aeiouAEIOU':
vowels.append(char)
else:
consonants.append(char)
shuffle(vowels)
shuffle(consonants)
if len(vowels) > len(consonants) or random() > 0.5:
a, b = vowels, consonants
else:
a, b = consonants, vowels
letters = ''.join([c for c in chain.from_iterable(zip_longest(a, b)) if c])
words = []
for i in range(s.count(' '), -1, -1):
x = randint(1, len(letters) - i)
words.append(letters[:x])
letters = letters[x:]
s = ' '.join(words)
print(s)
# EXAMPLE RANDOM OUTPUT:
# si hipa lo tos