Debug mode can help you. In function perform_operation send true values "a" and "b", but your problem in string:
return operations[operation](ctypes.c_double(a), ctypes.c_double(b))