0% found this document useful (0 votes)
91 views10 pages

Solutions

The document contains code snippets for a game that involves mathematical expressions and targets. It includes functions for playing the game, converting user input to Reverse Polish Notation (RPN), validating user input, and handling game mechanics such as scoring and resetting. The game allows users to input expressions and aims to reach specified targets using allowed numbers.

Uploaded by

abdellwahab2006
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
91 views10 pages

Solutions

The document contains code snippets for a game that involves mathematical expressions and targets. It includes functions for playing the game, converting user input to Reverse Polish Notation (RPN), validating user input, and handling game mechanics such as scoring and resetting. The game allows users to input expressions and aims to reach specified targets using allowed numbers.

Uploaded by

abdellwahab2006
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

All Solutions

Q9 Possible 1:..............................................................................................1
Q9 Possible 2:..............................................................................................2
Q10 Possible 1.............................................................................................2
Q10 Possible 2:............................................................................................4
Q11 Possible 1:............................................................................................4
Q11 Possible 2:............................................................................................5
Q12 Possible 1:............................................................................................7
Q12 Possible 2:............................................................................................9

Q9 Possible 1:
Code:

def PlayGame(Targets, NumbersAllowed, TrainingGame, MaxTarget,


MaxNumber):
Score = 0
GameOver = False

while not GameOver:


DisplayState(Targets, NumbersAllowed, Score)

# Keep prompting the user until a valid expression is entered


UserInput = ""
while [Link]() == "":
UserInput = input("Enter an expression: ").strip()
if UserInput == "":
print("Try again. Please enter an expression")

print()

if CheckIfUserInputValid(UserInput):
UserInputInRPN = ConvertToRPN(UserInput)
if CheckNumbersUsedAreAllInNumbersAllowed(NumbersAllowed,
UserInputInRPN, MaxNumber):
IsTarget, Score = CheckIfUserInputEvaluationIsATarget(Targets,
UserInputInRPN, Score)
if IsTarget:
NumbersAllowed = RemoveNumbersUsed(UserInput,
MaxNumber, NumbersAllowed)
NumbersAllowed = FillNumbers(NumbersAllowed,
TrainingGame, MaxNumber)
Score -= 1
if Targets[0] != -1:
GameOver = True
else:
Targets = UpdateTargets(Targets, TrainingGame, MaxTarget)
else:
print("Invalid expression. Please try again.")

print("Game over!")
DisplayScore(Score)

Q9 Possible 2:
def Main():
NumbersAllowed = []
Targets = []
MaxNumberOfTargets = 20
MaxTarget = 0
MaxNumber = 0
TrainingGame = False

# Prompt the user for a valid choice


Choice = ""
while Choice not in ["T", "R"]:
Choice = input("Enter T for the training game or R for the random
game: ").upper()
if Choice not in ["T", "R"]:
print("Try again. Please enter T or R")
print()

# Set up the game based on the user's choice


if Choice == "T":
MaxNumber = 1000
MaxTarget = 1000
TrainingGame = True
Targets = [-1, -1, -1, -1, -1, 23, 9, 140, 82, 121, 34, 45, 68, 75, 34,
23, 119, 43, 23, 119]
else: # Choice == "R"
MaxNumber = 10
MaxTarget = 50
Targets = CreateTargets(MaxNumberOfTargets, MaxTarget)

NumbersAllowed = FillNumbers(NumbersAllowed, TrainingGame,


MaxNumber)
PlayGame(Targets, NumbersAllowed, TrainingGame, MaxTarget,
MaxNumber)
input()

Q10 Possible 1:
def ConvertToRPN(UserInput):
Position = 0
multiplication/division
Precedence = {"+": 2, "-": 2, "*": 4, "/": 4, "^": 5}
Operators = []
Operand, Position = GetNumberFromUserInput(UserInput, Position)
UserInputInRPN = []
[Link](str(Operand))

[Link](UserInput[Position - 1])

while Position < len(UserInput):


Operand, Position = GetNumberFromUserInput(UserInput, Position)
[Link](str(Operand))

if Position < len(UserInput):


CurrentOperator = UserInput[Position - 1]
while len(Operators) > 0 and Precedence[Operators[-1]] >
Precedence[CurrentOperator]:
[Link](Operators[-1])
[Link]()
if len(Operators) > 0 and Precedence[Operators[-1]] ==
Precedence[CurrentOperator]:
[Link](Operators[-1])
[Link]()
[Link](CurrentOperator)

while len(Operators) > 0:


[Link](Operators[-1])
[Link]()

return UserInputInRPN

def EvaluateRPN(UserInputInRPN):
S = []

while len(UserInputInRPN) > 0:


while UserInputInRPN[0] not in ["+", "-", "*", "/", "^"]:
[Link](UserInputInRPN[0])
[Link](0)
Num2 = float(S[-1])
[Link]()
Num1 = float(S[-1])
[Link]()

Result = 0.0

if UserInputInRPN[0] == "+":
Result = Num1 + Num2
elif UserInputInRPN[0] == "-":
Result = Num1 - Num2
elif UserInputInRPN[0] == "*":
Result = Num1 * Num2
elif UserInputInRPN[0] == "/":
Result = Num1 / Num2
elif UserInputInRPN[0] == "^":
Result = Num1 ** Num2

[Link](0)
[Link](str(Result))

if float(S[0]) - [Link](float(S[0])) == 0.0:


return [Link](float(S[0]))
else:
return -1

Q10 Possible 2:
def CheckIfUserInputValid(UserInput):
# Remove all whitespace from the input
UserInput = [Link](" ", "")

if [Link]("^([0-9]+[\\+\\-\\*\\/])+[0-9]+$", UserInput) is not None:


return True
else:
return False
(I think jay would want us to use a for loop, but this works fine and is a
oneliner)

Q11 Possible 1:
def PlayGame(Targets, NumbersAllowed, TrainingGame, MaxTarget,
MaxNumber):
Score = 0
GameOver = False
ResetUsed = False

while not GameOver:


DisplayState(Targets, NumbersAllowed, Score)

if not ResetUsed:
UserInput = input("Enter an expression or enter R to reset:
").strip().upper()
else:
UserInput = input("Enter an expression: ").strip()

print()

# Handle reset logic


if not ResetUsed and UserInput == "R":
# Generate a new set of random numbers
NumbersAllowed = FillNumbers([], TrainingGame, MaxNumber)
Score -= 5 # Deduct 5 points for resetting
ResetUsed = True # set it to be used
print("Numbers have been reset. Your score has been reduced by
5 points.")
continue # skip to next part

# Validate user input and process game logic


if CheckIfUserInputValid(UserInput):
UserInputInRPN = ConvertToRPN(UserInput)
if CheckNumbersUsedAreAllInNumbersAllowed(NumbersAllowed,
UserInputInRPN, MaxNumber):
IsTarget, Score = CheckIfUserInputEvaluationIsATarget(Targets,
UserInputInRPN, Score)
if IsTarget:
NumbersAllowed = RemoveNumbersUsed(UserInput,
MaxNumber, NumbersAllowed)
NumbersAllowed = FillNumbers(NumbersAllowed,
TrainingGame, MaxNumber)
Score -= 1
if Targets[0] != -1:
GameOver = True
else:
Targets = UpdateTargets(Targets, TrainingGame, MaxTarget)
else:
print("Invalid expression. Please try again.")

print("Game over!")
DisplayScore(Score)
Q11 Possible 2:
def CheckIfAllNumbersUsed(NumbersAllowed, UserInputInRPN):
# Create a copy of NumbersAllowed to track usage
TempNumbers = NumbersAllowed[:]

# Check each item in the RPN expression


for Item in UserInputInRPN:
if [Link]() and int(Item) in TempNumbers:
[Link](int(Item))

# If TempNumbers is empty, all numbers were used


return len(TempNumbers) == 0

def PlayGame(Targets, NumbersAllowed, TrainingGame, MaxTarget,


MaxNumber):
Score = 0
GameOver = False

while not GameOver:


DisplayState(Targets, NumbersAllowed, Score)

UserInput = input("Enter an expression: ").strip()


print()

if CheckIfUserInputValid(UserInput):
UserInputInRPN = ConvertToRPN(UserInput)
if CheckNumbersUsedAreAllInNumbersAllowed(NumbersAllowed,
UserInputInRPN, MaxNumber):
IsTarget, Score = CheckIfUserInputEvaluationIsATarget(Targets,
UserInputInRPN, Score)

# Check if all numbers were used and award bonus points


if CheckIfAllNumbersUsed(NumbersAllowed, UserInputInRPN):
print("Bonus! You used all available numbers!")
Score += 10

if IsTarget:
NumbersAllowed = RemoveNumbersUsed(UserInput,
MaxNumber, NumbersAllowed)
NumbersAllowed = FillNumbers(NumbersAllowed,
TrainingGame, MaxNumber)
Score -= 1

if Targets[0] != -1:
GameOver = True
else:
Targets = UpdateTargets(Targets, TrainingGame, MaxTarget)
else:
print("Invalid use of numbers. Please try again.")
else:
print("Invalid expression. Please try again.")

print("Game over!")
DisplayScore(Score)
#

Q12 Possible 1:
def PlayGame(Targets, NumbersAllowed, TrainingGame, MaxTarget,
MaxNumber):
Score = 0
GameOver = False
ClearTargetUsed = False # Track if "Clear Target" has been used

while not GameOver:


DisplayState(Targets, NumbersAllowed, Score)

# Update prompt based on whether "Clear Target" is available


if not ClearTargetUsed:
UserInput = input("Enter an expression or enter C to clear two
specified targets: ").strip().upper()
else:
UserInput = input("Enter an expression: ").strip()

print()

# Handle Clear Target logic


if not ClearTargetUsed and UserInput == "C":
print("You have chosen to clear two targets.")

# Allow user to specify two valid targets


for i in range(2):
while True:
try:
TargetToRemove = int(input(f"Enter target {i + 1} to
remove: "))
if TargetToRemove in Targets:
Targets[[Link](TargetToRemove)] = -1 #
Remove target by setting it to -1
break
else:
print("Invalid target. Please choose a target from the
list.")
except ValueError:
print("Invalid input. Please enter a valid number.")

# Deduct points and mark "Clear Target" as used


Score -= 5
ClearTargetUsed = True
print("Two targets have been cleared. Your score has been
reduced by 5 points.")
continue # Skip to next turn after clearing targets

# Validate user input and process game logic


if CheckIfUserInputValid(UserInput):
UserInputInRPN = ConvertToRPN(UserInput)
if CheckNumbersUsedAreAllInNumbersAllowed(NumbersAllowed,
UserInputInRPN, MaxNumber):
IsTarget, Score = CheckIfUserInputEvaluationIsATarget(Targets,
UserInputInRPN, Score)
if IsTarget:
NumbersAllowed = RemoveNumbersUsed(UserInput,
MaxNumber, NumbersAllowed)
NumbersAllowed = FillNumbers(NumbersAllowed,
TrainingGame, MaxNumber)
Score -= 1
if Targets[0] != -1:
GameOver = True
else:
Targets = UpdateTargets(Targets, TrainingGame, MaxTarget)
else:
print("Invalid use of numbers. Please try again.")
else:
print("Invalid expression. Please try again.")

print("Game over!")
DisplayScore(Score)

Q12 Possible 2:
def ConvertBracketedExpressionToRPN(UserInput):
# Check for a single pair of brackets
OpenBracketIndex = [Link]("(")
CloseBracketIndex = [Link](")")

if OpenBracketIndex == -1 or CloseBracketIndex == -1 or
OpenBracketIndex > CloseBracketIndex:
raise ValueError("Invalid bracket placement in expression.")
# Extract parts of the expression
BeforeBrackets = UserInput[:OpenBracketIndex]
InsideBrackets = UserInput[OpenBracketIndex + 1:CloseBracketIndex]
AfterBrackets = UserInput[CloseBracketIndex + 1:]

# Convert each part to RPN


RPNBefore = ConvertToRPN(BeforeBrackets) if BeforeBrackets else []
RPNInside = ConvertToRPN(InsideBrackets)
RPNAfter = ConvertToRPN(AfterBrackets) if AfterBrackets else []

# Combine all parts into a single RPN expression


return RPNBefore + RPNInside + RPNAfter

def PlayGame(Targets, NumbersAllowed, TrainingGame, MaxTarget,


MaxNumber):
Score = 0
GameOver = False

while not GameOver:


DisplayState(Targets, NumbersAllowed, Score)

UserInput = input("Enter an expression: ").strip()


print()

try:
# Check for brackets in the input
if "(" in UserInput or ")" in UserInput:
# Ensure no nested brackets
if [Link]("(") > 1 or [Link](")") > 1:
print("Nested brackets are not allowed. Please try again.")
continue

# Convert bracketed expression to RPN


UserInputInRPN =
ConvertBracketedExpressionToRPN(UserInput)
else:
# Process non-bracketed expressions as usual
if not CheckIfUserInputValid(UserInput):
print("Invalid expression. Please try again.")
continue

UserInputInRPN = ConvertToRPN(UserInput)

# Validate numbers used in the expression


if CheckNumbersUsedAreAllInNumbersAllowed(NumbersAllowed,
UserInputInRPN, MaxNumber):
IsTarget, Score = CheckIfUserInputEvaluationIsATarget(Targets,
UserInputInRPN, Score)
if IsTarget:
NumbersAllowed = RemoveNumbersUsed(UserInput,
MaxNumber, NumbersAllowed)
NumbersAllowed = FillNumbers(NumbersAllowed,
TrainingGame, MaxNumber)
Score -= 1

if Targets[0] != -1:
GameOver = True
else:
Targets = UpdateTargets(Targets, TrainingGame, MaxTarget)
else:
print("Invalid use of numbers. Please try again.")
except ValueError as e:
print(str(e))
except Exception as e:
print("An error occurred:", str(e))

print("Game over!")
DisplayScore(Score)

You might also like