NIM game - PYTHON

Asked

Viewed 1,384 times

0

My question wasn’t so clear last time, so I decided to redo it here, and I think I know where I’m going wrong, but I don’t know what I’m going wrong.

In the question it says:

"You must write a program in the Python language, version 3, which allows a "victim" to play the NIM against the computer. The computer, of course, you should follow the winning strategy described above.

Let n be the initial part number and m the maximum part number that is possible withdraw in a round. To ensure that the computer wins always, it is necessary to consider the two possible scenarios for the start of the game:

If n is a multiple of (m+1), the computer must be "generous" and invite the player to start the match; Otherwise, the computer takes the initiative to start the game. Once started the game, the computer strategy to win consists of always leave a multiple number of pieces (m+1) to the player. If this is not possible, you should take the maximum number of possible parts.

Your job, then, will be to implement the Game and make the computer use the winning strategy."

I read the instructions several times, including discussions within the site explaining that I have to use exactly what is requested in the exercise, expressions, and the broker keeps saying that the computer should start the game, and when I test the program the computer starts.

I made the code on top of Anderson’s code Carlos Woss (https://ideone.com/GfaZyF) that’s the one:

tipo_jogo = 0

def computador_escolhe_jogada(n, m):
    if n <= m:
        return n
    else:
        quantia = n % (m+1)
        if quantia > 0:
            return quantia
        return m

def usuario_escolhe_jogada(n, m):
    jogada = 0
    while jogada == 0:
        jogada = int(input("Quantas peças você vai tirar? "))
        if jogada > n or jogada < 1 or jogada > m:
            print("Oops! Jogada inválida! Tente de novo.")
            jogada = 0
    return jogada

def partida(): 
    print(" ")
    n = int(input("Quantas peças? "))
    m = int(input("Limite de peças por jogada? "))

    is_computer_turn = True
    if False:
        print("O computador começa!")
    if n % (m+1) == 0: is_computer_turn = False
    if True:
        print("Você começa!")

    while n > 0: 
        if is_computer_turn:
            jogada = computador_escolhe_jogada(n, m)
            is_computer_turn = False
            print("Computador tirou {} peças.".format(jogada))
        else:
            jogada = usuario_escolhe_jogada(n, m)
            is_computer_turn = True
            print("Você tirou {} peças.".format(jogada))
        n = n - jogada
        print("Agora restam {} peças no tabuleiro.\n".format(n))
    if is_computer_turn:
        print("Você ganhou!")
        return 1
    else:
        print("Fim de jogo! O computador ganhou!")
        return 0

def campeonato():
    usuario = 0
    computador = 0
    for _ in range(3):
        vencedor = partida()
        if vencedor == 1:
            usuario = usuario + 1
        else:
            computador = computador + 1
    print("******* Final do campeonato! *******")
    print("Placar: Você  {} x {}  Computador".format(usuario, computador))

while tipo_jogo == 0:
    print("Bem-vindo ao jogo do NIM! Escolha:")
    print(" ")
    print("1 - Para jogar uma partida isolada")
    print("2 - Para jogar um campeonato")

    tipo_jogo = int(input("Sua opção: "))
    print(" ")

    if tipo_jogo == 1:
        print("Voce escolheu partida isolada!")
        partida()
        break
    if tipo_jogo == 2:
        print("Voce escolheu um campeonato!")
        campeonato()
        break
    else:
        print("Opção inválida!")
        tipo_jogo = 0

It follows how the game should be printed:

$ > python3 jogo_nim.py

Bem-vindo ao jogo do NIM! Escolha:

1 - para jogar uma partida isolada
2 - para jogar um campeonato 2

Voce escolheu um campeonato!

**** Rodada 1 ****

Quantas peças? 3
Limite de peças por jogada? 1

Computador começa!

O computador tirou uma peça.
Agora restam 2 peças no tabuleiro.

Quantas peças você vai tirar? 2

Oops! Jogada inválida! Tente de novo.

Quantas peças você vai tirar? 1

Você tirou uma peça.
Agora resta apenas uma peça no tabuleiro.

O computador tirou uma peça.
Fim do jogo! O computador ganhou!

**** Rodada 2 ****

Quantas peças? 3
Limite de peças por jogada? 2

Voce começa!

Quantas peças você vai tirar? 2 
Voce tirou 2 peças.
Agora resta apenas uma peça no tabuleiro.

O computador tirou uma peça.
Fim do jogo! O computador ganhou!

**** Rodada 3 ****

Quantas peças? 4
Limite de peças por jogada? 3

Voce começa!

Quantas peças você vai tirar? 2
Voce tirou 2 peças.
Agora restam 2 peças no tabuleiro.

O computador tirou 2 peças.
Fim do jogo! O computador ganhou!

**** Final do campeonato! ****

Placar: Você 0 X 3 Computador

Is there a logic error in what is asked? What could I do to fix?

  • 3
  • I asked that question, and no one solved my problem

  • 3

    When the question is not very clear, the recommended is to edit it in a way that makes it clear, create a new one with the same problem is risk of having it closed as duplicate and you can continue without answer.

  • The last I edited putting the information I needed and still did not solve my problem, I thought that creating a new people would see and help me

  • 3

    No, the correct is to edit the other, since it is the same problem. Do not forget to, after editing, warn the author of the answer you modified the question, so that he tries to edit his answer to suit the updated question.

  • I’ll edit the other one then

  • Let the other go and now you’ve made a new one anyway @Bob

  • @jbueno the other already has an answer

  • What a mess :p

  • whether or not I have an answer that doesn’t work for me, and no good soul helps me with that KKKKKKKKKKKK

  • Possible duplicate of Python - NIM game

Show 6 more comments
No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.