0% found this document useful (0 votes)
52 views4 pages

PDF of Code

This document contains a Python skeleton program for the AQA A Level Paper 1 Summer 2025 examination. It includes functions for a number game where users can either play a training game or a random game, involving input validation, scoring, and target updates. The program utilizes Reverse Polish Notation (RPN) for evaluating user inputs and managing game states.

Uploaded by

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

PDF of Code

This document contains a Python skeleton program for the AQA A Level Paper 1 Summer 2025 examination. It includes functions for a number game where users can either play a training game or a random game, involving input validation, scoring, and target updates. The program utilizes Reverse Polish Notation (RPN) for evaluating user inputs and managing game states.

Uploaded by

teenaajith918
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

1 #Skeleton Program code for the AQA A Level Paper 1 Summer 2025 examination

2 #this code should be used in conjunction with the Preliminary Material


3 #written by the AQA Programmer Team
4 #developed in the Python 3.9 programming environment
5
6 import re
7 import random
8 import math
9
10 def Main():
11 NumbersAllowed = []
12 Targets = []
13 MaxNumberOfTargets = 20
14 MaxTarget = 0
15 MaxNumber = 0
16 TrainingGame = False
17 Choice = input("Enter y to play the training game, anything else to play a random
game: ").lower()
18 print()
19 if Choice == "y":
20 MaxNumber = 1000
21 MaxTarget = 1000
22 TrainingGame = True
23 Targets = [-1, -1, -1, -1, -1, 23, 9, 140, 82, 121, 34, 45, 68, 75, 34, 23,
119, 43, 23, 119]
24 else:
25 MaxNumber = 10
26 MaxTarget = 50
27 Targets = CreateTargets(MaxNumberOfTargets, MaxTarget)
28 NumbersAllowed = FillNumbers(NumbersAllowed, TrainingGame, MaxNumber)
29 PlayGame(Targets, NumbersAllowed, TrainingGame, MaxTarget, MaxNumber)
30 input()
31
32 def PlayGame(Targets, NumbersAllowed, TrainingGame, MaxTarget, MaxNumber):
33 Score = 0
34 GameOver = False
35 while not GameOver:
36 DisplayState(Targets, NumbersAllowed, Score)
37 UserInput = input("Enter an expression: ")
38 print()
39 if CheckIfUserInputValid(UserInput):
40 UserInputInRPN = ConvertToRPN(UserInput)
41 if CheckNumbersUsedAreAllInNumbersAllowed(NumbersAllowed, UserInputInRPN,
MaxNumber):
42 IsTarget, Score = CheckIfUserInputEvaluationIsATarget(Targets,
UserInputInRPN, Score)
43 if IsTarget:
44 NumbersAllowed = RemoveNumbersUsed(UserInput, MaxNumber,
NumbersAllowed)
45 NumbersAllowed = FillNumbers(NumbersAllowed, TrainingGame,
MaxNumber)
46 Score -= 1
47 if Targets[0] != -1:
48 GameOver = True
49 else:
50 Targets = UpdateTargets(Targets, TrainingGame, MaxTarget)
51 print("Game over!")
52 DisplayScore(Score)
53
54 def CheckIfUserInputEvaluationIsATarget(Targets, UserInputInRPN, Score):
55 UserInputEvaluation = EvaluateRPN(UserInputInRPN)
56 UserInputEvaluationIsATarget = False
57 if UserInputEvaluation != -1:
58 for Count in range(0, len(Targets)):
59 if Targets[Count] == UserInputEvaluation:
60 Score += 2
61 Targets[Count] = -1
62 UserInputEvaluationIsATarget = True
63 return UserInputEvaluationIsATarget, Score
64
65 def RemoveNumbersUsed(UserInput, MaxNumber, NumbersAllowed):
66 UserInputInRPN = ConvertToRPN(UserInput)
67 for Item in UserInputInRPN:
68 if CheckValidNumber(Item, MaxNumber):
69 if int(Item) in NumbersAllowed:
70 NumbersAllowed.remove(int(Item))
71 return NumbersAllowed
72
73 def UpdateTargets(Targets, TrainingGame, MaxTarget):
74 for Count in range (0, len(Targets) - 1):
75 Targets[Count] = Targets[Count + 1]
76 Targets.pop()
77 if TrainingGame:
78 Targets.append(Targets[-1])
79 else:
80 Targets.append(GetTarget(MaxTarget))
81 return Targets
82
83 def CheckNumbersUsedAreAllInNumbersAllowed(NumbersAllowed, UserInputInRPN, MaxNumber):
84 Temp = []
85 for Item in NumbersAllowed:
86 Temp.append(Item)
87 for Item in UserInputInRPN:
88 if CheckValidNumber(Item, MaxNumber):
89 if int(Item) in Temp:
90 Temp.remove(int(Item))
91 else:
92 return False
93 return True
94
95 def CheckValidNumber(Item, MaxNumber):
96 if re.search("^[0-9]+$", Item) is not None:
97 ItemAsInteger = int(Item)
98 if ItemAsInteger > 0 and ItemAsInteger <= MaxNumber:
99 return True
100 return False
101
102 def DisplayState(Targets, NumbersAllowed, Score):
103 DisplayTargets(Targets)
104 DisplayNumbersAllowed(NumbersAllowed)
105 DisplayScore(Score)
106
107 def DisplayScore(Score):
108 print("Current score: " + str(Score))
109 print()
110 print()
111
112 def DisplayNumbersAllowed(NumbersAllowed):
113 print("Numbers available: ", end = '')
114 for N in NumbersAllowed:
115 print(str(N) + " ", end = '')
116 print()
117 print()
118
119 def DisplayTargets(Targets):
120 print("|", end = '')
121 for T in Targets:
122 if T == -1:
123 print(" ", end = '')
124 else:
125 print(T, end = '')
126 print("|", end = '')
127 print()
128 print()
129
130 def ConvertToRPN(UserInput):
131 Position = 0
132 Precedence = {"+": 2, "-": 2, "*": 4, "/": 4}
133 Operators = []
134 Operand, Position = GetNumberFromUserInput(UserInput, Position)
135 UserInputInRPN = []
136 UserInputInRPN.append(str(Operand))
137 Operators.append(UserInput[Position - 1])
138 while Position < len(UserInput):
139 Operand, Position = GetNumberFromUserInput(UserInput, Position)
140 UserInputInRPN.append(str(Operand))
141 if Position < len(UserInput):
142 CurrentOperator = UserInput[Position - 1]
143 while len(Operators) > 0 and Precedence[Operators[-1]] > Precedence[
CurrentOperator]:
144 UserInputInRPN.append(Operators[-1])
145 Operators.pop()
146 if len(Operators) > 0 and Precedence[Operators[-1]] == Precedence[
CurrentOperator]:
147 UserInputInRPN.append(Operators[-1])
148 Operators.pop()
149 Operators.append(CurrentOperator)
150 else:
151 while len(Operators) > 0:
152 UserInputInRPN.append(Operators[-1])
153 Operators.pop()
154 return UserInputInRPN
155
156 def EvaluateRPN(UserInputInRPN):
157 S = []
158 while len(UserInputInRPN) > 0:
159 while UserInputInRPN[0] not in ["+", "-", "*", "/"]:
160 S.append(UserInputInRPN[0])
161 UserInputInRPN.pop(0)
162 Num2 = float(S[-1])
163 S.pop()
164 Num1 = float(S[-1])
165 S.pop()
166 Result = 0.0
167 if UserInputInRPN[0] == "+":
168 Result = Num1 + Num2
169 elif UserInputInRPN[0] == "-":
170 Result = Num1 - Num2
171 elif UserInputInRPN[0] == "*":
172 Result = Num1 * Num2
173 elif UserInputInRPN[0] == "/":
174 Result = Num1 / Num2
175 UserInputInRPN.pop(0)
176 S.append(str(Result))
177 if float(S[0]) - math.floor(float(S[0])) == 0.0:
178 return math.floor(float(S[0]))
179 else:
180 return -1
181
182 def GetNumberFromUserInput(UserInput, Position):
183 Number = ""
184 MoreDigits = True
185 while MoreDigits:
186 if not(re.search("[0-9]", str(UserInput[Position])) is None):
187 Number += UserInput[Position]
188 else:
189 MoreDigits = False
190 Position += 1
191 if Position == len(UserInput):
192 MoreDigits = False
193 if Number == "":
194 return -1, Position
195 else:
196 return int(Number), Position
197
198 def CheckIfUserInputValid(UserInput):
199 if re.search("^([0-9]+[\\+\\-\\*\\/])+[0-9]+$", UserInput) is not None:
200 return True
201 else:
202 return False
203
204 def GetTarget(MaxTarget):
205 return random.randint(1, MaxTarget)
206
207 def GetNumber(MaxNumber):
208 return random.randint(1, MaxNumber)
209
210 def CreateTargets(SizeOfTargets, MaxTarget):
211 Targets = []
212 for Count in range(1, 6):
213 Targets.append(-1)
214 for Count in range(1, SizeOfTargets - 4):
215 Targets.append(GetTarget(MaxTarget))
216 return Targets
217
218 def FillNumbers(NumbersAllowed, TrainingGame, MaxNumber):
219 if TrainingGame:
220 return [2, 3, 2, 8, 512]
221 else:
222 while len(NumbersAllowed) < 5:
223 NumbersAllowed.append(GetNumber(MaxNumber))
224 return NumbersAllowed
225
226 if __name__ == "__main__":
227 Main()
228

You might also like