Bug dans la version française du cours Python (bataille navale)


#1

Après une lecture minutieuse des problèmes liés à la Battle ship (§ 15), et essai des multiples solutions proposées, je dois faire part de ma grande tristesse : le temps des cafards et autres bugs n'est pas fini. :rage:
Pour mémoire, le petit plus de ce chapitre consiste principalement à ajouter une boucle à l'aide de
for tour in range(4):
Rien de bien sorcier. Mais le test lié ne fonctionne pas.
# Affichez tour+1 ici !
print tour+1
Les étranges conditions de vérification du code ne fonctionnent pas non plus quand le code soumis à l'inquisition est donné au chapitre suivant, "Game Over" (titre qui donne l'ambiance.:slightly_smiling:)
Si quelqu'un parvient à passer cet obstacle (je ne sais pas moi, prendre 100 000 singes et les faire taper du texte pendant 100 000 heures ?), merci de répondre à ce billet.
J'ai trouvé d'autres difficultés de contrôle, mais rien de bloquant jusque la. Mon enthousiasme pour le site CodeAcademy a un peu perdu de sa superbe :confused:
Bon courage aux codeurs du monde entier !


#2

bloqué au niveau des boucles (créer son propre while/else) ? :confused:

parce que moi aussi... ça fait 48hr que je tente de trouver la solution !


#3

Ecoutez moi aussi je viens de le passer aussi mais j'ai fait une boucle while qui itere et incremente la variable tour que j'ai initialisé au début du code puis que j'ai mis en variable globale. Apres je ne suis pas un bon codeur mais moi j'aurais crée plusieurs fonctions qui communique entres elle je trouve que les exercices de code academy sont vraiment là histoire de s’amuser mais je n'ai jamais rien appris ici en revanche je rigole bien ! mais je sais que c'est faux mais il est passer comme ça je suis entrain de faire que le code fonctionne bien car il est bugger il n'affiche pas toute les condition il change de position et remet a zero le tour .. si quelqu un sais m'expliquer avec la boucle for je suis preneur mais si vous buté sur l'exo comme ça il fonctionne

from random import randint

creation du plateau

tour = 1
plateau = []
for x in range(0, 5):
plateau.append(["O"] * 5)

Fonction qui affiche le plateau

j'ai pris la liberter d'y afficher les tours ici

comme c'est les plateau

def afficher_plateau(plateau):
print tour, "tour"
print bateau_x, "x"
print bateau_y, "y"
for ligne in plateau:
print " ".join(ligne)
recueil()

Positionnement aleatoire du bateau..

def alea_ligne(plateau):
return randint(0, len(plateau) - 1)
def alea_col(plateau):
return randint(0, len(plateau[0]) - 1)
bateau_x = alea_ligne(plateau)
bateau_y = alea_col(plateau)

Fonction du recueil j'aurais trouver ça plus interressant

que CA nous fasse crée une classe pour l'objet bateau

mais c'est bizarre

def recueil():
global tour # appel de la variable dans ma fonction
global bateau_x
global bateau_y
tir_x = int(raw_input("Quelle ligne ?"))
tir_y = int(raw_input("Quelle colonne ?"))
if tir_x == bateau_x and tir_y == bateau_y:
print "Bravo ! Vous avez eu mon bateau !"
tour = 0
print "nouveau bateau"
bateau_x = alea_ligne(plateau)
bateau_y = alea_col(plateau)
afficher_plateau(plateau)
if (tir_x < 0 or tir_x > 4) or (tir_y < 0 or tir_y > 4):
print "Oups ! Vous devez viser l'ocean."
afficher_plateau(plateau)
if(plateau[tir_x ][tir_y ] == "X"):
print "Cette case est deja decouverte."
afficher_plateau(plateau)
while tour != 4:
afficher_plateau(plateau)
if tour == 4:
print "Game Over"

afficher_plateau(plateau)


#4

Et si vous bloqué ensuite a une vraie victoire pour l'histoire du break ... Vous pouvez maguoiller ça ...Sachez juste que c'est pas du bon code ...


#5

C'est quoi ton souci avec les while /else?