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

6 réponses

  1. fiddy Messages postés 441 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
  2. fiddy Messages postés 441 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
    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
  3. fiddy Messages postés 441 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
    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
  4. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. fiddy Messages postés 441 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
    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
  7. fiddy Messages postés 441 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
    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