[Aug-2026] PCEP-30-02 Exam Dumps Pass with Updated 2026 PCEP - Certified Entry-Level Python Programmer
Free PCEP-30-02 Exam Dumps to Pass Exam Easily
Python Institute PCEP-30-02 Exam Syllabus Topics:
| Topic | Details |
|---|---|
| Topic 1 |
|
| Topic 2 |
|
| Topic 3 |
|
| Topic 4 |
|
NEW QUESTION # 19
What happens when the user runs the following code?
- A. The program outputs three asterisks ( *** )to the screen.
- B. The program outputs five asterisks ( ***** ) to the screen.
- C. The program enters an infinite loop.
- D. The program outputs one asterisk ( * ) to the screen.
Answer: C
Explanation:
Explanation
The code snippet that you have sent is a while loop with an if statement and a print statement inside it. The code is as follows:
while True: if counter < 0: print("") else: print("**")
The code starts with entering a while loop that repeats indefinitely, because the condition "True" is always true. Inside the loop, the code checks if the value of "counter" is less than 0. If yes, it prints a single asterisk () to the screen. If no, it prints three asterisks (**) to the screen. However, the code does not change the value of
"counter" inside the loop, so the same condition is checked over and over again. The loop never ends, and the code enters an infinite loop.
The program outputs either one asterisk () or three asterisks (**) to the screen repeatedly, depending on the initial value of "counter". Therefore, the correct answer is D. The program enters an infinite loop.
NEW QUESTION # 20
What is the expected result of the following code?
- A. The code will cause an unhandled
- B. 0
- C. 1
- D. 2
Answer: A
Explanation:
The code snippet that you have sent is trying to use a list comprehension to create a new list from an existing list. The code is as follows:
my_list = [1, 2, 3, 4, 5] new_list = [x for x in my_list if x > 5]
The code starts with creating a list called "my_list" that contains the numbers 1, 2, 3, 4, and 5. Then, it tries to create a new list called "new_list" by using a list comprehension. A list comprehension is a concise way of creating a new list from an existing list by applying some expression or condition to each element. The syntax of a list comprehension is:
new_list = [expression for element in old_list if condition]
The expression is the value that will be added to the new list, which can be the same as the element or a modified version of it. The element is the variable that takes each value from the old list. The condition is an optional filter that determines which elements will be included in the new list. For example, the following list comprehension creates a new list that contains the squares of the even numbers from the old list:
old_list = [1, 2, 3, 4, 5, 6] new_list = [x ** 2 for x in old_list if x % 2 == 0] new_list = [4, 16, 36] The code that you have sent is trying to create a new list that contains the elements from the old list that are greater than 5. However, there is a problem with this code. The problem is that none of the elements in the old list are greater than 5, so the condition is always false. This means that the new list will be empty, and the expression will never be evaluated. However, the expression is not valid, because it uses the variable x without defining it. This will cause a NameError exception, which is an error that occurs when a variable name is not found in the current scope. The code does not handle the exception, and therefore it will terminate with an error message.
The expected result of the code is an unhandled exception, because the code tries to use an undefined variable in an expression that is never executed. Therefore, the correct answer is D. The code will cause an unhandled exception.
Reference: Python - List Comprehension - W3SchoolsPython - List Comprehension - GeeksforGeeksPython Exceptions: An Introduction - Real Python
NEW QUESTION # 21
What is the expected output of the following code?
- A. The code outputs nothing.
- B. 0
- C. 1
- D. 2
Answer: C
Explanation:
Explanation
The code snippet that you have sent is checking if two numbers are equal and printing the result. The code is as follows:
num1 = 1 num2 = 2 if num1 == num2: print(4) else: print(1)
The code starts with assigning the values 1 and 2 to the variables "num1" and "num2" respectively. Then, it enters an if statement that compares the values of "num1" and "num2" using the equality operator (==). If the values are equal, the code prints 4 to the screen. If the values are not equal, the code prints 1 to the screen.
The expected output of the code is 1, because the values of "num1" and "num2" are not equal. Therefore, the correct answer is C. 1.
NEW QUESTION # 22
What is the expected output of the following code?
- A. 0
- B. ('Ampere*. '2021', 'False')
- C. 1
- D. The code raises an unhandled exception.
Answer: A
NEW QUESTION # 23
A program written in a high-level programming language is called:
- A. a source code
- B. the ASCI I code
- C. machine code
- D. a binary code
Answer: A
NEW QUESTION # 24
Insert the code boxes in the correct positions in order to build a line of code which asks the user for an Integer value and assigns it to the depth variable.
(Note: some code boxes will not be used.)
Answer:
Explanation:

NEW QUESTION # 25
Assuming that the phonc_dir dictionary contains namemumber pairs, arrange the code boxes to create a valid line of code which retrieves Martin Eden's phone number, and assigns it to the number variable.
Answer:
Explanation:
Explanation:
number = phone_dir["Martin Eden"]
This code uses the square brackets notation to access the value associated with the key "Martin Eden" in the phone_dir dictionary. The value is then assigned to the variable number. A dictionary is a data structure that stores key-value pairs, where each key is unique and can be used to retrieve its corresponding value. You can find more information about dictionaries in Python in the following references:
* [Python Dictionaries - W3Schools]
* [Python Dictionary (With Examples) - Programiz]
* [5.5. Dictionaries - How to Think Like a Computer Scientist ...]
NEW QUESTION # 26
What is true about tuples? (Select two answers.)
- A. Tuples are immutable, which means that their contents cannot be changed during their lifetime.
- B. Tuples can be indexed and sliced like lists.
- C. The len { } function cannot be applied to tuples.
- D. An empty tuple is written as { } .
Answer: A,B
Explanation:
Tuples are one of the built-in data types in Python that are used to store collections of data. Tuples have some characteristics that distinguish them from other data types, such as lists, sets, and dictionaries. Some of these characteristics are:
* Tuples are immutable, which means that their contents cannot be changed during their lifetime. Once a tuple is created, it cannot be modified, added, or removed. This makes tuples more stable and reliable than mutable data types. However, this also means that tuples are less flexible and dynamic than mutable data types. For example, if you want to change an element in a tuple, you have to create a new tuple with the modified element and assign it to the same variable12
* Tuples are ordered, which means that the items in a tuple have a defined order and can be accessed by using their index. The index of a tuple starts from 0 for the first item and goes up to the length of the tuple minus one for the last item. The index can also be negative, in which case it counts from the end of the tuple. For example, if you have a tuple t = ("a", "b", "c"), then t[0] returns "a", and t
[-1] returns "c"12
* Tuples can be indexed and sliced like lists, which means that you can get a single item or a sublist of a tuple by using square brackets and specifying the start and end index. For example, if you have a tuple t
= ("a", "b", "c", "d", "e"), then t[2] returns "c", and t[1:4] returns ("b", "c", "d"). Slicing does not raise any exception, even if the start or end index is out of range. It will just return an empty tuple or the closest possible sublist12
* Tuples can contain any data type, such as strings, numbers, booleans, lists, sets, dictionaries, or even other tuples. Tuples can also have duplicate values, which means that the same item can appear more than once in a tuple. For example, you can have a tuple t = (1, 2, 3, 1, 2), which contains two 1s and two
2s12
* Tuples are written with round brackets, which means that you have to enclose the items in a tuple with parentheses. For example, you can create a tuple t = ("a", "b", "c") by using round brackets. However, you can also create a tuple without using round brackets, by just separating the items with commas. For example, you can create the same tuple t = "a", "b", "c" by using commas. This is called tuple packing, and it allows you to assign multiple values to a single variable12
* The len() function can be applied to tuples, which means that you can get the number of items in a tuple by using the len() function. For example, if you have a tuple t = ("a", "b", "c"), then len(t) returns 312
* An empty tuple is written as (), which means that you have to use an empty pair of parentheses to create a tuple with no items. For example, you can create an empty tuple t = () by using empty parentheses.
However, if you want to create a tuple with only one item, you have to add a comma after the item, otherwise Python will not recognize it as a tuple. For example, you can create a tuple with one item t = ("a",) by using a comma12 Therefore, the correct answers are A. Tuples are immutable, which means that their contents cannot be changed during their lifetime. and D. Tuples can be indexed and sliced like lists.
Reference: Python Tuples - W3SchoolsTuples in Python - GeeksforGeeks
NEW QUESTION # 27
Drag and drop the conditional expressions to obtain a code which outputs * to the screen.
(Note: some code boxes will not be used.)
Answer:
Explanation:
Explanation:
One possible way to drag and drop the conditional expressions to obtain a code which outputs * to the screen is:
if pool > 0:
print("*")
elif pool < 0:
print("**")
else:
print("***")
This code uses the if, elif, and else keywords to create a conditional statement that checks the value of the variable pool. Depending on whether the value is greater than, less than, or equal to zero, the code will print a different pattern of asterisks to the screen. The print function is used to display the output. The code is indented to show the blocks of code that belong to each condition. The code will output * if the value of pool is positive, ** if the value of pool is negative, and *** if the value of pool is zero.
You can find more information about the conditional statements and the print function in Python in the following references:
* [Python If ... Else]
* [Python Print Function]
* [Python Basic Syntax]
NEW QUESTION # 28
What happens when the user runs the following code?
- A. The program outputs three asterisks ( *** )to the screen.
- B. The program outputs five asterisks ( ***** ) to the screen.
- C. The program enters an infinite loop.
- D. The program outputs one asterisk ( * ) to the screen.
Answer: C
Explanation:
The code snippet that you have sent is a while loop with an if statement and a print statement inside it. The code is as follows:
while True: if counter < 0: print("") else: print("**")
The code starts with entering a while loop that repeats indefinitely, because the condition "True" is always true. Inside the loop, the code checks if the value of "counter" is less than 0. If yes, it prints a single asterisk () to the screen. If no, it prints three asterisks (**) to the screen. However, the code does not change the value of
"counter" inside the loop, so the same condition is checked over and over again. The loop never ends, and the code enters an infinite loop.
The program outputs either one asterisk () or three asterisks (**) to the screen repeatedly, depending on the initial value of "counter". Therefore, the correct answer is D. The program enters an infinite loop.
Reference: [Python Institute - Entry-Level Python Programmer Certification]
NEW QUESTION # 29
What is the expected result of the following code?
- A. 0
- B. The code is erroneous and cannot be run.
- C. 1
- D. 2
Answer: B
Explanation:
The code snippet that you have sent is trying to use the global keyword to access and modify a global variable inside a function. The code is as follows:
speed = 10 def velocity(): global speed speed = speed + 10 return speed print(velocity()) The code starts with creating a global variable called "speed" and assigning it the value 10. A global variable is a variable that is defined outside any function and can be accessed by any part of the code. Then, the code defines a function called "velocity" that takes no parameters and returns the value of "speed" after adding 10 to it. Inside the function, the code uses the global keyword to declare that it wants to use the global variable
"speed", not a local one. A local variable is a variable that is defined inside a function and can only be accessed by that function. The global keyword allows the function to modify the global variable, not just read it. Then, the code adds 10 to the value of "speed" and returns it. Finally, the code calls the function "velocity" and prints the result.
However, the code has a problem. The problem is that the code uses the global keyword inside the function, but not outside. The global keyword is only needed when you want to modify a global variable inside a function, not when you want to create or access it outside a function. If you use the global keyword outside a function, you will get a SyntaxError exception, which is an error that occurs when the code does not follow the rules of the Python language. The code does not handle the exception, and therefore it will terminate with an error message.
The expected result of the code is an unhandled exception, because the code uses the global keyword incorrectly. Therefore, the correct answer is A. The code is erroneous and cannot be run.
Reference: Python Global Keyword - W3SchoolsPython Exceptions: An Introduction - Real Python The code is erroneous because it is trying to call the "velocity" function without passing any parameter, which will raise a TypeError exception. The "velocity" function requires one parameter "x", which is used to calculate the return value of "speed" multiplied by "x". If no parameter is passed, the function will not know what value to use for "x".
The code is also erroneous because it is trying to use the "new_speed" variable before it is defined. The
"new_speed" variable is assigned the value of 20 after the first function call, but it is used as a parameter for the second function call, which will raise a NameError exception. The variable should be defined before it is used in any expression or function call.
Therefore, the code will not run and will not produce any output.
The correct way to write the code would be:
# Define the speed variable
speed = 10
# Define the velocity function
def velocity(x):
return speed * x
# Define the new_speed variable
new_speed = 20
# Call the velocity function with new_speed as a parameter
print(velocity(new_speed))
Copy
This code will print 200, which is the result of 10 multiplied by 20.
References:
[Python Programmer Certification (PCPP) - Level 1]
[Python Programmer Certification (PCPP) - Level 2]
[Python Programmer Certification (PCPP) - Level 3]
[Python: Built-in Exceptions]
[Python: Defining Functions]
[Python: More on Variables and Printing]
NEW QUESTION # 30
What is the expected output of the following code?
- A. The code outputs nothing.
- B. 0
- C. 1
- D. 2
Answer: C
Explanation:
The code snippet that you have sent is checking if two numbers are equal and printing the result. The code is as follows:
num1 = 1 num2 = 2 if num1 == num2: print(4) else: print(1)
The code starts with assigning the values 1 and 2 to the variables "num1" and "num2" respectively. Then, it enters an if statement that compares the values of "num1" and "num2" using the equality operator (==). If the values are equal, the code prints 4 to the screen. If the values are not equal, the code prints 1 to the screen.
The expected output of the code is 1, because the values of "num1" and "num2" are not equal. Therefore, the correct answer is C. 1.
Reference: [Python Institute - Entry-Level Python Programmer Certification]
NEW QUESTION # 31
What is true about exceptions in Python? (Select two answers.)
- A. According to Python terminology, exceptions are raised
- B. Not more than one except branch can be executed inside one try-except block.
- C. Python's philosophy encourages developers to make all possible efforts to protect the program from the occurrence of an exception.
- D. According 10 Python terminology, exceptions are thrown
Answer: A,B
NEW QUESTION # 32
Arrange the code boxes in the correct positions to form a conditional instruction which guarantees that a certain statement is executed when the temperature variable is equal to 0. 0.
Answer:
Explanation:
if temperature == 0.0:
Explanation:
* if
* temperature
* ==
* 0.0
* :
Arrange the boxes in this order:
This checks if temperature is exactly 0.0, and if so, runs the code inside the if block.
NEW QUESTION # 33
Drag and drop the literals to match their data type names.
Answer:
Explanation:
Explanation
One possible way to drag and drop the literals to match their data type names is:
STRING: "All The King's Men"
BOOLEAN: False
INTEGER: 42
FLOAT: -6.62607015E-34
A literal is a value that is written exactly as it is meant to be interpreted by the Python interpreter. A data type is a category of values that share some common characteristics or operations. Python has four basic data types:
string, boolean, integer, and float.
A string is a sequence of characters enclosed by either single or double quotes. A string can represent text, symbols, or any other information that can be displayed as text. For example, "All The King's Men" is a string literal that represents the title of a novel.
A boolean is a logical value that can be either True or False. A boolean can represent the result of a comparison, a condition, or a logical operation. For example, False is a boolean literal that represents the opposite of True.
An integer is a whole number that can be positive, negative, or zero. An integer can represent a count, an index, or any other quantity that does not require fractions or decimals. For example, 42 is an integer literal that represents the answer to life, the universe, and everything.
A float is a number that can have a fractional part after the decimal point. A float can represent a measurement, a ratio, or any other quantity that requires precision or approximation. For example,
-6.62607015E-34 is a float literal that represents the Planck constant in scientific notation.
You can find more information about the literals and data types in Python in the following references:
[Python Data Types]
[Python Literals]
[Python Basic Syntax]
NEW QUESTION # 34
Insert the code boxes in the correct positions in order to build a line of code which asks the user for an Integer value and assigns it to the counter variable.
(Note: some code boxes will not be used.)
Answer:
Explanation:

NEW QUESTION # 35
What is the expected output of the following code?
- A. 0
- B. ('Fermi ', '2021', 'False')
- C. False
- D. The code raises an unhandled exception.
Answer: B
Explanation:
The code snippet that you have sent is defining and calling a function in Python. The code is as follows:
def runner(brand, model, year): return (brand, model, year)
print(runner("Fermi"))
The code starts with defining a function called "runner" with three parameters: "brand", "model", and "year".
The function returns a tuple with the values of the parameters. A tuple is a data type in Python that can store multiple values in an ordered and immutable way. A tuple is created by using parentheses and separating the values with commas. For example, (1, 2, 3) is a tuple with three values.
Then, the code calls the function "runner" with the value "Fermi" for the "brand" parameter and prints the result. However, the function expects three arguments, but only one is given. This will cause a TypeError exception, which is an error that occurs when a function or operation receives an argument that has the wrong type or number. The code does not handle the exception, and therefore it will terminate with an error message.
However, if the code had handled the exception, or if the function had used default values for the missing parameters, the expected output of the code would be ('Fermi ', '2021', 'False'). This is because the function returns a tuple with the values of the parameters, and the print function displays the tuple to the screen.
Therefore, the correct answer is D. ('Fermi ', '2021', 'False').
Reference: Python Functions - W3SchoolsPython Tuples - W3SchoolsPython Exceptions: An Introduction - Real Python
NEW QUESTION # 36
Arrange the code boxes in the correct positions to form a conditional instruction which guarantees that a certain statement is executed when the speed variable is less than 50.0.
Answer:
Explanation:
Explanation:
One possible way to arrange the code boxes in the correct positions to form a conditional instruction which guarantees that a certain statement is executed when the speed variable is less than 50.0 is:
if speed < 50.0:
print("The speed is low.")
This code uses the if keyword to create a conditional statement that checks the value of the variable speed. If the value is less than 50.0, then the code will print "The speed is low." to the screen. The print function is used to display the output. The code is indented to show the block of code that belongs to the if condition.
You can find more information about the if statement and the print function in Python in the following references:
* Python If ... Else
* Python Print Function
NEW QUESTION # 37
A set of rules which defines the ways in which words can be coupled in sentences is called:
- A. dictionary
- B. syntax
- C. semantics
- D. lexis
Answer: B
Explanation:
Explanation
Syntax is the branch of linguistics that studies the structure and rules of sentences in natural languages. Lexis is the vocabulary of a language. Semantics is the study of meaning in language. A dictionary is a collection of words and their definitions, synonyms, pronunciations, etc.
NEW QUESTION # 38
What is the expected output of the following code?
- A. * *
- B. The code produces no output.
- C. * * *
- D. *
Answer: A
Explanation:
Explanation
The code snippet that you have sent is a conditional statement that checks if a variable "counter" is less than 0, greater than or equal to 42, or neither. The code is as follows:
if counter < 0: print("") elif counter >= 42: print("") else: print("") The code starts with checking if the value of "counter" is less than 0. If yes, it prints a single asterisk () to the screen and exits the statement. If no, it checks if the value of "counter" is greater than or equal to 42. If yes, it prints three asterisks () to the screen and exits the statement. If no, it prints two asterisks () to the screen and exits the statement.
The expected output of the code depends on the value of "counter". If the value of "counter" is 10, as shown in the image, the code will print two asterisks (**) to the screen, because 10 is neither less than 0 nor greater than or equal to 42. Therefore, the correct answer is C. * *
NEW QUESTION # 39
How many hashes (+) does the code output to the screen?
- A. five
- B. three
- C. zero (the code outputs nothing)
- D. one
Answer: A
Explanation:
The code snippet that you have sent is a loop that checks if a variable "floor" is less than or equal to 0 and prints a string accordingly. The code is as follows:
floor = 5 while floor > 0: print("+") floor = floor - 1
The code starts with assigning the value 5 to the variable "floor". Then, it enters a while loop that repeats as long as the condition "floor > 0" is true. Inside the loop, the code prints a "+" symbol to the screen, and then subtracts 1 from the value of "floor". The loop ends when "floor" becomes 0 or negative, and the code exits.
The code outputs five "+" symbols to the screen, one for each iteration of the loop. Therefore, the correct answer is C. five.
Reference: [Python Institute - Entry-Level Python Programmer Certification]
NEW QUESTION # 40
Assuming that the following assignment has been successfully executed:
My_list - [1, 1, 2, 3]
Select the expressions which will not raise any exception.
(Select two expressions.)
- A. my_list[-10]
- B. my_list|my_Li1st | 3| I
- C. my list [6]
- D. my_List- [0:1]
Answer: B,D
Explanation:
Explanation
The code snippet that you have sent is assigning a list of four numbers to a variable called "my_list". The code is as follows:
my_list = [1, 1, 2, 3]
The code creates a list object that contains the elements 1, 1, 2, and 3, and assigns it to the variable "my_list".
The list can be accessed by using the variable name or by using the index of the elements. The index starts from 0 for the first element and goes up to the length of the list minus one for the last element. The index can also be negative, in which case it counts from the end of the list. For example, my_list[0] returns 1, and my_list[-1] returns 3.
The code also allows some operations on the list, such as slicing, concatenation, repetition, and membership.
Slicing is used to get a sublist of the original list by specifying the start and end index. For example, my_list[1:3] returns [1, 2]. Concatenation is used to join two lists together by using the + operator. For example, my_list + [4, 5] returns [1, 1, 2, 3, 4, 5]. Repetition is used to create a new list by repeating the original list a number of times by using the * operator. For example, my_list * 2 returns [1, 1, 2, 3, 1, 1, 2, 3].
Membership is used to check if an element is present in the list by using the in operator. For example, 2 in my_list returns True, and 4 in my_list returns False.
The expressions that you have given are trying to access or manipulate the list in different ways. Some of them are valid, and some of them are invalid and will raise an exception. An exception is an error that occurs when the code cannot be executed properly. The expressions are as follows:
A). my_list[-10]: This expression is trying to access the element at the index -10 of the list. However, the list only has four elements, so the index -10 is out of range. This will raise an IndexError exception and output nothing.
B). my_list|my_Li1st | 3| I: This expression is trying to perform a bitwise OR operation on the list and some other operands. The bitwise OR operation is used to compare the binary representation of two numbers and return a new number that has a 1 in each bit position where either number has a 1. For example, 3 | 1 returns 3, because 3 in binary is 11 and 1 in binary is 01, and 11 | 01 is 11. However, the bitwise OR operation cannot be applied to a list, because a list is not a number. This will raise a TypeError exception and output nothing.
C). my list [6]: This expression is trying to access the element at the index 6 of the list. However, the list only has four elements, so the index 6 is out of range. This will raise an IndexError exception and output nothing.
D). my_List- [0:1]: This expression is trying to perform a subtraction operation on the list and a sublist. The subtraction operation is used to subtract one number from another and return the difference. For example, 3 - 1 returns 2. However, the subtraction operation cannot be applied to a list, because a list is not a number. This will raise a TypeError exception and output nothing.
Only two expressions will not raise any exception. They are:
B). my_list|my_Li1st | 3| I: This expression is not a valid Python code, but it is not an expression that tries to access or manipulate the list. It is just a string of characters that has no meaning. Therefore, it will not raise any exception, but it will also not output anything.
D). my_List- [0:1]: This expression is a valid Python code that uses the slicing operation to get a sublist of the list. The slicing operation does not raise any exception, even if the start or end index is out of range. It will just return an empty list or the closest possible sublist. For example, my_list[0:10] returns [1, 1, 2, 3], and my_list[10:20] returns []. The expression my_List- [0:1] returns the sublist of the list from the index 0 to the index 1, excluding the end index. Therefore, it returns [1]. This expression will not raise any exception, and it will output [1].
Therefore, the correct answers are B. my_list|my_Li1st | 3| I and D. my_List- [0:1].
NEW QUESTION # 41
What is the expected output of the following code?
- A. 0
- B. The code raises an exception and outputs nothing.
- C. 1
- D. 2
Answer: B
Explanation:
The code snippet that you have sent is trying to print the combined length of two lists, "collection" and
"duplicate". The code is as follows:
collection = [] collection.append(1) collection.insert(0, 2) duplicate = collection duplicate.append(3) print(len (collection) + len(duplicate)) The code starts with creating an empty list called "collection" and appending the number 1 to it. The list now contains [1]. Then, the code inserts the number 2 at the beginning of the list. The list now contains [2, 1].
Then, the code creates a new list called "duplicate" and assigns it the value of "collection". However, this does not create a copy of the list, but rather a reference to the same list object. Therefore, any changes made to
"duplicate" will also affect "collection", and vice versa. Then, the code appends the number 3 to "duplicate".
The list now contains [2, 1, 3], and so does "collection". Finally, the code tries to print the sum of the lengths of "collection" and "duplicate". However, this causes an exception, because the len function expects a single argument, not two. The code does not handle the exception, and therefore outputs nothing.
The expected output of the code is nothing, because the code raises an exception and terminates. Therefore, the correct answer is D. The code raises an exception and outputs nothing.
Reference: [Python Institute - Entry-Level Python Programmer Certification]
NEW QUESTION # 42
......
PCEP-30-02 Exam Dumps, PCEP-30-02 Practice Test Questions: https://braindumps.exam4docs.com/PCEP-30-02-study-questions.html

