def do_arithmetic(x, y, op = 'add'):
if op in ['add', '+']:
...
elif op in ...
..
else:
print('Unknown operation')
Uwagi do Twojego kodu:
1) op == 'add'
To jest wyrażenie typu boolean (czy bool, nie pamiętam, jak to się w Pythonie nazywa), więc nie zrobi niczego. Tzn. będzie to albo True, albo False, ale nigdzie nic z tą wartością w Twoim kodzie się nie dzieje.
Domyślne wartości parametrów w Pythonie zapisujemy tak, jak podałem w przykładowym kodzie.
2) if op == 'add' or '+'
Domyślam się, że chodzi o: if (op == 'add') or (op == '+')
Bo tak, jak zapisałaś, to znaczy: jeśli (op jest równe 'add'), albo '+' - a ponieważ ten '+' nie jest pustym napisem, to będzie prawdziwy. Więc ta część z "albo" zawsze będzie prawdziwa - dlatego działają w kodzie wszystkie warunki, choć powinien tylko jeden.
3) To pass na samym końcu jest zbędne - niczego nie wnosi. Można to usunąć.
pass dajemy tam, gdzie MUSI być jakaś instrukcja (bo tak wynika ze składni Pythona), a nie chcemy niczego robić.
4) return None też nie trzeba pisać. Python domyślnie zwraca z funkcji None, jeśli nie zwrócimy czegoś innego.