Как заставить функцию сработать n количество раз, но с разными выводами?

Я пытаюсь составить программу чтобы при выводе были разные сгенерированные слова. Но при вызове функции 2 раз программа выводит те же слова что и в 1 раз.

import random
a=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','w','v','x','y','z']
vowels = ['a', 'e', 'i', 'o', 'u', 'y']
words=int(input('Колво слов'))
symbols=int(input('Колво букв'))
b=[]
for ch in a: 
    if ch in vowels: 
        b.append(ch) 
        a.remove(ch) 
list_a=list(random.choices(a, k=symbols))
list_b=list(random.choices(b, k=symbols))
def new_words():
    end=[]
    c=[]                 
    for i in range(symbols):
        c.append(list_a[i])
        c.append(list_b[i])
    for i in range(symbols):
        end.append(c[i])
    print((" ".join(end))) 
    return end
for i in range(words):
    new_words()
            

В консоли после завершения программы выводит это

Колво слов 4
Колво букв 4
f u w a
f u w a
f u w a
f u w a

Моя задача вывести примерно такое

Колво слов 4
Колво букв 4
f u w a
d a x y
z o f i
p y r u

Ответы (2 шт):

Автор решения: Oopss

Я предполагаю, что нужно внести случайность, при формировании списка, в функцию def new_words() , внес в ваш код несколько поправок, но думаю, что нужно осмыслить и переписать.

import random


def ll(words,symbols):
    a=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','w','v','x','y','z']
    vowels = ['a', 'e', 'i', 'o', 'u', 'y']
    b=[]
    for ch in a:
        if ch in vowels:
            b.append(ch)
            a.remove(ch)
    list_a=list(random.choices(a, k=symbols))
    list_b=list(random.choices(b, k=symbols))
    return [list_a,list_b]

def new_words(words,symbols):
    end=[]
    c=[]
    list_a=ll(words,symbols)[0]
    list_b=ll(words,symbols)[1]
    for i in range(symbols):
        c.append(list_a[i])
        c.append(list_b[i])

    for i in range(symbols):
        end.append(c[i])
    print((" ".join(end)))
    return end

def main():
    words = int(input('Колво слов  '))
    symbols = int(input('Колво букв   '))

    for i in range(words):
        new_words(words,symbols)

if __name__=='__main__':
    main()


Колво слов6
Колво букв5
s i x i b
l a k u d
g i m e k
j a s a g
g a q o z
w a g i m
→ Ссылка
Автор решения: Mr.Framon

Сначала давайте пройдеемся по коду.

Этот участок кода не вижу смысл писать,

b=[]
for ch in a: 
    if ch in vowels: 
        b.append(ch) 
        a.remove(ch) 

вы можете просто изменить перееменную a на consonants и добавить туда все согласные, раз вы это сделали с гласными.

В этом участке кода,

for i in range(symbols):
    end.append(c[i])

вы добавляете по индексу от 0 до symbol еще в одну переменную объекты из объединенного вами списка с, от сюда и одинаковые сгенирированные слова, так как в списке end остаются всего symbol(сколько ввели кол-во букв, столько и будет в списке) букв.

Вам нужно добавить функцию choices() в функцию new_words()

Я предлагаю такое решение:

import random

consonants = [
    'b','c','d','f','g','h','j','k','l','m',
    'n','p','q','r','s','t','w','v','x','z'
    ]

vowels = ['a', 'e', 'i', 'o', 'u', 'y']

words = int(input('Кол-во слов: '))
symbols = int(input('Кол-во букв: '))

def new_words():
    unification = []
    end = []
    for i in range(symbols):
        consonantsRandom = random.choices(consonants, k=symbols)
        vowelsRandom = random.choices(vowels, k=symbols)
        unification.append(consonantsRandom[i])
        unification.append(vowelsRandom[i])
        end.append(unification[i])
    print(" ".join(end))

for i in range(words):
    new_words()

Вывод:

Кол-во слов: 6
Кол-во букв: 6
t e t i c a
z a p a n y
p a m a h y
m y m u s y
m e w o s e
l o t e n y
Для продолжения нажмите любую клавишу . . .
→ Ссылка