DEV Community

Matheus 🇧🇷
Matheus 🇧🇷

Posted on

CS61A: Projeto HOG (Parte 1)

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 em hog.py. Esta função recebe dois argumentos: um número inteiro positivo chamado num_rolls recebendo o número de vezes que o dado será rolado e uma função dice. 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.

Solução

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 (1)

Some comments have been hidden by the post's author - find out more