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