Domanda Risolto Rimandare a pezzo di codice precedente

GabryBarbe

Utente Bronze
26 Dicembre 2020
80
12
29
36
Buongiorno a tutti,

avrei una domanda: se in un programma dovessi rimandare a un pezzo di codice indietro, come faccio?
Faccio un esempio: devo digitare 1 o 2 per eseguire una selezione, ma se digito 3 voglio che mi venga richiesto nuovamente di eseguire la selezione. Come dico al programma di rimandarmi a quella parte di codice e poi rifare il controllo?
 
Normalmente si racchiude la richiesta dell'input in un loop: se l'input soddisfa i requisiti interrompi il ciclo, in caso contrario ripeti la richiesta dell'input.
Per fare un esempio:

Python:
data = 0
while True:
    data = int(input("Pick a number from 0 to 10:"))
    if data not in range(0,10):
        print("Invalid input, try again!")
    else:
        break
    
print(data)

Puoi anche concatenare le condizioni (data >= 0 && data <= 10).
 
  • Love
Reazioni: GabryBarbe
Normalmente si racchiude la richiesta dell'input in un loop: se l'input soddisfa i requisiti interrompi il ciclo, in caso contrario ripeti la richiesta dell'input.
Per fare un esempio:

Python:
data = 0
while True:
    data = int(input("Pick a number from 0 to 10:"))
    if data not in range(0,10):
        print("Invalid input, try again!")
    else:
        break
   
print(data)

Puoi anche concatenare le condizioni (data >= 0 && data <= 10).
Grazie mille, nella funzione range il secondo valore è escluso, corretto?
 
Si, è escluso.

Io non conosco Python, magari ci sono soluzioni più "pythoniane".

Altre soluzioni, per farti altri esempi:
Python:
data = 0
repeat = True
while repeat:
    data = int(input("Pick a number from 0 to 10:"))
    repeat = data not in range(0,11)
    if repeat:
        print("Invalid input, try again!")
    
print(data)

Un altro ancora:
Python:
data = -1
while data < 0 or data > 10:
    data = int(input("Pick a number from 0 to 10:"))
    
print(data)
 
Ultima modifica:
Ahimè, il primo codice di DispatchCode è sbagliato in quanto convalida che il numero dato in input sia compreso tra 0 e 9 e non tra 0 e 10. Dopo si è accorto che era escluso il 10.

In alternativa alle altre due soluzioni corrette di DispatchCode, ecco la mia soluzione per Python 3.8+:
Python:
n = int()
while not (n := int(input("Inserisci un numero tra 1 e 2: "))) in range(1, 3): # da 1 a 2
    print("Il numero inserito non è compreso tra 1 e 2.")

print("Selezione:", n)

oppure:

Python:
n = int()
while not 1 <= (n := int(input("Inserisci un numero tra 1 e 2: "))) <= 2:
    print("Il numero inserito non è compreso tra 1 e 2.")

print("Selezione:", n)

Un altro problema che si potrebbe presentare con le soluzioni di DispatchCode è qualora l'input immesso non fosse di tipo int. Qui la mia soluzione resta nello stesso numero di righe di codice. Sembra hacky, ma è da veri pro:

Python:
n = int()
while not 1 <= (int(n) if ((n := input("Inserisci un numero tra 1 e 2: ")).isdigit()) else -1) <= 2: # -1 come fallback
    print("L'input non è un numero compreso tra 1 e 2.")

print("Selezione:", n)

o con range():

Python:
n = int()
while not (int(n) if ((n := input("Inserisci un numero tra 1 e 2: ")).isdigit()) else -1) in range(1, 3): # -1 come fallback
    print("L'input non è un numero compreso tra 1 e 2.")

print("Selezione:", n)

In questo modo il programma non crasha se viene immessa una stringa del tipo pippo.
Questo è un link utile relativo all'introduzione dell'operatore :=.
 
  • Mi piace
  • Love
Reazioni: 0xbro e GabryBarbe