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.
Whismeril
Messages postés18416Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 1 juin 2023624 9 avril 2020 à 08:38
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));
Whismeril
Messages postés18416Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 1 juin 2023624 9 avril 2020 à 20:53
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
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))
9 avril 2020 à 18:19