Visualizzazione post con etichetta Python3. Mostra tutti i post
Visualizzazione post con etichetta Python3. Mostra tutti i post

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 :)

giovedì 2 aprile 2015

Le funzioni ord() e chr(). [Brevi Esercizi]

Salve!

Oggi facciamo un breve esercizio con Python3.

Problema.

Se a Python do in pasto la stringa "baro", mi dovrà restituire la stringa "caro". In altri termini, mi dovrà sostituire il primo carattere di una stringa con quello successivo nell'alfabeto e poi stamparlo

Gli ingredienti per svolgere l'esercizio.

La funzione ord() mi restituisce il codice corrispondente al carattere nella scala unicode

Esempio, se nella shell di Python scrivo

>> ord("b")

la funzione ord() mi restituirà 98, che rappresenta il codice corrispondente al carattere nella scala unicode.

Se poi scrivo:

>> chr(98)

Avrò come risultato

'b'

La funzione chr() traduce il codice 98 nella lettera corrispondente, che è "b". Abbiamo fatto così la prova del nove.

Ancora, come faccio a conoscere il primo carattere di una stringa, tenuto anche conto che python inizia a contare sempre da zero?

>> parola = "baro" #Variabile
>> parola[0] #Cerco il primo carattere della stringa "baro"

la shell mi restituirà "b"

Ecco, penso che ora abbiamo tutti gli elementi per svolgere l'esercizio.


>> print(chr(ord(parola[0])+1) + parola[1:])

Abbiamo detto che la funzione ord() trasforma, in questo caso, la lettere b in un codice. Questo codice, che sappiamo essere 98, lo sommiamo ad 1, quindi diventerà 99, che la funzione chr() tradurrà nel carattere corrispondente, che è "c", successivo a "b" nell'alfabeto. Poi sommiamo il carattere "c" con la stringa "baro", escluso il primo carattere. Infine passiamo tutto alla funzione print(), il cui compito è quello di stampare a video il risultato.


Ritornerò con gli esercizi di Python3 ogni giovedì.

Alla prossima!