Introdução
O curso CS 61A da Universidade da Califórnia, Berkeley, é um curso de introdução à ciência da computação. Ele busca fornecer uma base sólida em programação, abordando conceitos fundamentais de estruturas de dados, algoritmos e paradigmas de programação. O curso é conhecido por sua ênfase em Python como a linguagem principal de programação e pela abordagem prática e desafiadora.
Esta publicação vai focar no primeiro projeto desta disciplina que é chamado ‘O jogo de Hog’. Eu confesso que não conhecia este jogo até começar a fazer este desafio, continuo não tendo o jogado mas compreendi as regras que são explicadas na página do projeto.
Ainda não terminei de fazer este desafio, então vou publicar meus sucessos, dúvidas e dificuldades como forma de estudo e buscar trabalhar em cima da minha comunicação também. O projeto está divido em fases e cada fase possui uma série de problemas a serem solucionados.
Fase 1: Problema 1
Implemente a função
roll_dice
emhog.py
. Esta função recebe dois argumentos: um número inteiro positivo chamadonum_rolls
recebendo o número de vezes que o dado será rolado e uma funçãodice
. Esta função retornará o número de pontos ao rolar o dado aquele número de vezes em uma rodada: será tanto a soma de suas saídas ou 1 (Sow Sad).
-
Sow Sad. Se qualquer resultado do dado lançado for 1, a pontuação do jogador na rodada será
1
.
Exemplos
-
Exemplo 1: O jogador da rodada joga o dado 7 vezes, 5 destas são 1. A pontuação do turno será
1
. -
Exemplo 2: O jogador da rodada joga o dado 4 vezes, em todas são 3. Como Sow Sad não ocorreu, a pontuação do turno ao jogador será de
12
.
Solução
- Uma dica muito importante é dada na descrição do problema. Segue a dica:
You should call
dice()
exactlynum_rolls
times in the body ofroll_dice
.`
Acredito que seja natural ao observar os exemplos, já pensar numa situação do uso de condicionais para verificar se o valor de algum dos dados é 1.
- Se for 1, retornar 1.
O problema desta forma de pensar é que não será atendido a condição de ter que chamar a função dice()
o mesmo número de vezes que num_rolls
. Já que o retornar dentro de um loop é uma condição de parada, logo a função não mais será chamada.
Minha alternativa para este problema foi colocar uma flag
para ser atendida. A partir do momento que encontra o valor 1
, o loop continua rodando a quantidade num_rolls
de vezes e a partir da flag posso, com outra condicional, retornar o valor da resposta.
Conclusão
Tive um momento a-há ao trocar o for _ in range()
por um while
. A partir daí, todos os meus testes foram aprovados e usar flags para indicar que uma ação aconteceu, acredito que tenha tornado o meu código com maior clareza.
Quero buscar falar de cada problema que for fazendo e aprimorar minha capacidade de solucionar problemas, espero que isto ajude a quem buscar fazer este curso.