Se connecter

Informatique

Programmation

Sujet : Bataille navale en python
1
jycreyn
Niveau 1
14 septembre 2019 à 17:55:41

Bonjour, je débute en python et j'aimerais faire un bataille navale. J'ai fait ceci :

from random import *
rejouer = int(1)
while rejouer == 1:

A = randint(1,10)
B = randint (1,10)
C = 999
D = 999

while A != C or B != D :
C=int(input("Trouve les coordonnées x"))
D=int(input("Trouve les coordonnées y"))
print("X = ",C,"Y = ",D)
if A==C and B==D:
print("Touché!")
if A!=C and B!=D:
print("Dans l'eau...")
if A!=C and B==D or A==C and B!=D:
print("Bonne collone ou bonne ligne")

print("On rejoue ?")
recomencer = ("1 = oui / 0 = non")

Cela marche bien mais j'aimerais faire en sorte que lorsque l'on tape acoté du bateau il y ait ecris "frolé".
Mais je ne sais pas comment m'y prendre sans avoir a effectuer 8 test.... ( toutes les case a coté )

Voicis les 8 test que je voudrai supprimer
if A==C+1 and B==D:
print("Frôlé!")
if A==C-1 and B==D:
print("Frôlé!")
if A==C and B==D+1:
print("Frôlé!")
if A==C and B==D-1:
print("Frôlé!")
if A==C+1 and B==D+1:
print("Frôlé!")
if A==C-1 and B==D-1:
print("Frôlé!")
if A==C-1 and B==D+1:
print("Frôlé!")
if A==C+1 and B==D-1:
print("Frôlé!")

Je voudrais simplifier ce code.
Existe-t-il un commande pour connaitre la "distance" entre deux variable int ?

Merci d'avance pour votre aide :D

blackapplex
Niveau 10
14 septembre 2019 à 20:43:21

A priori à partir du moment où tu mets 50 "if", tu es sur la mauvaise route comme tu t'en doutes :ok:
C'est classique de devoir faire "le tour" d'une coordonnée (x,y), là pour ton cas je te conseillerai de simplement passer par un double for.


for dx in [-1, 1]
    for dy in [-1, 1]
        if A == C+dx and B == D+dy and not (dx == 0 and dy == 0)
            print("frolé")

Du coup là t'as un delta x et un delta y que tu peux appliquer à C et D

1
Sujet : Bataille navale en python
   Retour haut de page
Consulter la version web de cette page