# Your task in to design a game of Nim in Python. In this game “Two players take turns removing objects from distinct heaps or piles. On each turn, a player must remove at least one object, and may remo…

Your task in to design a game of Nim in Python. In this game
“Two players take turns removing objects from distinct heaps or
piles. On each turn, a player must remove at least one object, and
may remove any number of objects provided they all come from the
same heap/pile. The goal of the game is to avoid taking the last
object.” (Wikipedia)

In your implementation of the game, there will be 3 piles of
objects. At the start of the game, each of the three piles will be
initialized by a random number of objects. Random number should be
between 5 and 15. The players will take turn picking up objects
from the piles. A player can even pick up all items from a single
pile. The player that picks up last object (across all piles)
loses.

You should use functions in the program. Functions must follow a
good programming style, that is, any well-defined task which needs
to be executed often, can be moved into its own function.

=====================PLEASE PROVIDE A CLEAR FLOWCHART FOR THE
PROGRAM.=============================

SAMPLE OF THE PROGRAM ==================

===== Welcome to Nim Game =====

Here are the three piles
A: *******
B: *************
C: *********
(7, 13, 9)

Player 1, choose your pile (A, B, C): C
Choose how many objects to remove: 5
OK

A: *******
B: *************
C: ****
(7, 13, 4)

Player 2, choose your pile (A, B, C):
krypton
ERR: Sorry, that is not a valid pile.
Player 2, choose your pile (A, B, C): A
Choose how many objects to remove: 7
OK
A:
B: *************
C: ****
(0, 13, 4)

Player 1, choose your pile (A, B, C): B
Choose how many objects to remove: alpha
ERR: Sorry, that is not a valid number.
Choose how many objects to remove: 10
OK

A:
B: ***
C: ****
(0, 3, 4)

Player 2, choose your pile (A, B, C): C
Choose how many objects to remove: 8
ERR: Sorry, there is not enough objects to remove in this
pile.
Choose how many objects to remove: 4
OK

A:
B: ***
C:
(0, 3, 0)

Player 1, choose your pile (A, B, C): C
ERR: Sorry, this pile is already empty.
Player 1, choose your pile (A, B, C): B
Choose how many objects to remove: 1
OK

A:
B: **
C:
(0, 2, 0)

Player 2, choose your pile (A, B, C): B
Choose how many objects to remove: 2
OK

A:
B:
C:
(0, 0, 0)

Player 2 picked up the last object. <<< Player 1
>>> is the WINNER.

Thanks for playing. Goodbye.

## Solutions

##### Expert Solution

Code:

Code:

#for generating random number
import random

#method for printing the pile objects
def printObjects(objectA,objectB,objectC):
print("A: ",end="")

for a in range(0,objectA):
print("*",end="")

print("\nB: ",end="")
for b in range(0,objectB):
print("*",end="")

print("\nC: ",end="")
for c in range(0,objectC):
print("*",end="")

print("\n(",objectA,",",objectB,",",objectC,")\n")

#method for taking input from
user
def takeInput(player,objectA,objectB,objectC):
pile=""
check=0
#keep running the loop till player does not
enter either A or B or C
while(pile!='A' and pile!='B' and
pile!='C'):
pile=input("{} ,choose
if(pile!='A' and
pile!='B' and pile!='C'):

print("ERR: Sorry that is not a valid pile.")
elif(pile=='A' and
objectA==0):

print("Sorry, this pile is already empty.")

pile=""
elif(pile=='B' and
objectB==0):

print("Sorry, this pile is already empty.")

pile=""
elif(pile=='C' and
objectC==0):

print("Sorry, this pile is already empty.")

pile=""

#keep running the loop till player does not
select valid no of piles to be removed
while(check==0):
number=input("Choose how
many object to remove:")
if(not number.isdigit()
or int(number)<=0):

print("ERR: Sorry, that is not a valid number.")
elif(pile=='A' and
int(number)>objectA):

print("ERR: Sorry, there is not enough objects to remove in this
pile.")
elif(pile=='B' and
int(number)>objectB):

print("ERR: Sorry, there is not enough objects to remove in this
pile.")
elif(pile=='C' and
int(number)>objectC):

print("ERR: Sorry, there is not enough objects to remove in this
pile.")

else:

#remove the piles from the object selected by the player

if(pile=='A'):

objectA=objectA-int(number)

break

elif(pile=='B'):

objectB=objectB-int(number)

else:

objectC=objectC-int(number)

check=1
print("OK\n")
#reurn the updated objects value
return objectA,objectB,objectC

def main():
#initialize object with random number between 5
and 15
objectA=random.randint(5,15)
objectB=random.randint(5,15)
objectC=random.randint(5,15)

print("Welcome to Nim Game\n")

#keep running the while loop till any of
objects have pile in them
while(objectA!=0 or objectB!=0 or
objectC!=0):
#player 1 turn
turn=1
#display the objects by
calling method

printObjects(objectA,objectB,objectC)
#take input from
player1

(objectA,objectB,objectC)=takeInput("Player
1",objectA,objectB,objectC)

#if after removing
piles there are objects with piles in them
#give turn to playaer
2
if(objectA!=0 or
objectB!=0 or objectC!=0):

turn=2

printObjects(objectA,objectB,objectC)

(objectA,objectB,objectC)=takeInput("Player
2",objectA,objectB,objectC)

#display the objects
printObjects(objectA,objectB,objectC)
#if last turn was of player1
if(turn==1):
print("Player 1 picked
up the last object. <<<Player 2>>> is the
winner.")

else:
print("Player 2 picked
up the last object. <<<Player 1>>> is the
winner.")

print("\nThanks for playing. Goodbye.")

if __name__=='__main__':
main()

Output:

Flowchart: