Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

2
respostas

Minha resposta à essa questão:

# importing the random module

import random

# setting the game processes

def rock_paper_scissors():
    # creating the list of options
    op1 = "rock"
    op2 = "paper"
    op3 = "scissors"
    options = [op1, op2, op3]
    # obtaining user choice
    user_choice = input("Choose one between 'Rock', 'Paper' or 'Scissors': ").lower()
    # generating computer choice
    computer_choice = random.choice(options)
    # generating results
    result = ""
    r1 = "You win!"
    r2 = "Computer Wins!"
    r3 = "Draw!"
    # game rules
    if user_choice == op1 and computer_choice == op2:
        result = r2
    elif user_choice == op1 and computer_choice == op3:
        result = r1
    elif user_choice == op2 and computer_choice == op3:
        result = r2
    elif user_choice == op2 and computer_choice == op1:
        result = r1
    elif user_choice == op3 and computer_choice == op1:
        result = r2
    elif user_choice == op3 and computer_choice == op2:
        result = r1
    elif user_choice == computer_choice:
        result = r3
    # displaying game results
    mensagem = f"You chose {user_choice}, the Machine chose {computer_choice}, the result is: {result}"
    print(mensagem)

rock_paper_scissors()
2 respostas

Olá, Raul. Tudo bem com você?

Obrigado por compartilhar sua solução para o desafio. A lógica utilizada para comparar a escolha da pessoa usuária com a escolha aleatória do computador está consistente, e o uso da função random.choice() foi uma boa escolha para gerar uma opção de forma aleatória. Também foi interessante organizar o código dentro de uma função, o que contribui para uma melhor estrutura e reutilização.

Outro ponto positivo é a utilização do método lower(), que torna a comparação mais confiável caso a entrada seja digitada com letras maiúsculas ou minúsculas. Como exemplo, se a pessoa digitar "Rock", "ROCK" ou "rock", todas as entradas serão convertidas para "rock", evitando comparações incorretas.

Como sugestão de evolução, você poderia adicionar uma validação para tratar entradas diferentes de "rock", "paper" ou "scissors". Dessa forma, o programa poderia informar que a opção é inválida e solicitar uma nova tentativa, tornando a experiência de uso mais robusta.

Na sua opinião, como seria possível adaptar esse jogo para permitir várias rodadas e manter uma pontuação entre a pessoa usuária e o computador?

Parabéns por compartilhar sua resolução. Continue participando do fórum. Estamos à disposição caso surjam novas dúvidas.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Olá, Mike!
Obrigado pelos comentários, vou trabalhar numa futura solução para pontuação. Estava refatorando o codigo e corrigi algumas coisas:

  1. troquei as opções que estavam longas e de dificil manutenção por um dicionario e usei o .keys() para gerar uma lista com as chaves do dicionario, assim dá pra adicionar novos elementos no jogo, como macaco, cobra e outras variedades. também dá pra criar outros jogos como o do cabra, queijo, pizza usando essa lógica;
  2. também substitui aquele bloco if/else com seis elementos confusos e repetitivos por um bloco com validação usando o proprio dicionario;
  3. por fim, para o programa não quebrar caso o usuario digite algo diferente do que está na lista de opções, chamei a função novamente logo apos a validação da entrada para que o programa reinicie em caso de erro de digitação.
# importing the random module

import random

# setting the game processes

def rock_paper_scissors():
    # creating the list of options
    beats = {
        "rock": "scissors",
        "scissors": "paper",
        "paper": "rock"
    }
    options = list(beats.keys())

    # obtaining user choice
    user_choice = input("Choose one between 'Rock', 'Paper' or 'Scissors': ").lower()
    # validating user input
    if user_choice not in options:
        print("Invalid option!")
        rock_paper_scissors()
        return
    # generating computer choice
    computer_choice = random.choice(options)
    # generating results
    result = ""

    # game rules
    if user_choice == computer_choice:
        result = "Draw!"
    elif beats[user_choice] == computer_choice:
        result = "You Win!"
    else:
        result = "The Machine Wins!"
    # displaying game results
    message = f"You chose {user_choice}, the Machine chose {computer_choice}, the result is: {result}"
    print(message)

rock_paper_scissors()