summaryrefslogtreecommitdiff
path: root/comp/skeleton
diff options
context:
space:
mode:
Diffstat (limited to 'comp/skeleton')
-rw-r--r--comp/skeleton/__pycache__/code.cpython-313.pycbin0 -> 9836 bytes
-rw-r--r--comp/skeleton/skel.py (renamed from comp/skeleton/code.py)23
2 files changed, 17 insertions, 6 deletions
diff --git a/comp/skeleton/__pycache__/code.cpython-313.pyc b/comp/skeleton/__pycache__/code.cpython-313.pyc
new file mode 100644
index 0000000..9adf17d
--- /dev/null
+++ b/comp/skeleton/__pycache__/code.cpython-313.pyc
Binary files differ
diff --git a/comp/skeleton/code.py b/comp/skeleton/skel.py
index 495913f..762a96f 100644
--- a/comp/skeleton/code.py
+++ b/comp/skeleton/skel.py
@@ -34,7 +34,9 @@ def PlayGame(Targets, NumbersAllowed, TrainingGame, MaxTarget, MaxNumber):
GameOver = False
while not GameOver:
DisplayState(Targets, NumbersAllowed, Score)
- UserInput = input("Enter an expression: ")
+ UserInput = input("Enter an expression: ").replace(' ', '')
+ if (UserInput == "QUIT"):
+ break
print()
if CheckIfUserInputValid(UserInput):
UserInputInRPN = ConvertToRPN(UserInput)
@@ -43,7 +45,11 @@ def PlayGame(Targets, NumbersAllowed, TrainingGame, MaxTarget, MaxNumber):
if IsTarget:
NumbersAllowed = RemoveNumbersUsed(UserInput, MaxNumber, NumbersAllowed)
NumbersAllowed = FillNumbers(NumbersAllowed, TrainingGame, MaxNumber)
+ else:
+ print("user input invalid!")
Score -= 1
+ if Score < 0:
+ GameOver = True
if Targets[0] != -1:
GameOver = True
else:
@@ -55,9 +61,9 @@ def CheckIfUserInputEvaluationIsATarget(Targets, UserInputInRPN, Score):
UserInputEvaluation = EvaluateRPN(UserInputInRPN)
UserInputEvaluationIsATarget = False
if UserInputEvaluation != -1:
+ Score += 2
for Count in range(0, len(Targets)):
if Targets[Count] == UserInputEvaluation:
- Score += 2
Targets[Count] = -1
UserInputEvaluationIsATarget = True
return UserInputEvaluationIsATarget, Score
@@ -90,6 +96,9 @@ def CheckNumbersUsedAreAllInNumbersAllowed(NumbersAllowed, UserInputInRPN, MaxNu
Temp.remove(int(Item))
else:
return False
+ else:
+ if Item.isdigit() == True:
+ return False
return True
def CheckValidNumber(Item, MaxNumber):
@@ -129,7 +138,7 @@ def DisplayTargets(Targets):
def ConvertToRPN(UserInput):
Position = 0
- Precedence = {"+": 2, "-": 2, "*": 4, "/": 4}
+ Precedence = {"+": 2, "-": 2, "*": 4, "/": 4, "^": 6}
Operators = []
Operand, Position = GetNumberFromUserInput(UserInput, Position)
UserInputInRPN = []
@@ -156,7 +165,7 @@ def ConvertToRPN(UserInput):
def EvaluateRPN(UserInputInRPN):
S = []
while len(UserInputInRPN) > 0:
- while UserInputInRPN[0] not in ["+", "-", "*", "/"]:
+ while UserInputInRPN[0] not in ["+", "-", "*", "/", "^"]:
S.append(UserInputInRPN[0])
UserInputInRPN.pop(0)
Num2 = float(S[-1])
@@ -172,6 +181,8 @@ def EvaluateRPN(UserInputInRPN):
Result = Num1 * Num2
elif UserInputInRPN[0] == "/":
Result = Num1 / Num2
+ elif UserInputInRPN[0] == "^":
+ Result = Num1 ** Num2
UserInputInRPN.pop(0)
S.append(str(Result))
if float(S[0]) - math.floor(float(S[0])) == 0.0:
@@ -182,7 +193,7 @@ def EvaluateRPN(UserInputInRPN):
def GetNumberFromUserInput(UserInput, Position):
Number = ""
MoreDigits = True
- while MoreDigits:
+ while MoreDigits:
if not(re.search("[0-9]", str(UserInput[Position])) is None):
Number += UserInput[Position]
else:
@@ -196,7 +207,7 @@ def GetNumberFromUserInput(UserInput, Position):
return int(Number), Position
def CheckIfUserInputValid(UserInput):
- if re.search("^([0-9]+[\\+\\-\\*\\/])+[0-9]+$", UserInput) is not None:
+ if re.search("^([0-9]+[\\+\\-\\*\\/\\^])+[0-9]+$", UserInput) is not None:
return True
else:
return False