Python Forum
Rock paper Scissors - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: General (https://python-forum.io/forum-1.html)
+--- Forum: Code Review (https://python-forum.io/forum-46.html)
+--- Thread: Rock paper Scissors (/thread-32236.html)



Rock paper Scissors - Milan - Jan-29-2021

Hello team,

Any suggestion on how to improve my rps game before making a gui for it?

from random import randint

def startgame():
	print(
	''' What do you want to play:
		[0] Rock
		[1] Paper
		[2] Scissors
	''')

def inputValidation(userInput):

	while userInput not in [0, 1, 2]:
		print('Incorrect input, please insert a value between 0 and 2')
		userInput = int(input(prompt)) 
	return userInput 

def result(ValidatedInput, computerMove):
	moves = {0:'Rock', 1:'Paper', 2:'Scissors'}

	print(f'You played: {moves[ValidatedInput]}\nComputer played: {moves[computerMove]}')
	
	w = 'You Win!'
	l = 'You Lose!'
	
	if ValidatedInput == computerMove:
		print("It's a draw")
	elif ValidatedInput == 0 and computerMove == 1:
		print(l)
	elif ValidatedInput == 0 and computerMove == 2:
		print(w) 	
	elif ValidatedInput == 1 and computerMove == 0:
		print(w)
	elif ValidatedInput == 1 and computerMove == 2:
		print(l)
	elif ValidatedInput == 2 and computerMove == 0:
		print(l)
	elif ValidatedInput == 2 and computerMove == 1:
		print(w)

computerMove = randint(0, 2)
prompt = '> '

startgame()

userInput = int(input(prompt))
ValidatedInput = inputValidation(userInput)

result(ValidatedInput, computerMove)
Any thoughts are most welcome.


RE: Rock paper Scissors - j.crater - Jan-31-2021

Hello,

the code looks good to me.
It is common with this kind of games to have a while loop and let player replay if he wants, instead of rerunning the program. But that is up to you.
There are ways to shorten the part of code that checks for the winner. But in case of a simple game like RPS, the way you wrote it works fine and is readable.


RE: Rock paper Scissors - Milan - Feb-01-2021

Thank you very much for your feed back

(Jan-31-2021, 11:29 AM)j.crater Wrote: Hello,

the code looks good to me.
It is common with this kind of games to have a while loop and let player replay if he wants, instead of rerunning the program. But that is up to you.
There are ways to shorten the part of code that checks for the winner. But in case of a simple game like RPS, the way you wrote it works fine and is readable.

Done that:

import sys
from random import randint

def startgame():
	print(
	''' What do you want to play:
		[0] Rock
		[1] Paper
		[2] Scissors

		[9] Quit
	''')


def inputValidation(userInput):

	while userInput not in [0, 1, 2, 9]:
		print('Incorrect input, please insert a value between 0 and 2')
		userInput = int(input(prompt)) 
	return userInput 

	

def result(ValidatedInput, computerMove):
	moves = {0:'Rock', 1:'Paper', 2:'Scissors'}

	print(f'You played: {moves[ValidatedInput]}\nComputer played: {moves[computerMove]}')
	
	w = 'You Win!'
	l = 'You Lose!'
	
	if ValidatedInput == computerMove:
		print("It's a draw")
	elif ValidatedInput == 0 and computerMove == 1:
		print(l)
	elif ValidatedInput == 0 and computerMove == 2:
		print(w) 	
	elif ValidatedInput == 1 and computerMove == 0:
		print(w)
	elif ValidatedInput == 1 and computerMove == 2:
		print(l)
	elif ValidatedInput == 2 and computerMove == 0:
		print(l)
	elif ValidatedInput == 2 and computerMove == 1:
		print(w)



prompt = '> '

c = True
while c:

	computerMove = randint(0, 2)

	startgame()

	userInput = int(input(prompt))

	if userInput == 9:
		sys.exit()

	ValidatedInput = inputValidation(userInput)

	result(ValidatedInput, computerMove)

	continue_input = input('Play again [y/n]? ').upper()

	while continue_input not in 'YyNn':
		print('Incorrect input, please type y or n')
		continue_input = input((prompt))
			
	if continue_input == 'N':
		c = False