INFO Python2 FEUILLE D'EXERCICE n° 17 MAI 2012
---------------------------------------------------------------------------------------------------------------
COURS:
Thème:
• list(.. mot... )
Pour transformer un mot en une liste de caractères:
Par exemple: list("Bonjour")
donne [ 'B','o','n','j','o','u',r ]
• Utilisation de: phrase.split()
( Cela transforme une phrase en une liste de chaines qui sont
les mots de la phrase . Les espaces deviennent des virgules.
Le tout est entre crochets.)
Par exemple: phrase=" Bonjour tous le monde"
PHRASE= phrase.split()
print PHRASE
affiche [ ' Bonjour' , 'tous' , 'le' , 'monde' ]
Cela donne une liste dont les termes sont les mots de phrase
Par contre:
phrase=" Bonjour tous le monde"
print phrase.split(",")
affiche [ ' Bonjour tous le monde' ]
Cela donne une liste dont le seul terme est la chaîne phrase
• strListe=' '.join(Liste)
Liste devient une chaîne où les termes de Liste sont juxetaposés.
Par exemple :
L=[ 'b' , 'e' , 'a' , 'u' ]
strL=' '.join(L)
print strL
affiche beau
L'espace entre les lettres est déterminé par ' '
• Trouver la plus grande valeur d'une liste de valeurs.
• Utliser une variable Bonne avec les "valeurs" False ou True.
• Utilisation de L[ :i] et L[i:]
avec 0 ≤ i< len(L)
Par exemple:
L= [ 7 , 2 , 6 , 8 , 1 ,9, 4 ]
print L[ :3 ] affiche [ 7 , 2 , 6 ]
c-à-d Cela affiche la liste des trois premiers termes de L
c-à-d Cela afiche [ L[0] , L[ 1 ] , L[ 2] ]
c-à-d Cela affiche la liste des termes de L d'indice strictement inférieur à 3
print L[ 3: ] affiche [ 8 , 1 , 9 , 4 ]
c-à-d Cela affiche la liste [ L3] , L[ 4 ] , L[ 5], L[6] ]
c-à-d Cela affiche la liste des termes de L qui ne sont pas dans L[:3]
c-à-d Cela affiche la liste des termes de L d'indice supérieur ou égal à 3
Par exemple avec une chaîne:
Soit mot = "abcdefgh"
print mot[:3 ]+ "A" + mot[3+1 :]
Cela affiche abcAefgh
d=mot[3] a été remplacé par A
----------------------------------------------------------------------------------
EXERCICE 1 bis
Ecrire un script qui transforme une chaîne de 5 tirets - - - - -
en une liste de chaînes [ '-' , ' - ' , ' - , ' - ' , ' - ' ]
puis transforme cette liste en la chaîne - - - - -
----------------------------------------------------------------------------------
REPONSE:
from random import*
def transfor():
mot="-"*5
print mot # mot est une chaîne constitué de 5 tirets - - - - -
L1=[]
for i in range(0,5):
L1.append(mot[i])
print L1 # L1 est une liste de chaînes [ '-' ,' -' ,' -' ,' -' ,' -' ]
strL1=' '.join(L1)
print strL1 # On a la chaîne mot de 5 tirets du départ
On obtient:
>>> transfor()
- - - - -
['-', '-', '-', '-', '-']
- - - - -
>>>
On a fait un aller et un retour
On peut aussi considérer:
from random import*
def transfor():
mot="-"*5
print mot # mot est une chaîne constitué de 5 tirets - - - - -
L1=list(mot)
print L1 # L1 est une liste de chaînes [' -' ,' -' ,' -' ,' -' ,' -' ] On évite une boucle
strL1=' '.join(L1)
print strL1 # On a la chaîne mot de 5 tirets du départ
On obtient la même chose
>>> transfor()
-----
['-', '-', '-', '-', '-']
- - - - -
>>>
-----------------------------------------------------------------------------------
EXERCICE 1 TER
Refaire avec le mot bonjour l'exercice précédent.
--------------------------------------------------------------------------------------------
REPONSE:
On considère:
from random import*
def transfor():
mot="Bonjour"
print mot
L1=[] # On peut utiliser L1=list(mot)
for i in range(0,7): # On économise la boucle
L1.append(mot[i])
print L1
strL1=' '.join(L1)
print strL1
On obtient
>>> transfor()
Bonjour
['B', 'o', 'n', 'j', 'o', 'u', 'r']
Bonjour
>>>
----------------------------------------------------------------------------------------------------
EXERCICE Quatro
Reprendre l'exercice précédent
mais en faisant apparaitre à la fin Bonsoir au lieu de Bonjour.
-----------------------------------------------------------------------------------------------
REPONSE: Considérons:
from random import*
def transfor():
mot="Bonjour"
print mot
L1=[]
for i in range(0,7):
L1.append(mot[i])
print L1
L1[3]='s' # une chaîne est remplacée par une chaîne
L1[5]='i'
strL1=' '.join(L1)
print strL1
On obient :
>>> transfor()
Bonjour
['B', 'o', 'n', 'j', 'o', 'u', 'r']
Bonsoir
>>>
On peut ainsi modifier tout caractère d'une chaîne.
-----------------------------------------------------------------------------------------------
EXERCICE 1 Quinto
Faire un script qui fait apparaître les termes d'une liste à partir
d'un certain indice puis les termes jusqu'à un certain indice.
--------------------------------------------------------------------------------------------------
REPONSE:
def partiel():
L=[11,54,7,5,18]
print L[1:] # cela affiche les termes à partir de l'indice 1 compris
print L[:3] # Cela affiche tous les termes jusqu'à l'indice 3 non compris
On obtient:
>>> partiel()
[54, 7, 5, 18]
[11, 54, 7]
>>>
-----------------------------------------------------------------------------------------------
EXERCICE 1
Ecrire un programme qui donne le mot le plus long d'une phrase
entrée par l'utilisateur.
-------------------------------------------------------------------------------------
Réponse possible:
def phrase():
ph=raw_input("Donner une phrase sans aiguillement: ")
Traduc=ph.split()
L=[len(element) for element in Traduc]
s=L[0]
for i in range(0,len(L)):
if s<L[i]:
s=L[i]
print "La longueur maximale des mots de la phrase est: ",s
for j in range(0,len(Traduc)):
if s==L[j]:
print "C'est: ",Traduc[j]
Par exemple :
>>> phrase()
Donner une phrase sans aiguillement: le plus beau jour de décembre
La longueur maximale des mots de la phrase est: 8
C'est: décembre
>>>
-----------------------------------------------------------------------------
EXERCICE 2
Trouver un programme qui permet à un joueur
de deviner lettre après lettre un mot caché de moins de 10 lettres.
Le joueur a droit a 10 essais.
Les lettres devinées sont retournées donc affichées et laissées
à leur place dans le mot à deviner.
---------------------------------------------------------------------------------------
Réponse On peut considérer:
from random import*
def jeu(m):
tirets ='-' * len(m) # Le mot caché m est sous la forme de petits tirets
# Chaque tiret remplace une lettre du mot caché
# n est le nombre d'essais du joueur. n est limité à 10
n=0
while n<10 and tirets!=m:
n = n+ 1
lettre=raw_input(" Entrer votre lettre entre aiguillemets: " )
i = 0 # Initialisation de i
while i<len(m):
if lettre==m[i] and tirets[i]=='-':
tirets = tirets[:i] + lettre + tirets[i+1:] # lettre étant m[i] on remplace le tiret qui représente m[i] par lettre
print tirets
i=i+1
if tirets ==m:
print " Vous avez gagné avec ", n, " essais"
else:
print "C'est perdu"
# PROGRAMME PRINCIPAL#
######################
print (" Quelqu'un, autre que le joueur, doit entrez le mot à deviner par le joueur. ")
m=raw_input(" Si vous ne jouez pas, entrez entre aiguillements un mot: ")
print " Le joueur peut commencer.", jeu(m)
print "Appuyez sur Entrer pour arrêter"
Par exemple:
>>>
Quelqu'un, autre que le joueur, doit entrez le mot à deviner par le joueur.
Si vous ne jouez pas, entrez entre aiguillements un mot: "table"
Le joueur peut commencer. Entrer votre lettre: "e"
----e
Entrer votre lettre: "t"
t---e
Entrer votre lettre: "r"
Entrer votre lettre: "a"
ta--e
Entrer votre lettre: "b"
tab-e
Entrer votre lettre: "f"
Entrer votre lettre: "l"
table
Vous avez gagné avec 7 essais
None
Appuyez sur Entrer pour arrêter
Autre exemple:
>>>
Quelqu'un, autre que le joueur, doit entrez le mot à deviner par le joueur.
Si vous ne jouez pas, entrez entre aiguillements un mot: "table"
Le joueur peut commencer. Entrer votre lettre: "h"
Entrer votre lettre: "r"
Entrer votre lettre: "a"
-a---
Entrer votre lettre: "l"
-a-l-
Entrer votre lettre: "w"
Entrer votre lettre: "d"
Entrer votre lettre: "t"
ta-l-
Entrer votre lettre: "f"
Entrer votre lettre: "k"
Entrer votre lettre: "e"
ta-le
C'est perdu
None
Appuyez sur Entrer pour arrêter
>>>
----------------------------------------------------------------------------------
EXERCICE 3
Même question que dans l'exercice précédent mais
en utilisant des listes.
Le mot à chercher sera converti en liste de caractères.
Une liste de tirets remplacera au début le mot.
-----------------------------------------------------------------------------------
REPONSE
On peut considérer le script suivant :
Son intérêt est qu'il est plus facile de comparer deux listes .
from random import*
def jeu(m):
M=list(m) # M est la liste des caractères du mot m
tirets ="-" * len(m) # tirets est une chaîne de len(m) tirets
T=list(tirets) # T est une liste de len(m) tirets
n=0
while n<10 and T!=M:
n = n+ 1
lettre=input(" Entrer votre lettre: " )
i=0
while (i<len(m)):
if (T[i]=='-' and lettre==M[i]):
T[i]=lettre
strT=''.join(T) # ' '.joint(T) tranforme la liste T en une chaîne. L'espace entre les caractère est entre ' '
tirets=strT
print tirets
i=i+1
if(tirets ==m):
print " Vous avez gagné avec ", n, " essais"
else:
print( "C'est perdu")
# PROGRAMME PRINCIPAL#
######################
print (" Quelqu'un, autre que le joueur, doit entrez le mot à deviner par le joueur. ")
m=input(" Si vous ne jouez pas, entrez entre aiguillements un mot: ")
print " Le joueur peut commencer.", jeu(m)
print ( "Appuyez sur Entrer pour arrêter")
Par exemple:
>>>
Quelqu'un, autre que le joueur, doit entrez le mot à deviner par le joueur.
Si vous ne jouez pas, entrez entre aiguillements un mot: "table"
Le joueur peut commencer. Entrer votre lettre: "a"
-a---
Entrer votre lettre: "e"
-a--e
Entrer votre lettre: "b"
-ab-e
Entrer votre lettre: "t"
tab-e
Entrer votre lettre: "l"
table
Vous avez gagné avec 5 essais
None
Appuyez sur Entrer pour arrêter
>>>
-----------------------------------------------
EXERCICE 4
Ecrire un algorithme qui propose un tirage parmi les secteurs 0;1;2;3;4 d'une roue.
Puis qui indique le gain en euros.
En cas d'absence de gain il demande de passer à un autre joueur.
Si le gain est 100 € ou 50 € il propose alors
de faire deviner lettre par lettre un mot choisi aléatoirement dans une
liste de cinq noms indiquée au joueur pour l'aider.
--------------------------------------------------------------------
REPONSE: On peut proposer:
from random import*
def jeu():
L=[]
for i in range (5):
d=randint(1,10)
L.append(d)
a=input("Choisissez un secteur parmi les secteurs 0,1,2,3,4 de la roue ")
if a in L[3:]:
y=100
print " Vous gagnez ",100,"euros"
return message()
elif a in L[:3]:
y=50
print " Vous gagnez ",50,"€"
return message()
else:
print "Passez votre tour"
return jeu()
def message():
F=["maison","table","miroir","chaise","feuille"]
print "Le mot pour vous aider est dans la liste ", F
mot=choice(F)
tirets ='-'*len(mot)
print tirets
n=0
while n<10 and tirets!=mot:
n=n+1
lettre=raw_input(" Entrer votre lettre sans guillemet: ")
i = 0
while i<len(mot):
if lettre== mot[i] and tirets[i]=="-":
tirets =tirets[:i]+lettre+tirets[i+1:]
print tirets
i=i+1
if tirets==mot:
print " Vous avez gagné avec ", n," essais"
else:
print "C'est perdu"
Par exemple:
>>> jeu()
Choisissez un secteur parmi les secteurs 0,1,2,3,4 de la roue 4
Vous gagnez 50 €
Le mot pour vous aider est dans la liste ['maison', 'table', 'miroir', 'chaise', 'feuille']
------
Entrer votre lettre sans guillemet: a
Entrer votre lettre sans guillemet: t
Entrer votre lettre sans guillemet: m
m-----
Entrer votre lettre sans guillemet: i
mi----
mi--i-
Entrer votre lettre sans guillemet: r
mir-i-
mir-ir
Entrer votre lettre sans guillemet: o
miroir
Vous avez gagné avec 6 essais
>>>
Par exemple
>>> jeu()
Choisissez un secteur parmi les secteurs 0,1,2,3,4 de la roue 2
Vous gagnez 100 euros
Le mot pour vous aider est dans la liste ['maison', 'table', 'miroir', 'chaise', 'feuille']
------
Entrer votre lettre sans guillemet: f
Entrer votre lettre sans guillemet: a
--a---
Entrer votre lettre sans guillemet: b
Entrer votre lettre sans guillemet: m
Entrer votre lettre sans guillemet: i
--ai--
Entrer votre lettre sans guillemet: c
c-ai--
Entrer votre lettre sans guillemet: h
chai--
Entrer votre lettre sans guillemet: s
chais-
Entrer votre lettre sans guillemet: e
chaise
Vous avez gagné avec 9 essais
>>>
Par exemple
>>> jeu()
Choisissez un secteur parmi les secteurs 0,1,2,3,4 de la roue 4
Passez votre tour
Choisissez un secteur parmi les secteurs 0,1,2,3,4 de la roue 3
Passez votre tour
Choisissez un secteur parmi les secteurs 0,1,2,3,4 de la roue 1
Passez votre tour
Choisissez un secteur parmi les secteurs 0,1,2,3,4 de la roue 2
Vous gagnez 50 €
-----
Entrer votre lettre sans guillemet: a
-a---
Entrer votre lettre sans guillemet: m
Entrer votre lettre sans guillemet: i
Entrer votre lettre sans guillemet: s
Entrer votre lettre sans guillemet: n
Entrer votre lettre sans guillemet: f
Entrer votre lettre sans guillemet: o
Entrer votre lettre sans guillemet: t
ta---
Entrer votre lettre sans guillemet: b
tab--
Entrer votre lettre sans guillemet: l
tabl-
C'est perdu
>>>
-------------------------------------------------------------------