Resumo: neste tutorial, você aprenderá sobre a instrução while else
do Python e como usá-la efetivamente.
Introdução à instrução while else do Python
Em Python, a instrução while
pode ter uma cláusula else
opcional:
while condition:
# code block to run
else:
# else clause code block
Nesta sintaxe, a condition
é verificado no início de cada iteração. O bloco de código dentro da instrução while
será executado enquanto condition
for True
.
Quando a condition
torna-se False
e o loop é executado normalmente, a cláusula else
será executada. No entanto, se o loop for encerrado prematuramente por uma instrução break
ou return
, a cláusula else
não será executada.
O fluxograma a seguir ilustra a cláusula while...else
:
Se você estiver familiarizado com outras linguagens de programação, como JavaScript, Java ou C#, descobrirá que a cláusula else
é bastante estranha no contexto de um loop.
No entanto, a cláusula while else
acaba por ser muito útil em alguns casos. Vamos dar uma olhada em um exemplo de uso da instrução while else
.
Exemplo de instrução while else do Python
Suponha que temos a seguinte lista de frutas onde cada fruta é um dicionário que consiste nas chaves com os nomes fruit
e qty
:
basket = [
{'fruit': 'apple', 'qty': 20},
{'fruit': 'banana', 'qty': 30},
{'fruit': 'orange', 'qty': 10}
]
Queremos fazer um programa que permita aos usuários inserir um nome de fruta. Com base no nome de entrada, vamos procurá-lo na lista basket
e mostrar sua quantidade se a fruta estiver na lista.
Caso a fruta não seja encontrada, permitiremos que os usuários insiram a quantidade dessa fruta e a adicionem à lista.
O seguinte programa é a primeira tentativa:
basket = [
{'fruit': 'apple', 'qty': 20},
{'fruit': 'banana', 'qty': 30},
{'fruit': 'orange', 'qty': 10}
]
fruit = input('Enter a fruit:')
index = 0
found_it = False
while index < len(basket):
item = basket[index]
# check the fruit name
if item['fruit'] == fruit:
found_it = True
print(f"The basket has {item['qty']} {item['fruit']}(s)")
break
index += 1
if not found_it:
qty = int(input(f'Enter the qty for {fruit}:'))
basket.append({'fruit': fruit, 'qty': qty})
print(basket)
Observe que há uma maneira melhor de desenvolver este programa. O programa neste exemplo é apenas para fins de demonstração.
Como funciona:
- Primeiro, solicite uma entrada do usuário usando a função
input()
. - Em segundo lugar, inicialize o
index
como zero e marquefound_it
comoFalse
. Oindex
será usado para acessar a lista por índice. E o sinalizadorfound_it
será definido comoTrue
se o nome da fruta for encontrado. - Em terceiro lugar, repita a lista e verifique se o nome da fruta corresponde ao nome de entrada. Se sim, defina o sinalizador
found_it
comoTrue
, mostre a quantidade da fruta e saia do loop usando a instruçãobreak
. - Por fim, verifique o sinalizador
found_it
após o loop e adicione a nova fruta à lista sefound_it
forFalse
.
O seguinte executa o programa quando apple é a entrada:
Enter a fruit:apple
The basket has 20 apple(s)
E o seguinte executa o programa quando limão é a entrada:
Enter a fruit:lemon
Enter the qty for lemon:15
[{'fruit': 'apple', 'qty': 20}, {'fruit': 'banana', 'qty': 30}, {'fruit': 'orange', 'qty': 10}, {'fruit': 'lemon', 'qty': 15}]
O programa funciona como esperado.
No entanto, será mais conciso se você usar a instrução while else
.
Veja a seguir a nova versão do programa que usa a instrução while else
:
basket = [
{'fruit': 'apple', 'qty': 20},
{'fruit': 'banana', 'qty': 30},
{'fruit': 'orange', 'qty': 10}
]
fruit = input('Enter a fruit:')
index = 0
while index < len(basket):
item = basket[index]
# check the fruit name
if item['fruit'] == fruit:
print(f"The basket has {item['qty']} {item['fruit']}(s)")
found_it = True
break
index += 1
else:
qty = int(input(f'Enter the qty for {fruit}:'))
basket.append({'fruit': fruit, 'qty': qty})
print(basket)
Neste programa, a cláusula else
substitui a necessidade de ter o sinalizador found_it
e a instrução if
após o loop.
Se a fruta não for encontrada, o loop while
é encerrado normalmente e a cláusula else
será executada para adicionar uma nova fruta à lista.
No entanto, se o fruto for encontrado, o loop while
será encontrado na instrução break
e encerrado prematuramente. Neste caso, a cláusula else
não será executada.
Resumo
- A cláusula
else
na instruçãowhile else
será executada quando acondition
do loopwhile
forFalse
e o loop for executado normalmente sem encontrar a instruçãobreak
oureturn
. - Experimente a instrução Python
while else
sempre que precisar de um sinalizador em um loopwhile
.