So, first of all, a filter in signal processing is analogous to a filter that you'd use on liquids. A coffee filter passes through the stuff you want (liquid coffee), and holds back the stuff you don't want (coffee grounds). It does this because the coffee grounds are bigger than water molecules, and all those yummy flavor molecules (not to mention caffeine molecules).
Similarly, some industrial operation might be making a slurry that's contaminated with particulates like gravel or whatever. Then you'd use a filter with larger holes to hold back the particulates, while letting through whatever size particles are in the slurry.
One of the early discovery in the study of viruses was that if you ran water through a ceramic filter (basically unglazed clay jugs), then the weird unknown infectious agent that they couldn't see with the microscopes of the time wouldn't pass through the filter -- so they deduced that it was smaller than they could see, but still larger than water molecules.
The point of all these physical analogies is that you have to design the filter to match the noise, and in the case of signal processing, you often have to choose a filter that degrades your "signal" somewhat, while (hopefully) eliminating the noise more.
In general, the categories you've chosen are all difficult ones. Depending on what you're really doing, it may be quite profitable to start with some sound-mixing app (like Audacity) and just experiment with the available filters and see what sounds best -- then translate that into filters in your Python code. For an undergrad project, that may be more than enough.
Here are some thoughts I have on each one of the noise types you're suggesting:
Rain noise:
This is going to sound a lot like white noise. There's not much you can do here but to identify the spectrum of the sound you want to let through, and filter out everything else. I.e., if you've got someone talking in a rainstorm, and the recording is high-fidelity, with frequencies from 50Hz to 15kHz being passed through, you might try passing just 300-3000Hz. That should make the speech more intelligible, but it'll sound like they're talking on a telephone.
If they're singing in the rain, then you'd probably need some sort of an artificial intelligence whiz-bang filter that identifies what their voice is at any moment and filters out the rest. It'll be (A) imperfect, and (B) difficult (the stuff of a PhD thesis, basically, so you want to search one out and use it, not make your own).
traffic noise
Similar answer to rain noise, although depending on the character of the traffic you could maybe identify individual features (tires on pavement swooshing by) and filter them out dynamically.
fan noise
This is definitely going to be white noise, much like traffic noise.
construction noise
In overall character, this is going to be more like traffic noise, except that there'll be more bangs and impulsive noises. A filter that's good with white noise plus a "pop" filter may help here.