Exercice 1 - Jeu des capitales
Le but de cet exercice est de programmer un jeu permettant de réviser ses connaissances sur les capitales du monde. Le fichier capitales.txt contient une liste associant les pays et les capitales sur une même ligne en les séparant d'une espace (les espace dans les noms de pays ont été remplacées par le caractère _ ; par exemple "Afrique du Sud" est remplaçé par "Afrique_du_Sud".Écrire un script qui entre les données du fichier capitales.txt dans un dictionnaire (le nom du pays servant de clé).
Écrire un script qui crée le dictionnaire inverse (ou les noms des capitales sont les clés).
Écrire un script qui affiche un menu du type
Entrer votre choix :1 - Apprendre les pays
2 - Apprendre les capitales
3 - Quizz par capitales
4 - Quizz par pays
5 - Quitter
- entrer le nom d'une capitale et obtenir le nom du pays (choix 1),
- entrer le nom d'un pays et obtenir le nom de la capitale (choix 2),
- donner le nom du pays correspondant à la capitale choisie par le programme (choix 3),
- donner le nom de la capitale correspondant au pays choisi par le programme (choix 3),
Améliorer le programme pour que la réponse de l'utilisateur soit validée même si il a utilisé une majuscule au lieu d'une minuscule, une minuscule au lieu d'une majuscule, une espace au lieu d'un "_", ...
#!/usr/bin/python # -*- coding: latin-1 -*- from re import * import random def ApprendrePays(): while True: pays = raw_input("Entrer le nom d'un pays : ") if pays == '': break pays = pays[0].upper()+pays[1:].lower() if dicoPC.has_key(pays): print "La capitale de :", pays, "est :", \ dicoPC[pays] else: print "Pays inconnu" def ApprendreCapitale(): while True: capitale = raw_input("Entrer la capitale : ") if capitale == '': break capitale = capitale[0].upper()+capitale[1:].lower() if dicoCP.has_key(capitale): print capitale, "est la capitale de :", \ dicoCP[capitale] else: print "Capitale inconnue" def QuizzPays(): ListePays = dicoPC.keys() while True: indice = random.randint(0,len(ListePays)) print "Quelle est la capitale de :", \ ListePays[indice], "?" capitale = raw_input() if capitale == '': print dicoPC[ListePays[indice]], \ "est la capitale de :", ListePays[indice] break capitale = capitale[0].upper()+capitale[1:].lower() if dicoPC[ListePays[indice]]==capitale: print "Bravo !" else: print "Non,", dicoPC[ListePays[indice]], \ "est la capitale de :", ListePays[indice] def QuizzCapitales(): ListeCapitales = dicoCP.keys() while True: indice = random.randint(0,len(ListeCapitales)) print "De quel pays", ListeCapitales[indice], \ "est-elle la capitale ?" pays = raw_input() if pays == '': print ListeCapitales[indice], \ "est la capitale de :",\ dicoCP[ListeCapitales[indice]] break pays = pays[0].upper()+pays[1:].lower() if dicoCP[ListeCapitales[indice]]==pays: print "Bravo !" else: print "Non,", ListeCapitales[indice], \ "est la capitale\ de :", dicoCP[ListeCapitales[indice]] ############################################ ############################################ filein = open('capitales.txt','r') dicoPC = {} lignes = filein.readlines() for ligne in lignes: dicoPC[sub('_',' ',split(' ',ligne,1)[0])]=sub('\n','',\ split(' ',ligne,1)[1]) dicoCP = {} for clef in dicoPC: dicoCP[dicoPC[clef]] = clef filein.close() while True: print """ 1 - Apprendre les pays 2 - Apprendre les capitales 3 - Quizz par capitales 4 - Quizz par pays 5 - Quitter """ while True: choix = raw_input("Entrer votre choix : ") if choix in ['1','2','3','4','5']: break if choix=='1': ApprendrePays() if choix=='2': ApprendreCapitale() if choix=='3': QuizzCapitales() if choix=='4': QuizzPays() elif choix=='5': break
Exercice 2 - La roue de la fortune
Écrire un script qui prend entrée une chaîne de caractères contenant uniquement des lettres, des espaces et des tirets "-" et affiche la liste des mots possibles formés de mots du dictionnaire français où les tirets sont remplacés par des lettres. Par exemple, pour l'entrée : LA R-UE -E LA --RTUNE, le programme devra afficher :
Les solutions possibles pour LA R-UE -E LA -ORTU-E sont : 1. LA 1. ROUE 1. CE 2. DE 3. JE 4. LE 5. ME 6. NE 7. SE 8. TE 1. LA 1. FORTUNE 2. TORTURE
Modifier votre script pour qu'il prenne en entrée une liste des lettres déjà proposées et ne retourne que les solutions ne contenant pas ces lettres.
#!/usr/bin/python # -*- coding: latin-1 -*- from re import * filein = open('/usr/share/dict/french','r') mots = filein.read() filein.close() while True: chaine = raw_input('Entrer une chaîne de caractères : ') if not search('[^A-Za-z\- ]',chaine): break while True: listelettres = raw_input('Entrer la liste des \ lettres utilisées :') if not search('[^A-Za-z]',listelettres): break listelettres=listelettres.lower()+sub('[ \-]','',chaine).lower() # Les lettres contenues dans la chaine ont aussi été proposées print "Les solutions possibles pour :", chaine.upper(), "sont" print chaine=sub('-','.',chaine.lower()) liste=split(' ',chaine) for mot in liste: Occurences = findall('\n'+mot+'\n',mots) i = 1 for motvalide in Occurences: motvalide = sub('\n','',motvalide) test = True for j in range(len(mot)): if mot[j] == "." and \ motvalide[j] in listelettres: test = False if test: print i, motvalide.upper() i+=1 if i==1: print "Pas de solution pour ce mot !" print