Comparaison "string"

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.
Configuration: Windows XP
Firefox 3.0.3

6 réponses

  1. Contributeur
    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
    1. Contributeur
      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
      1. 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
    2. Contributeur
      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
      1. 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
    3. 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
      1. Contributeur
        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
        1. 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
      2. Contributeur
        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
        1. 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