J'ai une fonction appelée four_lettre_liste et le but est de renvoyer une nouvelle liste contenant des mots aléatoires de 4 lettres qui peuvent être construits en utilisant la «nième» lettre de l'alphabet

Vous ne pouvez pas utiliser de fonctions python intégrées en plus des boucles len, range, for, while et if-elif-else.

Ex: def four_letter_words (2) renvoie la liste ['AAAA', 'AAAB', 'AABA', 'AABB', 'ABAA', 'ABAB', 'ABBA', 'ABBB', 'BAAA', 'BAAB' , 'BABA', 'BABB', 'BBAA', 'BBAB', 'BBBA', 'BBBB']

Voici le code que j'ai

def four_letter_words(n): #returns four letter words
    new_list = []
    alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    index = 0
    for element in n:
        while index >= 1:


    return new_list


Je pensais utiliser le group.by mais nous ne pouvons utiliser que ces fonctions comme indiqué ci-dessus.

-1
Beans 25 févr. 2021 à 00:37

4 réponses

Meilleure réponse

Le moyen le plus simple serait peut-être d'utiliser quatre boucles imbriquées - une par lettre - avec un test au milieu pour s'assurer que l'une des lettres correspond à n:

def four_letter_words(n):
    new_list = []
    alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    letter = alphabet[n-1]

    for l1 in alphabet:
        for l2 in alphabet:
            for l3 in alphabet:
                for l4 in alphabet:
                    if (l1 == letter) or (l2 == letter) or (l3 == letter) or (l4 == letter):
                        word = l1+l2+l3+l4
                        new_list.append(word)
    return(new_list)

print(four_letter_words(2))

Cela pourrait être généralisé aux mots de n'importe quelle longueur en utilisant la récursivité au lieu de boucles imbriquées.

0
Adam Oellermann 24 févr. 2021 à 21:51

Utilisation de la récursivité:

def letter_words(n, len=4):
    return [''] if len == 0 else [c + l for l in letter_words(n=n, len=len - 1) for c in "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[:n]]
0
PieCot 24 févr. 2021 à 22:31

Utilisez 4 boucles imbriquées sur les n premières lettres de l'alphabet.

def four_letter_words(n): 
    """returns four letter words"""
    new_list = []
    alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    first_n = alphabet[:n]
    index = 0
    for c1 in first_n:
        for c2 in first_n:
            for c3 = first_n:
                for c4 = first_n:
                    new_list.append(c1 + c2 + c3 + c4)

    return new_list
0
Barmar 24 févr. 2021 à 21:46

Il existe une fonction de bibliothèque standard python: itertools.product qui fait cela. Sinon, utilisez simplement une boucle for à 4 couches.

0
Bing Wang 24 févr. 2021 à 21:43