Aide python [Résolu]

Signaler
-
 Azn -
Bonjour,
Je suis un débutant en python qui tente faire cette exercice:

Créer:
 Une méthode MotAleatoire qui prend en paramètre une taille et génère un mot aléatoire tel que :
o Le mot doit commencer par une voyelle
o Dans le mot, on doit alterner les voyelles (a, e, i, o, u, y) avec deux consonnes (b, c, d,…x, z). À la fin, du mot, on pourrait n’avoir qu’une consonne.
o Faire en sorte qu'une lettre n'apparaisse pas plus d'une fois dans le mot généré.


 Un programme principal (main) qui lit le nombre de caractères à générer, puis génère, en utilisant la méthode précédente, un mot aléatoire. Vérifier que l’utilisateur n’entre pas un nombre supérieur à 18.
Quelques exemples d’exécution:
• Entrez la taille désirée : 4
Le mot généré est : afgu
• Entrez la taille désirée : 6
Le mot généré est : uyjipl
• Entrez la taille désirée : 11
Le mot généré est : ertughoplam

voici mon code:


import random
import string

Lvoyelle = ["a", "e", "i", "o", "u", "y"]
Lconsonne = ["b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "z"]

def mot(x):
    str = string.ascii_lowercase        #pour créer un mot aléatoire
    random_letter = random.choice(str)
    voyelle = 0
    consonne = 0
    for i in range(x):
        for lettre in random_letter:
            if(lettre[0] in Lvoyelle[i] and lettre[-1] in Lconsonne[i]):
                voyelle = voyelle + 1
                consonne = consonne + 1

        if (voyelle == 1 and consonne == 1):
            return ''.join(lettre for i in range(x))


# Les messages pour la longueur du mot
main = int(input("Entrez le nombre de lettre que vous voulez :"))
x = main
if(x <= 0):
    print("Le chiffre doit être positif.");
elif(x > 18):
    print("Le chiffre est trop grand.");
else:
    print("Le mot généré est:", mot(x));



J'ai réussi à faire le programme qui lit le nombre de caractère et de généré des lettres aléatoires, mais je ne sais pas quoi faire par rapport aux 3 conditions des emplacements des lettres.

3 réponses

Messages postés
14880
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
4 juin 2020
413
Bonjour, en python l’indentation est primordiale.
Or par défaut le site supprime les espacements « inutiles ».
Mais comme tout site de code qui se respecte, il dispose d’un outils permettant, entre autre, de conserver l’indentation : les balises de codes. Voici un petit tuto sur leur bonne utilisation https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Je suis désoler, j'avais mis les indentations dans mon programmes, c'est juste que sa la pas fait quand j'ai copié coller mon code, voici le même code avec l'identation, merci encore.


import random
import string

Lvoyelle = ["a", "e", "i", "o", "u", "y"]
Lconsonne = ["b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "z"]

def mot(x):
    str = string.ascii_lowercase #pour créer un mot aléatoire
    random_letter = random.choice(str)
    voyelle = 0
    consonne = 0

    for i in range(x):
        for lettre in random_letter:
            if(lettre[0] in Lvoyelle[i] and lettre[-1] in Lconsonne[i]):
                voyelle = voyelle + 1
                consonne = consonne + 1

    if (voyelle == 1 and consonne == 1):
        return ''.join(lettre for i in range(x))


# Les messages pour la longueur du mot
main = int(input("Entrez le nombre de lettre que vous voulez :"))
x = main
if(x <= 0):
    print("Le chiffre doit être positif.");
elif(x > 18):
    print("Le chiffre est trop grand.");
else:
    print("Le mot généré est:", mot(x));

Messages postés
14880
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
4 juin 2020
413
Bonsoir

je ne suis pas très bon en python mais l'idée c'est en fonction de la valeur de i dans
for i in range(x):

de "piocher" soit une voyelle soit une consonne.

Tu peux par exemple te servir de l'opérateur modulo qui retourne le reste de la division euclidienne.
Avec un range qui va de 0 à x (on va dire x = 4 pour l'exemple)
0 % 3 => 0, quand c'est 0 on prend une voyelle
1 % 3 => 1, quand c'est 1 on prend une consonne
2 % 3 => 2, quand c'est 2 on prend une consonne
3 % 3 => 0, quand c'est 0 on prend une voyelle

et ainsi de suite.
Parfait, je vais essayer cela
Finalement, j'ai trouvé la réponse, mais merci encore. le voici mon code:
#on crée deux listes (une voyelle et une consonne) pour qu'on puisse y accéder plus tard
voyelles = ["a", "e", "i", "o", "u", "y"]
consonnes = ["b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "z"]

#fonction pour les conditions des emplacements des lettres
def mot(x):
    string = ""  #on créé un string vide
    s = random.choice(voyelles)
    string += s    #on ajoute une lettre voyelle aléatoire comme premier lettre du mots généré
    voyelles.remove(s)   #on enleve le voyelle que le random choisit pour s'assurer que la même lettre n'est pas réutilisé
    i = 2
    while i <= x:
        if i % 3 == 1:
            s = random.choice(voyelles)
            string += s
            voyelles.remove(s)    #on enleve le voyelle que le random choisit pour s'assurer que la même lettre n'est pas réutilisé
        else:
            s = random.choice(consonnes)
            string += s
            consonnes.remove(s)   #on enleve la consonne que le random choisit pour s'assurer que la même lettre n'est pas réutilisé
        i += 1

    #pour s'assurer que la dernière lettre soit une consonne
    s = random.choice(consonnes)
    string = string.replace(string[-1], s)  #on remplace la dernière lettre pour s'assurer qu'elle soit toujour une consonne
    consonnes.remove(s)   #on enleve la consonne que le random choisit pour s'assurer que la même lettre n'est pas réutilisé
    return string

#programme principale pour que l'utilisateur saisit la longueur du mots
main = int(input("Entrez le nombre de lettres que vous voulez: "))

if main <= 0:
    print("Le chiffre doit être supérieure que 0")
elif main > 18:
    print("Le chiffre est trop grand")
else:
    print("Le mot généré est: ", mot(main))