I don’t know if it’s the true place to ask, apologizing if not. I started to python one and half week ago. So I’m still beginner.
I made a terminal based weather application with python. What do you think about the code, is it good enough? I mean is it professional enough and how can I make the same functions with more less code?
Here’s the main file (I also added it as url to post): https://raw.githubusercontent.com/TheCitizenOne/openweather/refs/heads/main/openweather.py
Here’s the config.json
file: https://raw.githubusercontent.com/TheCitizenOne/openweather/refs/heads/main/config.json
You appear to be afraid of spaces. Everything is cramped together.
Just bc you don’t have to put a space after colons or after equals and commas and whatnot doesn’t mean you shouldn’t
Don’t be afraid of spaces.
They make it easier for you to read your code when you come back later
Oops, sorry. I will revise the code and place spaces. Thanks for suggestion <3
Usually, you would use a formatter anyway - it’s good to know the standard way but for day to day coding I just have a shortcut bound that runs
ruff format
(you can even have it done automatically on file save).I need to search formatters. Thank you for suggestion.
Not the original commenter, but no need to apologise my friend. Nice work. Learning tip from me: give PEP 8 a read and save it for reference somewhere. It’s the standard for how to format Python code, and future you will thank you for internalising it early on in your Python journey
Thank you I will read it.
I revised the code. Added some spaces and comments for better readability. Hope it’s better now.
I started to python one and half week ago. So I’m still beginner.
Nice work! Here are a few notes:
The
WeatherApp
object has a mix of attributes with long-term (egself.LOCATIONS
) and short-term (egself.city
) relevance. Instance attributes introduced in places other than__init__
, which makes it non-trivial for a reader to quickly understand what the object contains. And, actually,self.{city,lat,lon}
are all only used from theadd_city
method so they could/should be local variables instead of instance attributes (just remove theself.
from them).There seem to maybe be some bugs around when things are lowercase and when not; for example checking
if self.city.lower() in self.LOCATIONS
but then when writing there the non-lowerself.ctiy
is used as the key toself.LOCATIONS
.The code under
if rep == "1"
andelif rep == "2"
is mostly duplicated, and there is noelse
branch to cover ifrep
is something other than 1 or 2.It looks like the config only persists favorites so far (and not non-favorite cities which the user can add) which isn’t obvious from the user interface.
Passing both
location
andlocations
intoWeatherAPI
so that it can look uplocations[location]
is unnecessary; it would be clearer to pass in the dict for the specific location. It would also be possible to avoid the need forLOWLOCATIONS
by adding a non-lowercasename
key to the per-location dictionaries that just havelat
andlon
right now, and then keepingLOCATIONS
keyed by the lowercase names.HTH! happy hacking :)
That’s very informative, I will rewrite the code with your suggestions. Thank you!
I am pretty new myself, but if you didn’t know, here are some great free resources to help you.
These are looking awesome. Thank you for sharing this <3
No problem at all! I hope it helps :)
Too lazy to check the logic but if possible, consider using enums.
Yes I need to use enums. I realized it now.