Aller au contenu

Messages recommandés

Posté(e)

Bonjour/Bonsoir,

Après ces semaines difficiles, voilà la reprise et j'avoue avoir un peu perdu la main en informatique... J'ai reçu un exo de la part de mon professeur et j'ai beaucoup de mal à le comprendre et à le faire. Pourriez vous m'aider, étape par étape, à compléter mon script svp ??? Voici mon début de travail...

Merci d'avance,

Cordialement.

 

Tale NSI 2021 - Bataille navale (énoncé Parties 1 et 2).pdf Naval Battle.py

  • E-Bahut
Posté(e)

Bonsoir,

Après avoir pas mal galéré, car ne connaissant rien de la notion de classe, je te joins une partie "corrigée" de ton exercice. J'ai testé les appels de def  figurant à la fin, Python n'a pas râlé, donc le script devrait être correct.

Je ne suis pas sûr de tout pouvoir t'expliquer tout ce qui concerne les rectifications ou compléments, j'ai procédé un peu par la méthode des essais,  échecs et réussite. De toute façon, vu le niveau des exercices, tu dois en connaître nettement plus que moi sur la programmation en Python. Cela dit, si nécessaire, je peux continuer sur ce post, mais ça ne sera pas pour ce soir, et à condition que j'y arrive !

@ +

 

 

@essai.py

  • E-Bahut
Posté(e)

Bonjour,

J'ai regardé la partie "placement des bateaux", qui ne pose pas de difficulté, il faut simplement rajouter "import random" (je l'ai mis au départ). Par contre, dans le script complété ci-joint, j'ai remplacé

set_valeur_cellule(g, ligne, colonne, BATEAU)

par

set_valeur_cellule(g, ligne, colonne, TIR)

pour que, à titre de vérification, la position des bateaux apparaissent lors de l'affichage de la grille. Il faut évidemment rétablir le texte d'origine dans le script final, MER et BATEAU doivent se présenter de la même façon au joueur sinon, le jeu n'a plus d'intérêt.

@essai.py

N.B. : Je n'ai pas répondu aux questions que tu as posées dans ton script. Il fallait ?

Posté(e)

Bonjour merci pour votre réponse si rapide.

Alors, tout d'abord pouvez-vous m'expliquez pq et comment je dois comprendre la ligne 13 :

self.cellules = [[0 for i in range(LARGEUR_MAX)] for j in range(HAUTEUR_MAX)]

De plus, ligne 34, à quoi sert le end = ' ' ???

Pourquoi y'a t il EPAVE ligne 53 ? set_valeur_cellule(g, ligne, colonne, EPAVE)

Et oui j'ai posé qq questions dans le script si vous pouvait m'expliquer svp ?

Merci d'avance.

  • E-Bahut
Posté(e)
il y a une heure, angelV a dit :

De plus, ligne 34, à quoi sert le end = ' ' ???

Ça au moins, je peux répondre :

Lorsque tu fais un print(), après ce que tu imprimes il y a par défaut le caractère \n. Ce qui fait que l'impression suivante ira à la ligne suivante. Ce "caractère de fin" invisible, peut être remplacé par tout autre caractère si comme dernier paramètre d'impression tu insères ,end = ...........

Ici, chaque impression est suivie d'une espace, ce qui fait que les impressions sont sur la même ligne et séparées les unes des autres.

__________________________

Là aussi je pense

set_valeur_cellule(g, ligne, colonne, EPAVE)

Dans la définition de la fonction il y a set_valeur_cellule(g, ligne, colonne, valeur) En appelant cette fonction, elle a besoin de 4 paramètres pour fonctionner. Mais en mettant "EPAVE" à la place de "valeur" cela donne un paramètre par défaut qui sera utilisé comme 4è paramètre si tu ne fournis que les 3 premiers.

Le ou les paramètre(s) par défaut doivent toujours être situés en dernier dans la liste des paramètres.

 

(Je viens juste de l'apprendre hier : https://inforef.be/swi/download/apprendre_python3_5.pdf )

 

  • E-Bahut
Posté(e)
Il y a 2 heures, angelV a dit :

self.cellules = [[0 for i in range(LARGEUR_MAX)] for j in range(HAUTEUR_MAX)]

cellules est une liste de 2 listes puisque la grille est un tableau. Par défaut, à la création, une liste a une longueur nulle. Pour pouvoir lui mettre des valeurs, il faut lui donner la bonne dimension. Pour simplifier on lui donne les dimensions maximum possibles.
La commande [0 for i in range(LARGEUR_MAX)] crée une ligne de 0 de largeur maximum LARGEUR_MAX.
La commande for j in range(HAUTEUR_MAX) recopie la ligne vers le bas HAUTEUR_MAX fois.

Il y a 2 heures, angelV a dit :

Pourquoi y'a t il EPAVE ligne 53 ? set_valeur_cellule(g, ligne, colonne, EPAVE)

C'est quelque chose que j'avais oublié de rectifier lorsque j'ai posté le premier script. Normalement, c'est MER qui doit y figurer, comme tu peux le voir dans ma deuxième mouture du script.

 

Passons aux questions du script (si je peux y répondre !).

4.1.1) Les paramètres de la fonction controle_valeur sont borne_min et borne_max.
Oui, bien sur, et dans le script, ce seront les dimensions de la grille.

4.1.2) et 4.1.3) Tant que la valeur entrée par le joueur est en dehors des limites autorisées, le programme redemande une nouvelle valeur. Le rôle de la fonction est donc de saisir une valeur correcte dans l'optique du jeu.
Tu peux essayer avec mon script, mais, surtout, entre des entiers, une entrée de caractère, par exemple, plante le programme car on ne teste pas ce genre d'erreur0

5.2.1) Les paramètres de la fonction sont g de type Grille et nb_bateaux de type int. OK.


5.2.2) While True : C'est toujours vrai ! On en sort avec Break.
Le fonctionnement est le suivant, on sort de la boucle lorsque la case (ligne,colonne) est une case MER, pour éviter de surcharger par BATEAU une case BATEAU, TIR ou EPAVE.


5.2.3) Comme dit au 5.2.2) Break permet de sortir de la boucle infinie.


5.2.4) Les bateaux sont placés sur la grille de manière aléatoire en prenant soin de ne les mettre que sur une case MER.
Je te laisse réfléchir pourquoi il ne faut pas placer BATEAU sur une case déjà occupée par BATEAU.

Bonne lecture et n'hésite pas à revenir si quelque chose n'est pas clair.

Posté(e)

Merci beaucoup pour votre retour.

Je comprends bien mieux à présent, j'avais bien compris pour le MER et pour :

"Je te laisse réfléchir pourquoi il ne faut pas placer BATEAU sur une case déjà occupée par BATEAU",

il serai vraiment illogique et impossible de posé deux bateaux au même coordonnés ...

Merci.

  • E-Bahut
Posté(e)

Bonsoir,

il y a 2 minutes, angelV a dit :

Je te laisse réfléchir pourquoi il ne faut pas placer BATEAU sur une case déjà occupée par BATEAU",

il serai vraiment illogique et impossible de posé deux bateaux au même coordonnés ...

Le problème est surtout que, si rien ne l'interdit, dans le nombre de bateaux de départ que l'on postule, cela en ferait un de moins à chaque fois dan la grille. En d'autres termes, alors que, par exemple, le joueur pensait jouer avec 20 bateaux, il n'en aura finalement qu'un certain nombre de moins.

Je suppose que, comme dit dans le pdf joint, il va y avoir une suite. N'hésite pas à la poster, même si tu sais faire, je suis curieux de voir comment l'auteur la conçoit.

Bonne soirée.

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement
×
×
  • Créer...
spam filtering
spam filtering