Aller au contenu

Morpion en python


loriss

Messages recommandés

Membre, 22ans Posté(e)
loriss Membre 54 messages
Baby Forumeur‚ 22ans‚
Posté(e)

def changegrille(i, j, val):
   j=0
   i=0
   A1="0"
   A2="0"
   A3="0"
   B1="0"
   B2="0"
   B3="0"
   C1="0"
   C2="0"
   C3="0"
   val = [[A1,A2,A3,],[B1,B2,B3,],[C1,C2,C3]

def affichegrille():
    print("     0)  1)  2)")
    print("   -------------")
    print("A)", end='')
    print((" | "), end='')
    print((val[j]), end='')
    print((" | "), end='')
    print((val[j]), end='')
    print((" | "), end='')
    print((val[j]), end='')
    print(" | ")
    print("   -------------")
    print("B)", end='')
    print((" | "), end='')
    print((val[j]), end='')
    print((" | "), end='')
    print((val[j]), end='')
    print((" | "), end='')
    print((val[j]), end='')
    print(" | ")
    print("   -------------")
    print("C)", end='')
    print((" | "), end='')
    print((val[j]), end='')
    print((" | "), end='')
    print((val[j]), end='')
    print((" | "), end='')
    print((val[j]), end='')
    print(" | ")
    print("   -------------")
    
change grille(i, j, val)
affichegrille()

bonjour voici mon programme, j'ai un message d'erreur "line 15 def affichegrille(): ^ SyntaxError: invalid syntax" mais je n'arrive pas à le corriger seul, si l'on pourrait m'éclairer, merci d'avance

@riad**

Lien à poster
Partager sur d’autres sites

Annonces
Maintenant
Invité riad**
Invités, Posté(e)
Invité riad**
Invité riad** Invités 0 message
Posté(e)

Même s'il t'indique la ligne 15, l'erreur est dans la ligne précédente :

val = [[A1,A2,A3,],[B1,B2,B3,],[C1,C2,C3]]

Python attend de toi de fermer la parenthèse et à la place il trouve "def affichegrille():" donc il te signale l'erreur au niveau de cette ligne.

Lien à poster
Partager sur d’autres sites

Membre, 22ans Posté(e)
loriss Membre 54 messages
Baby Forumeur‚ 22ans‚
Posté(e)

def changegrille():
    j=0
    i=0
    A1="0"
    A2="0"
    A3="0"
    B1="0"
    B2="0"
    B3="0"
    C1="0"
    C2="0"
    C3="0"
    val = [[A1,A2,A3,],[B1,B2,B3,],[C1,C2,C3]]

def affichegrille():
    print("     0)  1)  2)")
    print("   -------------")
    print("A)", end='')
    print((" | "), end='')
    print((val[j]), end='')
    print((" | "), end='')
    print((val[j]), end='')
    print((" | "), end='')
    print((val[j]), end='')
    print(" | ")
    print("   -------------")
    print("B)", end='')
    print((" | "), end='')
    print((val[j]), end='')
    print((" | "), end='')
    print((val[j]), end='')
    print((" | "), end='')
    print((val[j]), end='')
    print(" | ")
    print("   -------------")
    print("C)", end='')
    print((" | "), end='')
    print((val[j]), end='')
    print((" | "), end='')
    print((val[j]), end='')
    print((" | "), end='')
    print((val[j]), end='')
    print(" | ")
    print("   -------------")
    
changegrille()
affichegrille()

merci bien je ne l'avais pas vue, mais maintenant je plus d'erreur "line 47, in <module> affichegrille() File " "line 20, in affichegrille print((val[j]), end='') NameError: name 'val' is not defined" j'ai regardé les lignes au dessus,

@riad**

Lien à poster
Partager sur d’autres sites

Invité riad**
Invités, Posté(e)
Invité riad**
Invité riad** Invités 0 message
Posté(e)
il y a 12 minutes, loriss a dit :

merci bien je ne l'avais pas vue, mais maintenant je plus d'erreur "line 47, in <module> affichegrille() File " "line 20, in affichegrille print((val[j]), end='') NameError: name 'val' is not defined" j'ai regardé les lignes au dessus,

 

@riad**

 

val est une variable locale, tu l'as défini au niveau de la function changegrille elle ne sera pas reconnue dans la function affichegrille

Même si j'ai pas compris la logique du jeu, je pense que tu dois faire en sorte que la première function te retourne la valeur de val
 

def changegrille(i, j, val):

    ...

   return val

def affichegrille(i, j, v):

   val = changegrille(i, j, v)

 

Et à la fin tu n'auras besoin d'appeler qu'une seule function.

Lien à poster
Partager sur d’autres sites

Membre, Talon 1, 80ans Posté(e)
Talon 1 Membre 24 618 messages
80ans‚ Talon 1,
Posté(e)
il y a 12 minutes, riad** a dit :

val est une variable locale, tu l'as défini au niveau de la function changegrille elle ne sera pas reconnue dans la function affichegrille

Même si j'ai pas compris la logique du jeu, je pense que tu dois faire en sorte que la première function te retourne la valeur de val
 

def changegrille(i, j, val):

    ...

   return val

def affichegrille(i, j, v):

   val = changegrille(i, j, v)

 

Et à la fin tu n'auras besoin d'appeler qu'une seule function.

Quel touche-à-tout ce sémite ! J'en profite : comment supprimer Malwarebytes ? C'est un pollueur qui prétend protéger.

Lien à poster
Partager sur d’autres sites

Membre, 22ans Posté(e)
loriss Membre 54 messages
Baby Forumeur‚ 22ans‚
Posté(e)
Lien à poster
Partager sur d’autres sites

Invité riad**
Invités, Posté(e)
Invité riad**
Invité riad** Invités 0 message
Posté(e)
il y a 10 minutes, Talon 1 a dit :

Quel touche-à-tout ce sémite ! J'en profite : comment supprimer Malwarebytes ? C'est un pollueur qui prétend protéger.

À vrai dire je sais pas exactement, je suis un utilisateur de Linux, Je ne connais rien en Windows, mais en général, il faut arrêter l'exécution d'une application avant de la désinstaller, si elle tourne en arrière plan, il faut tuer le processus, windows possède un bordel qu'on appelle "clés de registre", parfois il faut l'éditer, regarde sur cette page : https://www.malekal.com/desinstaller-supprimer-malwarebytes-anti-malware-mbam/

Lien à poster
Partager sur d’autres sites

Membre, 22ans Posté(e)
loriss Membre 54 messages
Baby Forumeur‚ 22ans‚
Posté(e)

@riad** 

du coup tu ne sais pas.....? 

pour moi 

 

Lien à poster
Partager sur d’autres sites

Invité riad**
Invités, Posté(e)
Invité riad**
Invité riad** Invités 0 message
Posté(e)
il y a 23 minutes, loriss a dit :

dsl je ne comprend pas;

je vous envoie mes consignes pour être plus clair je suis à l'étape 1.1

 

Microsoft Word - projet TicTacToe.doc.pdf 425.61 Ko · 1 download

C'est simple, il y a deux sortes de variables, locales et globales, si je défini une variable à l'intérieure d'une fonction., sa portée ne dépassera pas la fonction par exemple :

def truc() :
  val = "bidule"
  return val

def machin():
  return val # val est une variable locale donc spécifique à la function truc(), elle ne sera pas reconnue.

>>> machin()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in machin
NameError: name 'val' is not defined



def truc2():
  # on va définir val comme variable globale reconnaissable dans l'ensemble de notre code 
  global val
  val = "bidule"
  return val

def machin():
  return val

# là ça marche.

 

Lien à poster
Partager sur d’autres sites

Membre, 22ans Posté(e)
loriss Membre 54 messages
Baby Forumeur‚ 22ans‚
Posté(e)

merci beaucoup, je continue le reste du TP

@riad**

 

Lien à poster
Partager sur d’autres sites

Membre, Chien Fou forumeur, 91ans Posté(e)
Promethee_Hades Membre 25 564 messages
91ans‚ Chien Fou forumeur,
Posté(e)

Bon bien , le python, j'ai laissé tombé, il me semblait intéressant comme langage, mais quand j'ai vu qu'au niveau des types c'est pas la joie. J'aime les langage très fortement types. C'est vrai c'est plus pénible à mettre au point un programme, mais on ne cherche pas pendant des mois un bug lié à une distraction.

Lien à poster
Partager sur d’autres sites

Membre, 22ans Posté(e)
loriss Membre 54 messages
Baby Forumeur‚ 22ans‚
Posté(e)

def changegrille():
    global val,i,j
    global A1,A2,A3,B1,B2,B3,C1,C2,C3
    j=0
    i=0
    A1="0"
    A2="0"
    A3="0"
    B1="0"
    B2="0"
    B3="0"
    C1="0"
    C2="0"
    C3="0"
    val = [[A1,A2,A3,],[B1,B2,B3,],[C1,C2,C3]]
    return val

def affichegrille():
    print("     0)  1)  2)")
    print("   -------------")
    print("A)", end='')
    print((" | "), end='')
    print((val[j]), end='')
    print((" | "), end='')
    print((val[j]), end='')
    print((" | "), end='')
    print((val[j]), end='')
    print(" | ")
    print("   -------------")
    print("B)", end='')
    print((" | "), end='')
    print((val[j]), end='')
    print((" | "), end='')
    print((val[j]), end='')
    print((" | "), end='')
    print((val[j]), end='')
    print(" | ")
    print("   -------------")
    print("C)", end='')
    print((" | "), end='')
    print((val[j]), end='')
    print((" | "), end='')
    print((val[j]), end='')
    print((" | "), end='')
    print((val[j]), end='')
    print(" | ")
    print("   -------------")
    
def testH():
    if A1==A2 and A2==A3 or B1==B2 and B2==B3 or C1==C2 and C2==C3:
      return True
    else:
      return False
def testV():
    if A1==B1 and B1==C1 or A2==B2 and B2==C2 or A3==B3 and B3==C3:
      return True
    else:
      return False
def testD():
    if A1==B2 and B2==C3 or A3==B2 and B2==C1:
      return True
    else:
      return False

    
changegrille()   
affichegrille()
testH()
testV()
testD()

 

voici ce que j'ai fait pour l'étape 1.1.....

pour l'étape 2.1 je n'ai pas compris ce que l'on me demande précisément : pouvez vous me le reformuler svp

2. Nouvelles variables et fonctions et spécialisation pour le jeu des fonctions existantes. Créez la variable joueur en lui affectant aléatoirement le chiffre 1 ou 2. Créez la fonction afficheGrilleMorp() prenant comme attribut un tableau contenant uniquement les valeurs 0,1 et 2 et qui affiche la grille dans la console avec un espace pour la valeur 0, un X pour la valeur 1 et un O pour la valeur 2. Attention, il faudra aussi que les lignes et les colonnes soient numérotées dans votre affichage. Créez la fonction changeGrilleMorp(i, j, val) qui utilise grille comme variable globale et qui, si la case de grille contient un 0, affecte val à l’élément de grille qui se trouve à la ligne i et à la colonne j et revoie True et renvoie False sinon (les appels à cette fonction se feront sous la forme : changeGrilleMorp(i, j,joueur) ) . La fonction changeJoueur() prendra joueur comme variable globale et qui fera passer la valeur de joueur de 1 à 2 ou de 2 à 1. Créez la fonction joueMorp(), utilisant des variables globales, qui demande au joueur joueur dans quelle case il veut jouer, change la case qui correspond dans la grille avec changeGrilleMorp teste les alignements (et le gain de la partie) et affiche la nouvelle grille. Faire en sorte que 2 joueurs humains puissent jouer l’un contre l’autre.

Lien à poster
Partager sur d’autres sites

Membre, 22ans Posté(e)
loriss Membre 54 messages
Baby Forumeur‚ 22ans‚
Posté(e)
Lien à poster
Partager sur d’autres sites

Invité riad**
Invités, Posté(e)
Invité riad**
Invité riad** Invités 0 message
Posté(e)

@loriss

Évite de déclarer des variables globales sauf si nécessaire, l'exemple que je t'ai donné c'est simplement pour que tu comprennes la différence entre une variable locale et globale, fait simplement :
 

def changegrille(i, j, val):
   j=0
   i=0
   A1="0"
   A2="0"
   A3="0"
   B1="0"
   B2="0"
   B3="0"
   C1="0"
   C2="0"
   C3="0"
   val = [[A1,A2,A3,],[B1,B2,B3,],[C1,C2,C3]]

   return val

def affichegrille(i, j, v):

    val = changegrille(i, j, v):
    print("     0)  1)  2)")
    print("   -------------")
    print("A)", end='')
    print((" | "), end='')
    print((val[j]), end='')
    print((" | "), end='')
    print((val[j]), end='')
    print((" | "), end='')
    print((val[j]), end='')
    print(" | ")
    print("   -------------")
    print("B)", end='')
    print((" | "), end='')
    print((val[j]), end='')
    print((" | "), end='')
    print((val[j]), end='')
    print((" | "), end='')
    print((val[j]), end='')
    print(" | ")
    print("   -------------")
    print("C)", end='')
    print((" | "), end='')
    print((val[j]), end='')
    print((" | "), end='')
    print((val[j]), end='')
    print((" | "), end='')
    print((val[j]), end='')
    print(" | ")
    print("   -------------")

changegrille()   
affichegrille()

T'as plus besoin de faire appel à la fonction changegrille() parce que c'est affichegrille() qui s'en occupe, par contre t'auras toujours un message d'erreur parce que la fonction affichegrille() prend maintenant trois paramètres : i, j et v et tu n'as mentionné aucune., les paramètres positionnels

les fonctions prennent deux types de paramètres positionnels que tu dois absolument déclarer, par exemple :

def truc(a, b) :

Si tu fais appel à la fonction sans les paramètres a et b, t'as un message d'erreur
 

truc(5, 3), ça marche

et les paramètres nommés par exemple :

truc (a=5)

si tu appelles la fonction sans paramètre il n'y a pas de message d'erreur, parce qu'elle va prendre 5 comme valeur par défaut.
 

On s'arrête là, je vais me déconnecter, je  répondrai à tes questions demain.
 

Lien à poster
Partager sur d’autres sites

Membre, 22ans Posté(e)
loriss Membre 54 messages
Baby Forumeur‚ 22ans‚
Posté(e)

pas de soucis à demain..

 

Lien à poster
Partager sur d’autres sites

Invité sera-angel
Invités, Posté(e)
Invité sera-angel
Invité sera-angel Invités 0 message
Posté(e)

J ai vu ton titre " morpion en python"

J ai cru que ça parlait encore de Florent Pagny :D

 

Lien à poster
Partager sur d’autres sites

Membre, 22ans Posté(e)
loriss Membre 54 messages
Baby Forumeur‚ 22ans‚
Posté(e)

bonjour, @riad**

grille=[[0,0,0],[0,0,0],[0,0,0]]

def changegrille(i,j,val):
    global grille
    grille[j]=val

def nSym(nb):
  if nb==0:
    return(' ')
  if nb==1:
    return('X')
  if nb==2:
    return('O')

def affichegrille(val):
    print("     1)  2)  3)")
    print("   -------------")
    print("A)", end='')
    print((" | "), end='')
    print((nSym(val[0][0])), end='')
    print((" | "), end='')
    print((nSym(val[0][1])), end='')
    print((" | "), end='')
    print((nSym(val[0][2])), end='')
    print(" | ")
    print("   -------------")
    print("B)", end='')
    print((" | "), end='')
    print((nSym(val[1][0])), end='')
    print((" | "), end='')
    print((nSym(val[1][1])), end='')
    print((" | "), end='')
    print((nSym(val[1][2])), end='')
    print(" | ")
    print("   -------------")
    print("C)", end='')
    print((" | "), end='')
    print((nSym(val[2][0])), end='')
    print((" | "), end='')
    print((nSym(val[2][1])), end='')
    print((" | "), end='')
    print((nSym(val[2][2])), end='')
    print(" | ")
    print("   -------------")


def testV():
    return ((grille[0][0]==grille[1][0] and grille[2][0]==grille[0][1] and grille[0][0]!=" ") or (grille[0][1]==grille[1][1] and grille[2][1]==grille[1][1] and grille[0][1]!=" ") or (grille[0][2]==grille[1][2] and grille[2][2]==grille[1][2] and grille[0][2]!=" "))

def testH():
    return ((grille[0][0]==grille[0][1] and grille[0][1]==grille[0][2] and grille[0][0]!=" ") or (grille[1][0]==grille[1][1] and grille[1][1]==grille[1][2] and grille[1][0]!=" ") or (grille[2][0]==grille[2][1] and grille[2][1]==grille[2][2] and grille[2][0]!=" "))

def testD():
    return ((grille[0][0]==grille[1][1] and grille[1][1]==grille[2][2] and grille[0][0]!=" ") or (grille[0][2]==grille[1][1] and grille[1][1]==grille[2][0] and grille[0][2]!=" "))

import random
symboles = 1,2
joueur= random.randint(1,2)

def changeJoueur():
  global joueur
  if joueur==1:
    joueur=2
  else:
    joueur=1

def joue():
  while testD() == True or testH() == False or testD() == False :
    affichegrille(grille)
    i = input("tu veux jouer sur quelle ligne : ")
    j = int(input("tu veux jouer sur quelle colonne : "))
    i=ord(i)-65
    j=j-1
    if grille[j]==0:
      changegrille(i,j,joueur)
      affichegrille(grille)
      changeJoueur()
  changeJoueur()
  print("Victoire du joueur " + str(joueur))


joue()
 

voici mon programme, je n'arrive pas a faire fonctionner mes fonctions testH(), testV(), testD(), le but est de vérifier si 3 symboles sont alignés horizontalement, verticalement et en diagonal pouvez vous m'aider svp, 

Lien à poster
Partager sur d’autres sites

Invité riad**
Invités, Posté(e)
Invité riad**
Invité riad** Invités 0 message
Posté(e)

Bonjour @loriss

Il y a une erreur dans la fonction  changegrille

def changegrille(i,j,val):
    grille[j]=val

def testV() :

    return grille[0][0]==grille[1][0]==grille[2][0] or grille[0][1]==grille[1][1]==grille[2][1] or grille[0][2]==grille[1][2]==grille[2][2]

 

def testH() :

    return grille[0][0]==grille[0][1]==grille[0][2] or grille[1][0]==grille[1][1]==grille[1][2] or grille[2][0]==grille[2][1]==grille[2][2]

Lien à poster
Partager sur d’autres sites

Membre, 22ans Posté(e)
loriss Membre 54 messages
Baby Forumeur‚ 22ans‚
Posté(e)

@riad**

voici ce que elle me renvoie:

line 20, in affichegrille print((nSym(val[0][0])), end='') TypeError: 'int' object is not subscriptable

Lien à poster
Partager sur d’autres sites

Annonces
Maintenant

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×