martedì 7 aprile 2015

Che tipo di triangolo è? [Python3]

Ripropongo lo stesso esercizio fatto con bash qualche giorno fa (qui). Questa volta con Python, però. L'esercizio consiste nello scrivere uno script che, dopo avergli passato tre interi, mi restituisca un tipo di triangolo: equilatero, isoscele o scaleno.

Perchè questi esercizi? Perchè solo scrivendo e leggendo codice si impara a programmare. I manuali stanno alla base, ma non bastano, serve pratica. E molta.

Ok, passiamo allo script di oggi. Se ritenete che qualcosa non vada, scrivetelo pure nei commenti.

#!/usr/bin/python3
# -*- coding: utf-8 -*-

def tipo_triangolo():
    a=input("inserisci la misura del primo lato: ")
    if a.isdecimal():
        a=int(a)
    else:
        print(a, "non è un intero valido")
        raise SystemExit
    b=input("inserisci la misura del secondo lato: ")
    if b.isdecimal():
        b=int(b)
    else:
        print(b, "non è un intero valido")
        raise SystemExit
    c=input("inserisci la misura del terzo lato: ")
    if c.isdecimal():
        c=int(c)
    else:
        print(c, "non è un intero valido")
        raise SystemExit

    if a+b>c and a+c>b and b+c>a:
        if a==b and b==c:
            print("triangolo equilatero")
        elif a==b or a==c or b==c:
            print("triangolo isoscele")
        else:
            print("triangolo scaleno")
    else:
        print("Non è stata rispettata la disuguaglianza triangolare")

tipo_triangolo()

La funzione input() mi restituisce sempre una stringa, anche quando digito un numero.

Provare per credere.


Bisogna fare in modo di trasformare quella stringa in un intero, qualora volessimo utilizzarlo come intero, ovvio.

Deputato a fare una cosa del genere è int(), ma non basta, serve un passaggio intermedio; infatti bisogna prima controllare se quella stringa possa o meno essere convertita in un intero, a tal fine utilizzeremo la funzione isdecimal().

isdecimal() darà come risultato semplicemente o true o false.

Se il controllo di isdecimal() sarà superato, nel senso che risponderà "true", allora la stringa sarà convertibile in intero, perciò la passo a int(), che la convertirà; diversamente lo script mi dirà che ciò che abbiamo dato in pasto ad input() è un intero non valido e restituirà un exit 1.

La prima parte dello script è volutamente prolissa, avrei potuto abbreviarlo di molto. La sintesi, tuttavia, non è sempre un bene.

Nella seconda parte si decide il tipo del triangolo, ma solo se è stata rispettata la disuguaglianza triangolare, cioè che la somma della misura di due lati sia maggiore della misura del terzo.


Ovviamente potete offrire le vostre soluzioni. A presto :)

1 commento:

  1. Ciao Luigi.
    Volevo solo dire che se la prima condizione 'a < b+c' è vera allora lo sono anche le altre due 'b<a+c' e 'c<a+b', perché una delle condizioni è sufficiente per l'esistenza del triangolo e quindi delle tre condizioni.
    Un saluto.
    R.

    RispondiElimina