#!/usr/bin/env python
###########################################################################
# Copyright (C) 2007 Ryan Kavanagh #
# This program is free software; you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation; either version 2 of the License, or #
# (at your option) any later version. #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# You should have received a copy of the GNU General Public License along #
# with this program; if not, write to the Free Software Foundation, Inc., #
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. #
# You may contact the author at ryanakca@kubuntu@org #
###########################################################################
import math
class Triangle:
"""Classe du Triangle, pour trouver des informations (tels que l'aire, son
type (Acutangle, Rectangle, Obtusangle)) a son sujet"""
def __init__(self, cote1, cote2, cote3, hauteur=0):
"""Definie le triangle, avec la mesure de cote1, cote2, cote3, et
la variable facultative 'hauteur'
"""
self.set_triangle(cote1, cote2, cote3, hauteur)
def set_triangle(self, cote1, cote2, cote3, hauteur=0):
"""Definie le triangle, avec sa base, son hauteur, son hypothenuse
et la mesure de l'autre cote.
"""
if str(cote1).isdigit() and str(cote2).isdigit() and \
str(cote3).isdigit() and str(hauteur).isdigit():
self.listedecotes = self.liste_de_cote_croissants(cote1, cote2,
cote3)
self.cote1, self.cote2, self.cote3 = self.listedecotes
self.hauteur = hauteur
else:
plainte = "S.V.P. donner les variables en chiffres"
return plainte
def liste_de_cote_croissants(a, b, c):
""""Imprime le plus grand nombre de 3 nombres, a, b, et c"""
liste_de_nombres = []
if a < b and a < c:
liste_de_nombres.append(a)
elif b < a and b < c:
liste_de_nombres.append(b)
else:
liste_de_nombres.append(c)
if a > liste_de_nombres[0] and a < c:
liste_de_nombres.append(a)
elif b < liste_de_nombres[0] and b < c:
liste_de_nombres.append(b)
else:
liste_de_nombres.append(c)
if a > liste_de_nombres[1]:
liste_de_nombres.append(a)
elif b > liste_de_nombres[1]:
liste_de_nombres.append(b)
else:
liste_de_nombres.append(c)
return liste_de_nombres
def queltype(self):
"""Est-ce un triangle rectangle, obtusangle or acutangle?
Vous devez avoir definit votre triangle avec set_triangle
"""
# Pythagore: A**2 + B**2
self.valeur1 = (self.cote1 ** 2.0) + (self.cote2 ** 2)
# = C**2
self.valeur2 = self.hypothenuse ** 2.0
# Si A**2 + B**2 est plus petit que C**2, Obstusangle
if self.valeur1 < self.valeur2:
self.type = 'Obtusangle'
# Si A**2 + B**2 est == a C**2, Rectangle
elif self.valeur1 == self.valeur2:
self.type = 'Rectangle'
# Acutangle
else:
self.type = 'Acutangle'
return self.type
def aire(self):
"""Calcule l'aire du triange"""
# Aire = base * hauter / 2
self.aire = (self.cote1 * self.hauteur) / 2.0
return self.aire
def quit(prompt, retries=4, complaint='Oui ou Non, S.V.P!'):
"""Fonction pour determiner si l'utilisateur veux quitter le program."""
while True:
ok = raw_input(prompt)
if ok[0].lower() == "o": return False
if ok[0].lower() == "n": return True
retries = retries - 1
if retries < 0: raise IOError, 'refusenik user'
print complaint
def main():
oncalcule = True
shape = Triangle(1, 1, 1)
while oncalcule == True:
print "Que voulez-vous savoir au sujet de votre triangle?"
print "1. Son type (acutangle, rectangle, obtusangle)"
print "2. Son aire"
quoicalculer = raw_input("> ")
if quoicalculer == 1:
print "Ou que premier cote est le plus petit et troisieme",
" cote est le plus grands: "
cote1 = raw_input("Quel est la mesure du premier cote? ")
cote2 = raw_input("Quel est la mesure du deuxieme cote? ")
cote3 = raw_input("Quel est la mesure du troisieme cote? ")
# Definie l'objet
shape.set_triangle(cote1, cote2, cote3)
print "Ce triangle est: ", shape.queltype()
elif quoicalculer == 2:
print "Ou que cote1 est le plus petit: ",
cote1 = raw_input("Quel est la mesure du premier cote? ")
# Met cote2 et cote3 a nul, puisqu'ils ne sont pas requis
cote2, cote3 = 0, 0
hauteur = raw_input("Quel est la hauteur de cd triangle?" )
shape.set_triangle(cote1, cote2, cote3, hauteur)
print "L'aire de ce triangle est: ", shape.aire()
else:
print "S.V.P. Choisir une option en entrant le chiffre",
" correspondant."
print "Voulez-vous: "
print "1. Calculer autre chose"
print "2. Quitter"
prochaine_action = input("> ")
if prochaine_action == 1:
pass
elif prochaine_action == 3:
oncalcule = quit("Voulez-vous vraiment quitter? ")
else:
print "S.V.P. Choisir une option en entrant le chiffre",
" correspondant."
if __name__ == '__main__':
main()