(Python) Cicli. Loop con contatore - per


Loop

Immagina una situazione in cui dobbiamo visualizzare la parola "Ciao" 10 volte. Cosa dobbiamo fare?
Puoi prendere e scrivere il comando 10 volte print("Ciao")
print("Ciao")
print("Ciao")
print("Ciao")
print("Ciao")
print("Ciao")
print("Ciao")
print("Ciao")
print("Ciao")
print("Ciao")
print("Ciao")

Ma cosa succede se non hai bisogno di 10 volte, ma 20, 30, 40 volte? E se 200 volte? In questo caso, la copia richiederà molto tempo. E se è necessario che l'utente stesso possa scegliere quante volte ha bisogno di visualizzare alcune informazioni sullo schermo? 

Una costruzione speciale ci aiuterà a far fronte a questo compito, che si chiama loop.
 
Un loop - è una costruzione algoritmica in cui una certa sequenza di comandi viene ripetuta più volte.< /div>
Nella maggior parte dei linguaggi di programmazione esistono due tipi di cicli: un ciclo con una variabile (for) e un ciclo con una condizione (while)
Iniziamo la nostra conoscenza dei cicli dal primo tipo.
 

Ciclo con una variabile o con un numero noto di passi (loop for)

Accade spesso che conosciamo il numero di ripetizioni di qualsiasi azione, oppure possiamo calcolare il numero di ripetizioni utilizzando i dati a noi noti. Alcuni linguaggi di programmazione hanno un comando scritto in russo dal comando
RIPETI (numero_di_ripetizioni).

In questo caso, possiamo specificare un numero specifico di ripetizioni. 
È interessante vedere come funziona questo ciclo a livello di macchina:
1. una determinata cella di memoria viene allocata in memoria e vi viene scritto il numero di ripetizioni,
2. quando il programma esegue il corpo del ciclo una volta, il contenuto di questa cella (contatore) viene decrementato di uno.
3. l'esecuzione del ciclo termina quando questa cella è zero.

Non esiste un tale costrutto in Python, ma esiste un for.
 
Devi ricordare!
La forma generale dell'operatore del ciclo for è la seguente:
per <conteggio variabile> in <valori della variabile contatore>:
    # corpo del ciclo

1. Il nome della variabile contatore può essere qualsiasi cosa (più spesso usano la lettera i)
2. Il corpo del ciclo è scritto con uno spostamento a destra, rispetto alla riga con l'intestazione del ciclo (for). Lo standard PEP8 si sposta di 4 spazi.
 
Vediamo esempi di come puoi scrivere l'output della parola "Ciao" 10 volte.
 
Esempio 1
for i in range(10): # for variabile i mutabile in range (in range)
  # da 0 a 10 (10 non è incluso)
    print("Ciao") # print Ciao
La variabile   è un contatore delle iterazioni completate (passaggi) del ciclo. In questo caso, il ciclo viene eseguito per i = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Sono esattamente 10 volte.
Lo stesso programma può essere scritto in modo diverso.
 
Esempio 2
per i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
    print("Ciao")
Nell'esempio 2, elenchiamo tutti i valori della variabile i per i quali dobbiamo eseguire il ciclo. Con un numero elevato di valori, è più conveniente utilizzare la funzione integrata range().
La sequenza di valori costruita dalla funzione range() è finita. Il ciclo terminerà sempre. 

Caratteristiche del ciclo for

Come modificare il passaggio nella sequenza di valori e non ricominciare da capo? La funzione  range(), per impostazione predefinita, crea una sequenza in cui ogni numero successivo è maggiore di 1 del precedente. Puoi utilizzare la range funzione in un'altra voce.

La forma generale della voce della funzione è la seguente:
intervallo([start], stop[, step])
  • start: numero iniziale della sequenza.
  • stop: genera numeri fino al numero specificato, escluso.
  • passo: la differenza tra ogni numero nella sequenza (passo)

Devi ricordare!
  • Tutti i parametri devono essere numeri interi:
  • Ciascuno dei parametri può essere positivo o negativo.
  • range() (e Python in generale) è basato sull'indice 0. Ciò significa che l'elenco degli indici inizia da 0, non da 1.  L'ultimo numero intero generato dalla funzione  range() dipende da stop ma non lo include. Ad esempio, range(0, 5) genera i numeri interi 0, 1, 2, 3, 4, escluso 5.


Esempio 1
per i nell'intervallo (10, 0, -1):
    stampa(i*i)
Il programma visualizza i quadrati dei numeri naturali da 10 a 1 in ordine decrescente
  • 10: il primo numero della sequenza.
  • 0: numero finale della sequenza (escluso questo numero).
  • -1: passo


Esempio 2
per i nell'intervallo (0, 101, 5):
    stampa(io)
Il programma visualizza tutti i numeri da 0 a 100 con incrementi di 5
  • 0: il primo numero nella sequenza.
  • 101: numero finale della sequenza (escluso questo numero).
  • 5: passaggio

Ripeti N volte

Tutti i programmi con un ciclo for che abbiamo scritto finora non possono essere definiti universali. Perché noi stessi impostiamo il numero di ripetizioni del corpo del loop. 
Ma cosa succede se il numero di ripetizioni dipende da qualche altro valore? Ad esempio, l'utente stesso desidera impostare il numero di ripetizioni del ciclo.
Cosa fare in questo caso?
Tutto è molto semplice. Invece di valori iniziali e finali numerici, possiamo utilizzare qualsiasi variabile che può essere calcolata o impostata dall'utente.

Ad esempio, dobbiamo visualizzare i quadrati dei numeri da 1 a N, dove il valore della variabile N viene inserito da tastiera da l'utente.
Il programma sarà simile a questo:
N = int(input()) # input N dalla tastiera
for i in range(1, N+1): # loop: for all i da 1 a N  - variabile i
                           # assumerà in sequenza valori da 1 a N
  print("quadrato", i, "=", i*i)  # stampa il quadrato di un numero

Quando si entra nel ciclo, viene eseguita l'istruzione di assegnazione i = 1, quindi la variabile i viene incrementata di uno ad ogni passo (i += 1). Il ciclo viene eseguito mentre la condizione i <= N è vera. Nel corpo del ciclo, l'unica istruzione di output stampa il numero stesso e il suo quadrato sullo schermo secondo il formato specificato.
Per la quadratura o altri esponenti bassi, è meglio usare la moltiplicazione.

Esegui il programma e guarda il risultato del suo lavoro con diversi valori della variabile N.