Как заставить функцию сработать 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 шт):
Я предполагаю, что нужно внести случайность, при формировании списка, в функцию 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
Сначала давайте пройдеемся по коду.
Этот участок кода не вижу смысл писать,
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
Для продолжения нажмите любую клавишу . . .