Question 1:

# First, I made a new list full of animals
animals = ['lion', 'tiger', 'elephant', 'giraffe', 'zebra', 'kangaroo', 'penguin', 'crocodile', 'parrot', 'gazelle']

def animalCheck():
# Got the number of animals in the list
count = len(animals)
print(f"Right now there are {count} animals.")
print("This is the list:")
print(animals)

animalCheck()

#Removed the last animal from the list
animals.remove(animals[-1])
animalCheck()

#Used list comprehension to filter out animals with names longer than 5 characters
animals = [animal for animal in animals if len(animal) <= 5]
animalCheck()

print("My favorite animals are the ones with 'g' in their names:")
for animal in animals:
if 'g' in animal:
print(animal)

Question 2:

import math

Define a function to calculate the worst-case number of iterations for a binary search.
def worst_case_binary_search_iterations(array_length):
# Calculate the base-2 logarithm of the array length and round down (floor).
log_base_2 = int(math.log2(array_length) // 1)
# Add 1 to account for the ceiling operation to ensure worst-case iterations.
return log_base_2 + 1

Define the length of the array for which you want to determine the worst-case iterations.
array_length = 20

Call the function to calculate and print the worst-case number of iterations.
worst_case_iterations = worst_case_binary_search_iterations(array_length)
print(f"Worst-case number of iterations for an array of length {array_length}: {worst_case_iterations}")

Question 3:

The final content after executing the algorithm would be:
C) [10, 40, 30, 20, 50]

The algorithm iterates through the list and multiplies each element by 2, so the list becomes [20, 40, 60, 80, 100]. The, the algorithm swaps the elements at 1 and 3, resulting in the final list, [10, 40, 30, 20, 50].