The Best Geek Forum

Algoritmi in Python 3

Python è uno dei più classici interpreti esistenti. Sicuramente uno dei più classici approcci alla programmazione. Ma vediamo cosa fa realmente rispetto altri.

Moderatore: Moderatore in prova

Algoritmi in Python 3

Dopo aver visto la Guida base al linguaggio Python, ci troviamo davanti l'algoritmo, ovvero una serie di istruzioni finite e ordinate che risolvono un dato problema.

Immagine Tipi di dati

Per quanto riguarda i valori numerici e booleani facciamo una distinzione tra numeri interi o reali con int o float.
Con tali tipi di dato si possono eseguire operazioni di base come +, -, *, /
-Divisioni intere, resto e potenza: //, %, **
-Assegnazioni: =, +=, -=, ...
-Confronti: <, <=, >, >=, ==, !=

Codice: Seleziona tutto

3+7
2*4
3 != 4
...
Per valori boolean, bool: True, False

Codice: Seleziona tutto

a = bool(3 > 4)
print(a)
- Operazioni consentite and, or, not .
- I confronti danno un risultato booleano.
Ciò si utilizza per proposizioni logiche, utilizzate molto in matematica per teoremi e altro ancora.
Ad esempio, se si volesse avere un True quando solo se a e b fossero di un certo valore, allora gli operatori logici ci evitano molti passaggi.

Codice: Seleziona tutto

a = bool(6 > 4)
b = bool(3 > 4)
print(a and b)
Per sequenze di caratteri Unicode, str :
- Primi 128 codici Unicode == ASCII
- A capo: ' \n ' (10, o 13-10... ma conversione automatica)
- Confronto tra stringhe, in ordine lessicografico con < , <= , > , >= , == , !=

Indentazione:
Per la risoluzione di problemi però non possiamo dare una sola via di comandi, molte volte c'è bisogno di imporre condizioni.
Ovviamente esistono tali comandi, rispettivamente if per imporre una condizione ed eseguire comandi, ed else per eseguire altri comandi, se e solo se la condizione dell'if non è verificata.

Codice: Seleziona tutto

a = (input("Ti piace questa guida? "))

if a == "SI":
print("Condividila!")

else:
print("Scrivici il tuo parere!")
E se dovessimo inserire più di una condizione? bene, a questo c'è soluzione ovvero il comando elif , ovvero una clausola else che contiene un altro if.

Codice: Seleziona tutto

a = (input("Ti piace questa guida? "))

if a == "SI":
print("Condividila!")

elif a== "NO":
print("Scrivici il motivo!")

else:
print("Vorresti aggiungere qualcosa? Fallo rispondendo alla guida!")
Iterazione:
Sicuramente vi sarete chiesti se esista un metodo per ripetere una serie di comandi finché non si raggiunga una condizione specificata. Inutile dire che ovviamente esiste ed è il ciclo while ![/size]
Ad esempio, per contare la somma dei numeri da 1 a 10:

Codice: Seleziona tutto

a = 0
n = 1

x = int(input("x? "))

while n <= x:
a = a + n
n = n + 1

print("La somma è", a)
N.B.:
Quando si scrive due o più volte la stessa variabile (ad esempio a) , il suo valore viene sovrascritto di volta in volta a seconda delle operazioni che si impongono! :D

Provate a scrivere qualcosa anche voi e pubblicarla qui sotto!
Sarò contentissimo ad eseguirle, a risolvere errori, a sintetizzarle ecc!! :yahoooooo:
Ciao Giuseppe,
Interessante questo tuo thread.

Avrei una richiesta a proposito delle iterazioni.

Se io con la funzione input() volessi scegliere una determinata opzione e scegliere finché non digito un qualcosa,
per esempio 'esci' o '0', come faccio?

Grazie
Ciao codap,
sono contento che ti sia piaciuto :D

Ti pongo questo esempio:

Codice: Seleziona tutto

val = float(input("n? "))
while val != 0:
    val = val ** 3
    print(val)
    val = float(input("n? "))
Con questo codice si chiede un numero (io ho inserito float) e si esegue il cubo di esso.
Come vedi il ciclo while funziona se e solo se il numero inserito è diverso da 0.
In questo modo, imponendo questa condizione, ti viene chiesto un numero per volta e ti da come risultato il suo cubo, richiedendoti subito dopo un altro numero. Come già detto, il programma si interrompe non appena do 0 come numero!

Spero di essere stato abbastanza chiaro :)
In caso volessi porci un codice da creare, su queste cose, che ti viene difficile, postalo pure e vedremo come aiutarti!
Grazie della risposta!! Molto chiara.

Però, hai risposto parzialmente alla mia domanda. Mi spiego (magari con un esempio pseudo code):

Codice: Seleziona tutto

var= int(input("Cosa vuoi fare?\n"))
print "1. Somma\n2. Log\n3. Exp\n0. Esci"
while var != 0:
    ...#cosa immettere qui?
Spero che così si capisca meglio cosa intendevo.
Grazie in anticipo
Penso che intenda una specie di calcolatrice vero? :D

Codice: Seleziona tutto

var = int(input("cosa vuoi fare? "))

while var != 0:
    if var == 1:
        somma1 = float(input("primo numero da sommare:" ))
        somma2 = float(input("secondo numero da sommare:" ))
        print(somma1 + somma2)
        var = int(input("cosa vuoi fare? "))
        
    elif var == 2:
        sottr1 = float(input("primo numero per sottrazione:" ))
        sottr2 = float(input("numero da sottrarre al primo:" ))
        print(sottr1 - sottr2)
        var = int(input("cosa vuoi fare? "))
        
Questo codice come vedi ti chiede cosa vuoi fare (puoi aggiungere del testo scrivendo per esempio l'elenco delle operazioni possibili, sia nella prima stringa che in una stringa a parte magari). Il ciclo si conclude quando digiti 0 alla domanda "cosa vuoi fare?" che viene ripetuta ad ogni fine operazione degli if/elif che vuoi inserire.
Quindi qui, scrivendo 1 ti fa accedere alla somma di due numeri, scrivendo 2 alla sottrazione.
Ovviamente questa è la base! Partendo da questo schema puoi realizzare programmi molto più completi e complessi :)
Spero di averti aiutato :) per qualsiasi cosa non esitare a chiedere!
Giuseppe La Gualano ha scritto:

Codice: Seleziona tutto

var = int(input("cosa vuoi fare? "))

while var != 0:
    if var == 1:
        somma1 = float(input("primo numero da sommare:" ))
        somma2 = float(input("secondo numero da sommare:" ))
        print(somma1 + somma2)
        var = int(input("cosa vuoi fare? "))
        
    elif var == 2:
        sottr1 = float(input("primo numero per sottrazione:" ))
        sottr2 = float(input("numero da sottrarre al primo:" ))
        print(sottr1 - sottr2)
        var = int(input("cosa vuoi fare? "))
        
Una cosa importante in informatica: normalizzare, ottimizzare il programma, ci sta una leggera ridondanza che deve esser risolta ;) Il codice è corretto, ma il medesimo input che si ripete tre volte, non è il top... Si può ovviare a ciò, ricorrendo a soluzioni più eleganti, ne elenco due:

Codice: Seleziona tutto

#SOLUZIONE1:
var = int(input("cosa vuoi fare? "))

while var != 0:
    if var == 1:
        somma1 = float(input("primo numero da sommare:" ))
        somma2 = float(input("secondo numero da sommare:" ))
        print(somma1 + somma2)
        
    elif var == 2:
        sottr1 = float(input("primo numero per sottrazione:" ))
        sottr2 = float(input("numero da sottrarre al primo:" ))
        print(sottr1 - sottr2)
        
    var = int(input("cosa vuoi fare? "))
        

Codice: Seleziona tutto

#SOLUZIONE 2:
var = 0

while 1:
    var = int(input("cosa vuoi fare? "))
    if var == 1:
        somma1 = float(input("primo numero da sommare:" ))
        somma2 = float(input("secondo numero da sommare:" ))
        print(somma1 + somma2)
        
    elif var == 2:
        sottr1 = float(input("primo numero per sottrazione:" ))
        sottr2 = float(input("numero da sottrarre al primo:" ))
        print(sottr1 - sottr2)
        
     elif var == 0:
     	break
        
Nel primo caso, l'input è stato eliminato dalle singole selezioni di var == 1 e var ==2 e spostato alla fine delle medesime prima della fine del corpo del ciclo, ma è stato mantenuto in testa prima del corpo del ciclo per caso base dal primo input var == 0 .

Per ovviare alla ridondanza in testa prima del corpo del ciclo, come si può notare nel secondo caso, viene emulata una iterazione non esistente in Python, il do-while, ovvero una iterazione con controllo in coda al ciclo, non in testa come avviene nel classico while. Come si può notare dal codice, la condizione del while è infinita, e terminerà soltanto quando riceverà in input 0 come var, in quanto nello specifico caso è presente un break, ovvero una uscita brutale ed immediata dal corpo del ciclo, con conseguente continuazione dell'esecuzione del codice in calce presente ;)

Immagine


MM
Michele Mignogna ha scritto:
Una cosa importante in informatica: normalizzare, ottimizzare il programma, ci sta una leggera ridondanza che deve esser risolta ;) Il codice è corretto, ma il medesimo input che si ripete tre volte, non è il top... Si può ovviare a ciò, ricorrendo a soluzioni più eleganti, ne elenco due:
Si in effetti mi sono accorto ora della ridondanza!! Sono andato un po di fretta e la gatta frettolosa fa i gattini ciechi :bash: :wallbash:

Per la seconda soluzione non ci ho pensato minimamente siccome il break non era elemento della guida :) In ogni caso fa sempre comodo avere una seconda soluzione! Grande!! :yahoooooo: