Você já deve ter se deparado com códigos que precisavam ser executados várias vezes em função de alguma condição. Um exemplo simples seria a entrada de dados do nosso jogo... enquanto o jogador não inserir o valor correto, vamos continuar pedindo que o ele digite.
Uma das estruturas que o Python disponibiliza é o ``while```. Ele vai repetir um bloco de código enquanto uma condição for verdadeira.
x = 0
while x <= 10:
print(x)
x = x + 1
No nosso exemplo, enquanto o valor da variável x
for menor ou igual a 10, vamos imprimir o seu valor, somar +1, e repetir o laço.
Uma possibilidade para nosso jogo é pedir o valor da life
até que o usuário digite o valor correto.
while True:
life = input("Digite a life: ")
if life.isnumeric() and 0 < life <= 20:
life = float(life)
break
else:
print('Isso nao ta certo...')
Vamos aproveitar esse exemplo para falar sobre a instruçāo break
, que interrompe a execução do while
, caso o valor de life
seja numérico e esteja entre 1 e 20.
Uma outra estrutura importante é o for
, que nós usamos em nosso exemplo com uma informação adicional: as skills. Criamos três skill básicas:
skills = ['força', 'destreza', 'inteligência']
Caso você não saiba que estrutura é esta, falaremos sobre ela melhor mais adiante, no momento basta saber que esta é uma lista em Python.
Criamos também uma lista para os valores de cada skill, e utilizamos o for
para "caminhar" pela lista:
skills = ['força', 'destreza', 'inteligência']
skills_values = []
for skill in skills:
value = float(input("Digite um valor para a skill {}: ".format(skill)))
skills_values.append(value)
Basicamente, este for
vai atribuir a skill
cada valor armazenado em skills
, seguindo a sequência em que eles aparecem. Ou seja:
- skill = 'força'
- skill = 'destreza'
- skill = 'inteligência'
Também usamos o for
quando imprimimos a lista de skill com seus valores:
for skill, value in zip(skills, skills_values):
print(">> skill {} - {}".format(skill, value))
CURIOSIDADE: no nosso exemplo usamos a função zip()
, a ideia dela é fazer um iterador que agrega elementos de cada uma das listas. Mais para frente, estudaremos uma estrutura de dados chamada tupla e poderemos voltar a esta função e entendê-la melhor, mas resumidamente teremos:
zip('ABCD', 'xyzw') --> Ax By Cz Dw