Comparaison "string"

débutante en python -  
 débutante en python -
Bonjour,
Je veux que le joueur puisse saisir son déplacement en entrant des lettres et non des chiffres au départ:

print"quel deplacement souhaitez vous effectuer: nord, sud, est, ouest?"
choix=input("choisissez un deplacement")

Puis, je veux vérifier que les lettres saisies correspondent bien à un déplacement, s'il saisie ' norfgt' je veux afficher un message d'erreur mais comment puis-je faire? J'ai fait une fonction de vérification:

def bonsaisie(grille,a):
if a<>'nord' and a<>'sud' and a<>'est' and a<>'ouest':
return False
else:
return True

Mais elle ne marche pas, je ne veux pas utiliser de chiffres qui correspondraient à un déplacement, je veux absoluement comparer des éléments "string" en fait et je ne sait pas comment l'écrire.
Merci de me conseiller.
A voir également:

6 réponses

fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Salut,
dic=('nord','sud','est','ouest')
print"quel deplacement souhaitez vous effectuer: nord, sud, est, ouest?"
choix=input_raw("choisissez un deplacement")
if choix is not dic:
    print 'mauvais choix'
else:
    print 'bon choix'

Tu peux même faire une boucle tant que le choix n'est pas bon ;)
1
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Affiche ton code dans l'ensemble, ça sera plus simple pour débugguer.
Et stp, utilise le bouton de conservation automatique du code (à droite de souligner) pour garder l'indentation.
1
débutante en python
 
Je t'ai mis tout ce dont je me sert, c surtout la fin qui est importante: la fonction deplacement et partie!
Si t'as le courage de t'y plonger, se serait génial sinon, t'en fais pas j'essayerais de me débrouillerais autrement.



def creergrille():
grille=[0 for i in range(20)]
possible=range(20)
possible=random.sample(possible,2)
for i in range (2):
grille[possible[i]]=(i%2)+1
affiche(grille)
return grille

def affiche(grille):
code=['.','p','T']
for i in range (5):
print code[grille[4*i]],code[grille[4*i+1]],code[grille[4*i+2]],code [grille[4*i+3]]

def gagnant(grille):
gagne=False
if grille.count(1)==0:
gagne=True
return gagne

def cherchecase(grille,animal):
x=0
while (x<20):
if grille[x]==animal:
case=x
x=x+1
return case

def deplacer(grille,depart,arrivee):
grille2=copy.deepcopy(grille)
grille2[arrivee]=grille2[depart]
grille2[depart]=0
return grille2

def nord(case):
if case<4:
case=case+16
else:
case=case-4
return case

def deplacement(g,choix,case):
if choix=='nord':
g=deplacer(copy.deepcopy(g),case,nord(case))
if choix=='sud':
g=deplacer(copy.deepcopy(g),case,sud(case))
if choix=='est':
g=deplacer(copy.deepcopy(g),case,est(case))
if choix=='ouest':
g=deplacer(copy.deepcopy(g),case,ouest(case))
affiche(g)
return g

def partie():
g=creergrille()
tmax=2
t=0
dic=(nord,sud,est,ouest)
i=randint(1,2)
while ((gagnant(g)==False) and (t<tmax)):
if i!=2:
i=i+1
case=cherchecase(g,2)
else:
i=1
case=cherchecase(g,1)
print "joueur %s c'est à vous:"%(i)
print"quel deplacement souhaitez vous effectuer: nord, sud, est, ouest?"
choix=raw_input("choisissez un deplacement")
while choix not in dic:
choix=raw_input("erreur, choisissez un deplacement")
deplacement(g,choix,case)
affiche(g)
if i!=2:
i=i+1
case=cherchecase(g,2)
else:
i=1
case=cherchecase(g,1)
print "joueur %s c'est à vous:"%(i)
print"quel deplacement souhaitez vous effectuer: nord, sud, est, ouest?"
choix=raw_input("choisissez un deplacement")
while choix not in dic:
choix=raw_input("erreur, choisissez un deplacement")
deplacement(g,choix,case)
affiche(g)
t=t+1
print "La partie est finie"
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Apparemment t'as pas bien lu ce que je t'ai dit.
Poste ton code en utilisant le bouton de conservation automatique du code (à droite de souligner)
1
débutante en python
 
def creergrille():
grille=[0 for i in range(20)]
possible=range(20)
possible=random.sample(possible,2)
for i in range (2):
grille[possible[i]]=(i%2)+1
affiche(grille)
return grille

def affiche(grille):
code=['.','p','T']
for i in range (5):
print code[grille[4*i]],code[grille[4*i+1]],code[grille[4*i+2]],co­de [grille[4*i+3]]

def gagnant(grille):
gagne=False
if grille.count(1)==0:
gagne=True
return gagne

def cherchecase(grille,animal):
x=0
while (x<20):
if grille[x]==animal:
case=x
x=x+1
return case

def deplacer(grille,depart,arrivee):
grille2=copy.deepcopy(grille)
grille2[arrivee]=grille2[depart]
grille2[depart]=0
return grille2

def nord(case):
if case<4:
case=case+16
else:
case=case-4
return case

def deplacement(g,choix,case):
if choix=='nord':
g=deplacer(copy.deepcopy(g),case,nord(case))
if choix=='sud':
g=deplacer(copy.deepcopy(g),case,sud(case))
if choix=='est':
g=deplacer(copy.deepcopy(g),case,est(case))
if choix=='ouest':
g=deplacer(copy.deepcopy(g),case,ouest(case))
affiche(g)
return g

def partie():
g=creergrille()
tmax=2
t=0
dic=(nord,sud,est,ouest)
i=randint(1,2)
while ((gagnant(g)==False) and (t<tmax)):
if i!=2:
i=i+1
case=cherchecase(g,2)
else:
i=1
case=cherchecase(g,1)
print "joueur %s c'est à vous:"%(i)
print"quel deplacement souhaitez vous effectuer: nord, sud, est, ouest?"
choix=raw_input("choisissez un deplacement")
while choix not in dic:
choix=raw_input("erreur, choisissez un deplacement")
deplacement(g,choix,case)
affiche(g)
if i!=2:
i=i+1
case=cherchecase(g,2)
else:
i=1
case=cherchecase(g,1)
print "joueur %s c'est à vous:"%(i)
print"quel deplacement souhaitez vous effectuer: nord, sud, est, ouest?"
choix=raw_input("choisissez un deplacement")
while choix not in dic:
choix=raw_input("erreur, choisissez un deplacement")
deplacement(g,choix,case)
affiche(g)
t=t+1
print "La partie est finie"
0
débutante en python
 
Un merci pour cette aide très précieuse, meme si je suis débutante, permet moi de te rectifier: c'est pas input-raw mais raw_input! Je suppose que c'était une erreur d'étourderie. Maintenant, j'ai un autre probleme. Voila mon programme:
dic=('nord','sud','est','ouest')
print"quel deplacement souhaitez vous effectuer: nord, sud, est, ouest?"
choix=raw_input("choisissez un deplacement")
while choix is not dic:
choix=raw_input("erreur, choisissez un deplacement")

Sauf que quand je fais tourner mon programme, il m'affiche que tous mes déplacements sont impossibles:

quel deplacement souhaitez vous effectuer: nord, sud, est, ouest?
choisissez un deplacementnord
erreur, choisissez un deplacementsud
erreur, choisissez un deplacementest
erreur, choisissez un deplacementouest
erreur, choisissez un deplacementhfizopg
erreur, choisissez un deplacement

Si tu as quelques minutes à m'accorder, je t'en serais très reconnaissante!
Merci d'avance.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Ouh là
J'ai fait des étourderies. Désolé.
dic=('nord','sud','est','ouest')
print"quel deplacement souhaitez vous effectuer: nord, sud, est, ouest?"
choix=raw_input("choisissez un deplacement")
ifchoix in dic:
    print 'bon choix'
else:
    print 'mauvais choix'

J'espère qu'il n'y a plus d'erreurs :)
-1
débutante en python
 
encore merci pour ton aide. Maintenant j'ai un nouveau probleme qui se pose et qui ne se posait pas avant: le déplacement qui était pris en compte avec la variable choix, je le réutilisais après dans une fonction. Par exemple, si choix=nord alors je fais le déplacement vers le nord et pour cela j'utilise la fonction: choix(case) autrement dit la fonction nord(case). Voici mon programme pour mieux comprendre car mes explications ne suffisent peut etre pas:

dic=['nord','sud','est','ouest']
choix=raw_input("choisissez un deplacement")
while choix not in dic:
choix=raw_input("erreur, choisissez un deplacement")
g=deplacer(copy.deepcopy(g),case,choix(case))

Et voila ce que ça me dit: (ok ça marche quand c'est un déplacement impossible mais ma fonction marche plus)

choisissez un deplacement dof
erreur, choisissez un deplacement nord
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
partie()
File "C:\Documents and Settings\Charpentier\Bureau\Marine\grille2L3.py", line 126, in partie
g=deplacer(copy.deepcopy(g),case,choix(case))
TypeError: 'str' object is not callable

Si ça te dérange pas de m'aider encore une fois ce serait super, après ça je pense que ça sera bon!
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
choix contient 'nord', 'sud', 'est' ou 'ouest'
et après tu fais choix(case). Ce qui revient à 'nord'(case).
Je ne sais pas ce que représente case. Mais si case est ta fonction, case(choix) serait plus logique ;)
-1
débutante en python
 
def nord(case):
if case<4:
case=case+16
else:
case=case-4
return case

c'est cette fonction qui veut pas s'effectuer correctement car choix prend 'nord' et non pas nord. case c'est une variable quelconque, c'est pas elle qui importe.
J'ai essayé de changer dic en mettant dic=(nord,sud,est,ouest) (en enlevant les apostrophes) mais après il reconnait plus mes déplacement.
En fait si ma variable choix='nord' alors je veux appliquer la fontion nord:

def deplacement(g,choix,case):
if choix=='nord':
g=deplacer(copy.deepcopy(g),case,nord(case))

il reconnait tjs pas mais déplacement, il m'affiche "erreur, choississez un autre déplacement" a chaque fois!
0