JulienFrançois1 j'ai fini par trouver la réponse je te donne un élément de l'énoncé qui m'a permis de trouver :
"Pour chaque paire de zones, votre programme doit écrire "OUI" si les zones s'intersectent et "NON" sinon. Si elles ne font que se toucher sur les bords il doit écrire "NON"."
Au-delà de l'erreur signalée sur les inégalités larges, comme dans les lignes de 11 à 18 on affiche toujours NON, on peut ré-écrire ces huit lignes en juste deux lignes et d'ailleurs, en utilisant une liste ["OUI", "NON"], on peut même réduire les lignes 11-20 en une seule ligne.
- Edité par PascalOrtiz 5 septembre 2019 à 19:14:50
nzone=int(input()) for i in range (0,nzone): xmin=int(input()) xmax=int(input()) ymin=int(input()) ymax=int(input()) xmin1=int(input()) xmax1=int(input()) ymin1=int(input()) ymax1=int(input())
if (xmax<=xmin1)or (xmin>=xmax1) or (ymax<=ymin1)or (ymin>=ymax1): print("NON")
else: print("OUI") nzone=nzone-1
voila mon programme marche merci de votre aide j'avais oublie les =.
j'viens de le faire et ça marchait pas ... j'avais oublié les int() aux input()
for _ in range(int(input())):
ax1,ax2,ay1,ay2,bx1,bx2,by1,by2 = (int(input())for i in range(8))
print((bx1>=ax2 or bx2<=ax1 or by1>=ay2 or by2<=ay1) and 'NON' or 'OUI')
En considérant une paire de rectangles définis par des listes des coordonnées des 4 coins, est-ce que l'on pourrait aussi chercher si l'un des coins d'un rectangle est à l'intérieur de l'autre ?
def point_dans_rectangle(x,y,rectangle):
n = 0
for i in range(len(rectangle)-1):
if ((rectangle[i][1] <= y and rectangle[i+1][1] > y) or (rectangle[i][1] > y and rectangle[i+1][1] <= y)):
vt = (y - rectangle[i][1]) / float(rectangle[i+1][1] - rectangle[i][1])
if(x < (rectangle[i][0] + vt * (rectangle[i+1][0] - rectangle[i][0]))): n += 1
return(n % 2)
rectangle_1 = [[10,10],[20,10],[20,20],[10,20]]
rectangle_2 = [[15,15],[25,15],[25,25],[15,25]]
f = False
for k in range(len(rectangle_2)):
x,y = rectangle_2[k][0], rectangle_2[k][1]
if(point_dans_rectangle(x, y, rectangle_1)):
print('OUI')
f = True
if(not f): print('NON')
Au lieu de se servir de Elif il suffit de rajouter or à la première condition.
if xMin1 >= xMax2 or xMax1 <= xMin2 or yMax1 <= yMin2 or yMin1 >= yMax2: print("NON")
else: print("OUI")
Oui, et c'est d'ailleurs exactement comme cela que fait le corrigé. C'est une très élégante solution car au lieu de chercher quand les rectangles s'intersectent, on cherche plutôt quand les rectangles NE s'intersectent PAS.
Découverte Python Doc Tkinter Les chaînes de caractères
Python c'est bon, mangez-en.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Découverte Python Doc Tkinter Les chaînes de caractères