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 importante fornecida na descrição do problema é a seguinte:
"You should call dice()
exactly num_rolls
times in the body of roll_dice
."
A primeira abordagem que me veio à mente ao olhar para os exemplos foi utilizar as condicionais para verificar se o valor de algum dos dados é igual a 1 e, caso positivo, retornar 1.
No entanto, essa abordagem enfrenta um desafio que vai em direção oposta a dica importante fornecida na descrição do problema. No momento que o laço repetitivo encontrar o valor, interromperá o laço, ou seja, impedirá que a função dice()
seja chamada exatamente num_rolls
vezes, como exigido pelo problema.
Uma alternativa que encontrei foi a utilização de uma flag (valor booleano). Quando um valor igual a 1 é encontrado em uma jogada, a flag é definida como verdadeira. O loop continua rodando o número de vezes especificado em num_rolls.
Após o término do loop, outra condicional pode ser usada para determinar o valor da resposta, que será 1 se a flag for verdadeira (indicando que ocorreu o Sow Sad), ou o valor acumulado das jogadas, caso contrário.
Conclusão
Trocar um for _ in range()
por um while
foi um marco para mim na solução deste desafio, e a utilização de flags para indicar a ocorrência de uma ação tornou o código mais claro.
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.
Top comments (0)
Some comments have been hidden by the post's author - find out more