Skip to content

Instantly share code, notes, and snippets.

@benevidesh
Last active April 12, 2023 00:24
Show Gist options
  • Star 16 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save benevidesh/d08965aa89d02c5b139635f0bb851368 to your computer and use it in GitHub Desktop.
Save benevidesh/d08965aa89d02c5b139635f0bb851368 to your computer and use it in GitHub Desktop.
Minha implementação do jogo Nim (Curso Python USP-Coursera)
def computador_escolhe_jogada(n, m):
computadorRemove = 1
while computadorRemove != m:
if (n - computadorRemove) % (m+1) == 0:
return computadorRemove
else:
computadorRemove += 1
return computadorRemove
def usuario_escolhe_jogada(n, m):
jogadaValida = False
while not jogadaValida:
jogadorRemove = int(input('Quantas peças você vai tirar? '))
if jogadorRemove > m or jogadorRemove < 1:
print()
print('Oops! Jogada inválida! Tente de novo.')
print()
else:
jogadaValida = True
return jogadorRemove
def campeonato():
numeroRodada = 1
while numeroRodada <= 3:
print()
print('**** Rodada', numeroRodada, '****')
print()
partida()
numeroRodada += 1
print()
print('Placar: Você 0 X 3 Computador')
def partida():
n = int(input('Quantas peças? '))
m = int(input('Limite de peças por jogada? '))
vezDoPC = False
if n % (m+1) == 0:
print()
print('Voce começa!')
else:
print()
print('Computador começa!')
vezDoPC = True
while n > 0:
if vezDoPC:
computadorRemove = computador_escolhe_jogada(n, m)
n = n - computadorRemove
if computadorRemove == 1:
print()
print('O computador tirou uma peça')
else:
print()
print('O computador tirou', computadorRemove, 'peças')
vezDoPC = False
else:
jogadorRemove = usuario_escolhe_jogada(n, m)
n = n - jogadorRemove
if jogadorRemove == 1:
print()
print('Você tirou uma peça')
else:
print()
print('Você tirou', jogadorRemove, 'peças')
vezDoPC = True
if n == 1:
print('Agora resta apenas uma peça no tabuleiro.')
print()
else:
if n != 0:
print('Agora restam,', n, 'peças no tabuleiro.')
print()
print('Fim do jogo! O computador ganhou!')
print('Bem-vindo ao jogo do NIM! Escolha:')
print()
print('1 - para jogar uma partida isolada')
tipoDePartida = int(input('2 - para jogar um campeonato '))
if tipoDePartida == 2:
print()
print('Voce escolheu um campeonato!')
print()
campeonato()
else:
if tipoDePartida == 1:
print()
partida()
@rubensr28
Copy link

Obrigado! Estava com dificuldade nesse problema, seu código me ajudou a entender.

@manod44
Copy link

manod44 commented Aug 7, 2019

Obrigado! Me ajudou bastante.

@benevidesh
Copy link
Author

Legal saber que o código ajudou. Esse é sem dúvida um dos melhores cursos de python disponível online.

@luisvenezian
Copy link

muito bom!

@gabrielsartori15
Copy link

Obrigado. Estava com dificuldade.

@RafaelSacramentoo
Copy link

Ainda não consegui fazer o jogo estou com muita dificuldade, obrigado pela ajuda

@MatosOliveira
Copy link

MatosOliveira commented Mar 9, 2020

Muito obrigado pela sua ajuda. Abs.

@MRB-2020
Copy link

MRB-2020 commented Jun 1, 2020

Muito bom, eu resolvi esse problema para o curso da USP mas estava querendo ver se havia maneira mais sofisticada de escrever o código do jogo Nim. A maior parte da sua solução ficou muito melhor do que a minha.

Segue a parte da minha solução que achei mais eficiênte do que a sua. Estou divulgando na intenção de promover debate e mostrar outras soluções. Espero que seja útil.

Screen Shot 2020-05-31 at 10 03 42 PM

@lcgandrade
Copy link

Parabéns pela iniciativa, assim como eu acredito que muitas pessoas estavam com dificuldades para iniciar. obrigado.

@lcgandrade
Copy link

Pessoal segue o script do jogo nim

Obs.: Apenas escrevi cada etapa do código e acrescentei uma condicional, mas lembrando que eu não teria conseguido entender se não fosse o código já disponibilizado acima pelo nosso amigo. Obrigado a todos.

jogo nim!

@lcgandrade
Copy link

`#Função retornará o resto da divisão entre n e m
def computador_escolhe_jogada(n, m):
computadorRemove = 1
while computadorRemove != m:
if (n - computadorRemove) % (m+1) == 0:
return computadorRemove
else:
computadorRemove += 1
return computadorRemove

----------------------------- / / -----------------------------

#Input do usuário para informar a qtde de números a jogar
#Verifica se a qtde informada é menor que a variável 'm' e se é maior que 1
def usuario_escolhe_jogada(n, m):
jogadaValida = False
while not jogadaValida:
jogadorRemove = int(input('Quantas peças você vai tirar? '))
if jogadorRemove > m or jogadorRemove < 1:
print('Oops! Jogada inválida! Tente de novo.')
else:
jogadaValida = True
return jogadorRemove

----------------------------- / / -----------------------------

#Função de campeonato com 3 rodadas
#Entra na função partida, executa e retorna contabilizando a partida dentro do campeonato
def campeonato():
numeroRodada = 1
while numeroRodada <= 3:
print('**** Rodada', numeroRodada, '****')
partida()
numeroRodada += 1
print('Placar: Você 0 X 3 Computador')

----------------------------- / / -----------------------------

#Input das variáveis 'n' e 'm'
#Se a variável 'n' for multipla da variável 'm' o usuário começa o jogo
#Se a variável 'n' não for multipla da variável 'm' o computador começa o jogo
#Função while executa até a variável 'n' ser maior que 0
def partida():
n = int(input('Quantas peças? '))
m = int(input('Limite de peças por jogada? '))
vezDoPC = False
if n % (m+1) == 0:
print('Voce começa!')
else:
print('Computador começa!')
vezDoPC = True
while n > 0:
if vezDoPC:
computadorRemove = computador_escolhe_jogada(n, m)
n -= computadorRemove
if computadorRemove == 1:
print('O computador tirou uma peça')
else:
print('O computador tirou', computadorRemove, 'peças')
vezDoPC = False
else:
jogadorRemove = usuario_escolhe_jogada(n, m)
n -= jogadorRemove
if jogadorRemove == 1:
print('Você tirou uma peça')
else:
print('Você tirou', jogadorRemove, 'peças')
vezDoPC = True
if n == 1:
print('Agora resta apenas uma peça no tabuleiro.')
else:
if n != 0:
print('Agora restam,', n, 'peças no tabuleiro.')
print('Fim do jogo! O computador ganhou!')

----------------------------- / / -----------------------------

#Variável inicial para chamar o jogo
#Escolher entre partida única e campeonato
#Diferente das opções disponíveis informar o erro
print('Bem-vindo ao jogo do NIM! Escolha:')
print('1 - para jogar uma partida isolada ')
tipoDePartida = int(input('2 - para jogar uma campeonato '))
if tipoDePartida == 1:
print('Voce escolheu uma partida isolada!')
partida()
if tipoDePartida == 2:
print('Voce escolheu um campeonato!')
campeonato()
if tipoDePartida != 1 and tipoDePartida != 2:
print('Opção inválida, escolha entre 1 e 2')

----------------------------- / / -----------------------------

`

`

@rebecasouzag
Copy link

Obrigada por compartilhar, me ajudou com as dúvidas!

@Leodzt5
Copy link

Leodzt5 commented Jun 20, 2022

Muito bom! Parabéns meu caro

@edu1972
Copy link

edu1972 commented Apr 12, 2023

Muito Bom, código limpo e bem desenvolvido. Te agradeço por compartilhar seu conhecimento.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment