Practice Midterm 2 Solutions


1. Copycat Karel

def check_above():
	turn_right() # Move Karel to right ending position
	if front_is_clear():
		move()
		turn_right()

def return_to_start():
	turn_around()
	while front_is_clear():
		move()

def move_five():
	for i in range(5):
		move()

def copy_avenue():
	move() # Skip avenue 1
	for i in range(4):
		if beepers_present():
			move_five()
			put_beeper()
			turn_around()
			move_five()
			turn_around()

		move()

def main():
	while not_facing_north():
		copy_avenue()
		return_to_start()
		check_above()

if __name__ == "__main__":
	run_karel_program()

2. Khansole Reversed

def main():
	while True:
		eq = input("Enter an equation to solve: ")
		if eq == "":
			break

		elems = eq.split()

		num1 = int(elems[0])
		num2 = int(elems[2])

		if elems[1] == "+":
			print(f"The answer is {num1 + num2}")

		elif elems[1] == "-":
			print(f"The answer is {num1 - num2}")

		else:
			print("That is an invalid equation")

		print() # Cosmetic

if __name__ == "__main__":
	main()

3. Bug Busting

a. Remove digits, revisited

Output: The updated string is CS106A

Bug: The return value from remove_digits is not stored anywhere. We need to reset my_str to be the result of the call to remove_digits.

Fix: 10 my_str = remove_digits(my_str)

b. Exponentiation

Output: 9

Bug: The order of arguments / parameters is flipped. The expected order of parameters is exponent, base but the calling function passes in 3 as the base and 2 as the exponent.

Fix: Either:

1 def perform_exponentiation(base, exponent):

or

7 perform_exponentiation(num2, num1)

4. Graduate Courses

def digits_only(course):
	digits = ""
	for ch in course:
		if ch.isdigit():
			digits += ch
	return digits


def is_graduate_course(course):
	digits = digits_only(course)

	if len(digits) < 3:
		return False

	if int(digits[0]) < 2: # Could also check int(digits) >= 200
		return False

	return True

5. Sum To Value

def sum_to_value(sequences, desired_value):
	for sequence in sequences: 
		cur_sum = 0
		for num in sequence:
			cur_sum += num

		if cur_sum != desired_value:
			sequence.append(desired_value - cur_sum)

	return sequences