fork(2) download
  1. tipo_jogo = 0
  2.  
  3. def computador_escolhe_jogada(n, m):
  4.  
  5. # Vez do computador:
  6. print("Vez do computador!")
  7.  
  8. # Pode retirar todas as peças?
  9. if n <= m:
  10.  
  11. # Retira todas as peças e ganha o jogo:
  12. return n
  13.  
  14. else:
  15.  
  16. # Verifica se é possível deixar uma quantia múltipla de m+1:
  17. quantia = n % (m+1)
  18.  
  19. if quantia > 0:
  20. return quantia
  21.  
  22. # Não é, então tire m peças:
  23. return m
  24.  
  25. def usuario_escolhe_jogada(n, m):
  26.  
  27. # Vez do usuário:
  28. print("Sua vez!\n")
  29.  
  30. # Define o número de peças do usuário:
  31. jogada = 0
  32.  
  33. # Enquanto o número não for válido
  34. while jogada == 0:
  35.  
  36. # Solicita ao usuário quantas peças irá tirar:
  37. jogada = int(input("Quantas peças irá tirar? "))
  38.  
  39. # Condições: jogada < n, jogada < m, jogada > 0
  40. if jogada > n or jogada < 1 or jogada > m:
  41.  
  42. # Valor inválido, continue solicitando ao usuário:
  43. jogada = 0
  44.  
  45. # Número de peças válido, então retorne-o:
  46. return jogada
  47.  
  48. def partida():
  49.  
  50. print(" ")
  51.  
  52. # Solicita ao usuário os valores de n e m:
  53. n = int(input("Quantas peças? "))
  54. m = int(input("Limite de peças por jogada? "))
  55.  
  56. # Define uma variável para controlar a vez do computador:
  57. is_computer_turn = True
  58.  
  59. # Decide quem iniciará o jogo:
  60. if n % (m+1) == 0: is_computer_turn = False
  61.  
  62. # Execute enquanto houver peças no jogo:
  63. while n > 0:
  64.  
  65. if is_computer_turn:
  66. jogada = computador_escolhe_jogada(n, m)
  67. is_computer_turn = False
  68. print("Computador retirou {} peças.".format(jogada))
  69. else:
  70. jogada = usuario_escolhe_jogada(n, m)
  71. is_computer_turn = True
  72. print("Você retirou {} peças.".format(jogada))
  73.  
  74. # Retira as peças do jogo:
  75. n = n - jogada
  76.  
  77. # Mostra o estado atual do jogo:
  78. print("Restam apenas {} peças em jogo.\n".format(n))
  79.  
  80. # Fim de jogo, verifica quem ganhou:
  81. if is_computer_turn:
  82. print("Você ganhou!")
  83. return 1
  84. else:
  85. print("O computador ganhou!")
  86. return 0
  87.  
  88. def campeonato():
  89.  
  90. # Pontuações:
  91. usuario = 0
  92. computador = 0
  93.  
  94. # Executa 3 vezes:
  95. for _ in range(3):
  96.  
  97. # Executa a partida:
  98. vencedor = partida()
  99.  
  100. # Verifica o resultado, somando a pontuação:
  101. if vencedor == 1:
  102. # Usuário venceu:
  103. usuario = usuario + 1
  104. else:
  105. # Computador venceu:
  106. computador = computador + 1
  107.  
  108. # Exibe o placar final:
  109. print("Placar final: Você {} x {} Computador".format(usuario, computador))
  110.  
  111.  
  112. # Enquanto não for uma opção válida:
  113. while tipo_jogo == 0:
  114.  
  115. # Menu de opções:
  116. print("Bem-vindo ao jogo do NIM! Escolha:")
  117. print(" ")
  118. print("1 - Para jogar uma partida isolada")
  119. print("2 - Para jogar um campeonato")
  120.  
  121. # Solicita a opção ao usuário:
  122. tipo_jogo = int(input("Sua opção: "))
  123. print(" ")
  124.  
  125. # Decide o tipo de jogo:
  126. if tipo_jogo == 1:
  127. print("Voce escolheu partida isolada!")
  128. partida()
  129. break
  130. if tipo_jogo == 2:
  131. print("Voce escolheu um campeonato!")
  132. campeonato()
  133. break
  134. else:
  135. print("Opção inválida!")
  136. tipo_jogo = 0
Success #stdin #stdout 0.02s 27704KB
stdin
1
5
2
2
stdout
Bem-vindo ao jogo do NIM! Escolha:
 
1 - Para jogar uma partida isolada
2 - Para jogar um campeonato
Sua opção:  
Voce escolheu partida isolada!
 
Quantas peças? Limite de peças por jogada? Vez do computador!
Computador retirou 2 peças.
Restam apenas 3 peças em jogo.

Sua vez!

Quantas peças irá tirar? Você retirou 2 peças.
Restam apenas 1 peças em jogo.

Vez do computador!
Computador retirou 1 peças.
Restam apenas 0 peças em jogo.

O computador ganhou!