Connecteur ==, 2 exigences à rendre compatibles

Résolu/Fermé
jafffar Messages postés 3 Date d'inscription vendredi 14 février 2020 Statut Membre Dernière intervention 17 février 2020 - 14 févr. 2020 à 23:55
jafffar Messages postés 3 Date d'inscription vendredi 14 février 2020 Statut Membre Dernière intervention 17 février 2020 - 15 févr. 2020 à 19:23
Bonjour,

Je débute avec Python3 et j'avance pas mal, c'est hyper stimulant comme langage.
Pour m'entraîner, j'ai écrit un programme où on annonce les longueurs des 3 côtés du triangle qu'on compte tracer et le programme te dit:
- si ce triangle peut exister (si un des 3 côtés est supérieur à la somme des 2 autres c'est fichu)
- si ce triangle à un nom particulier (isocèle, rectangle etc.)

Pour démarrer le programme demande si tu veux participer à ce travail.
- si non: il te dit au revoir
- si oui: il t'invite à entrer les longueurs des 3 côtés
- si mal tapé: il te dit qu'il ne pige rien

Pour m'entraîner j'ai mis plein de formules pour lesquelles il doit comprendre "oui" comme "yes", "ok" etc.

Pour ça j'ai mis:
elif accord == ("oui" or "yes" or "ok" or "ouais")
print("Quel courage géométrique") etc. etc.

Ma 1è question porte sur l'usage des parenthèses, telles que je les utilise ici Python3 comprend-il que je veux lui dire qu'il doit considérer que c'est oui avec "oui" mais aussi si la réponse est "ok", "yes" etc.?

Ma 2è question la plus importante concerne une bizarrerie. Je n'arrive pas à faire respecter 2 exigences:en même temps 1- qu'il accepte plusieurs formes de "oui" 2- qu'il dise qu'il ne comprend pas la réponse si j'ai autre chose qu'un non ou oui (ou équivalent du oui)

J'ai essayé 2 variantes de mon programme mais selon la variante il respecte la 1è ou la 2è exigence.

Voici mon programme (il y a 2 lignes qui commencent avec #, j'enlève l'un ou l'autre # ce qui donne les 2 variantes):


print("Dans cet exercice, tu vas choisir les longueurs des 3 côtés d'un triangle")
accord = str(input("Partant(e)?: "))

if accord == "non":
print("Dommage, une autre fois peut-être? Au revoir.")

elif accord != ("oui" and "non" and "ok" and "yes" and "ouais"):
print("Je n'ai pas compris ta réponse, contente-toi de oui ou non !")

#elif accord == "oui" or "ok" or "yes" or "ouais":
print("Quel courage géométrique, poursuivons.")

c1 = float(input("Quelle sera la longueur en cm de ton premier côté? "))
c2 = float(input("Quelle sera la longueur en cm de ton deuxième côté? "))
c3 = float(input("Quelle sera la longueur en cm de ton troisième côté? "))

if c1+c2>c3 and c1+c3>c2 and c2+c3>c1:
print("Ce triangle existe, bravo !!! Tu n'as plus qu'à le tracer.")

if (c1==c2!=c3 or c1==c3!=c2 or c2==c3!=c1):
print("Tu projettes de tracer un triangle isocèle car il aura 2 côtés de même longueur.")

elif c1==c2==c3:
print("Tu projettes de tracer un triangle équilatéral car il aura ses 3 côtés de même longueur.")

elif c1**2 == c2**2 + c3**2 or c2**2 == c1**2 + c3**2 or c3**2 == c2**2 + c1**2:
print("Tu projettes de tracer un triangle rectangle")
print("car le carré d'un de ses côtés est égal à la somme")
print("des carrés des 2 autres côtés.")
print("Demande à Pythagore, il confirmera.")


elif c1+c2==c3 or c1+c3==c2 or c2+c3==c1:
print("Ce triangle existe, mais c'est un triangle plat.")
print("Si tu le traces, il se réduira à un segment de la même")
print("longueur que ton plus grand côté.")

else:
print("Impossible de tracer un triangle avec de telles longueurs pour tes côtés.")
print("Rappelle-toi la règle suivante:")
print("Aucun des côtés de ton triangle ne doit être supérieur à la somme des 2 autres.")
print("Maintenant que tu sais ça, recommence tu vas réussir !")

#else:
print("Je n'ai pas compris ta réponse, contente-toi de oui ou non !")


Voila, j'espère que ce n'est pas trop obscur comme explication et que quelqu'un saura m'aider à progresser en Python. Merci à vous.

Amar



Configuration: Linux / Firefox 73.0
A voir également:

2 réponses

Bonjour,

Un petit test

>>> accord = 'yes'
>>> accord == ("oui" or "yes" or "ok" or "ouais")
False


Permet de voir que ça ne fait pas ce que tu pensais que ça faisait.

Une chaine est évaluée à
True
si elle contient quelque chose sinon
False
.

>>> 'ok' or 'pas ok'
'ok'
>>> '' or 'pas ok'
'pas ok'


Donc quand tu fais
'oui' or 'yes'
, ce sera toujours "oui".

Pour tester si une valeur est parmi d'autres, on se sert d'un conteneur, dans ton cas un tuple est opportun.

accord in ("oui", "yes", "ok", "ouais")
1
jafffar Messages postés 3 Date d'inscription vendredi 14 février 2020 Statut Membre Dernière intervention 17 février 2020 1
15 févr. 2020 à 19:23
Merci Trifou pour ta réponse claire et solidaire. J'ai en effet pu sortir de mon impasse grâce à l'utilisation d'un tuple que grâce à ce conseil je pourrai utiliser dans mes programmes ultérieurs.
1