If you're an intermediate programmer, I'd recommend working on projects that involve a lot of code, rather than problems that require only a few functions or files to solve. These are some projects you can try. I think they're simple, but can get more complex depending on how many features you have.
1) Write a web server that uses sockets, parses HTTP, and returns files from the filesystem. You can add more features like caching, gzipping, following rules for certain HTTP headers.
2) Maybe a program to simulate a Bank. You can create classes representing users and accounts. Users can create accounts, deposit, and withdraw money. And you can have some locking to make some there no concurrency issues. And you can create a command line interface or web interface. Maybe add loans with interest or savings accounts.
3) a database where you can create, read, update, and delete data. You can learn design skills about what data structure to use to store you data. And you'll also need commands to interact with data. Maybe you can find a SQL parsing library or write you own.
A good thing about projects (as opposed to small problems) is that you get to learn skills like design, maintainability, readability, scalability. Later on you might move on to another language like Java or C#, but those skills can stay the same.