Skip to main content

Posts

Showing posts with the label python

Oh Happy Day!

 I wrote my first recursive function today! I've read about recursion and wanted to attempt it for the longest time. I kept letting fear get in the way. Working on problems with my team has definitely helped me learn more, faster. It has also helped with my confidence. I finally attempted a simple problem using recursion on LeetCode. I was meant to reverse a string.  First, I had to figure out how a recursive function worked exactly. When a function calls itself, it stops the execution of the rest of the code in the function until it reaches the "end" of the chain of function calls. The base case is what determines when the recursive function stops. Without a base case, it would keep calling itself forever like images reflecting off parallel mirrors facing each other. In my function, the base case is when the end of the list is reached, index >= len(s).  Once the base case is reached, it returns to the previous recursive function call on line 5 and line 6-12 are execut...

Creating a linked list

 I'm working my way through the mini courses on LeetCode to understand data structures and algorithms better. I am currently on linked lists. After a few slides, I was tasked with creating a linked list. I had no idea what to do and was stuck on this problem for days. I would look at it for a bit, not know what to do, and try to work on something else, and not be able to focus on that something else because I didn't know what to do about the linked list. Meh! It was a long 3-4 days. I finally figured it out and I have to say I feel very pleased with myseld :D  Step 1: Define a node class and a linked list class.  Each node has a value and a pointer to the next node. There is just a single pointer here because I chose to create a singly linked list. You can also have a pointer in the reverse direction point at the previous node. That would be a doubly linked list. I also had to define my actual linked list which held the value for the head node.  Step 2: Create a get ...

Python Decorators from the Best Site Ever

 This is a topic that I keep encountering but have struggled to fully grasp. To be fair I haven't looked too deeply into it. And now I am doing so. Python-course has a great article  on the topic. They really go step by step. I've summarised what was in the article and re-written it in a way I understand it better. A few notes about Python functions: Function names are references to functions and you can assign multiple names to the same function          e.g.  def func(x):                         return x                    func2 = func                    ==>> Calling either func2(4) or func(4) would give the same output as they are just references to the same function   Functions can be nested inside functions. I have done this a handful of times. Functions ...

Inserting data from CSV into Postgres table with Python

I've been looking into how to insert data from a CSV file into a Postgres Table with code. Turns out it's pretty simple and straightforward. I personally prefer doing it in code than with a command, but I'm not sure what is more common in the industry.  So now I should be able to load data from a CSV file into a Postgres table to create a REST API. The next step is trying to figure out how to convert that data into JSON format. 🤔

Figuring out Postgres Part 2(Adding data)

 My database is set up. My table is set up. Now it's time to add some data. There are 2 main ways we can do it - add data from an external file, or add data with Python.  Adding data from an external file A colleague of mine introduced me to a website - Kaggle . You can download datasets in a few different formats from this site which is pretty amazing! I found one for cat breed characteristics. I don't put much stock in breeds and that sort of thing, but I thought it would be a nice data set to use. The table I created previously wasn't exactly a good match for this data so I created a new table. One that was specifically for domestic cats and not all cats, big and small.  In SQL Shell(psql) Using the copy command in the screenshot below, I copied data from the csv file to my domestic_cats table. Printing a simple query in my Python file revealed that the data was actually copied. It was pretty exciting to see it all there.  Data printed to the terminal Input data w...

Figuring out Postgres Part 1(Setting it up)

 I've been meaning how to use Postgres for a while now and I've finally decided to dive into it. First step, installing Postgres from their website . I kept all the default settings which meant it installed PostgreSQL Server, pgAdmin4, Stack Builder, and Command Line Tools. It later prompted me to set up Stack Builder, but I took a look at this tutorial  and determined that I don't really need to do that right now. It also helped me figure out how to verify the installation using SQL Shell(psql). Everything looks good so far. I followed another tutorial on Linkedin learning to create a database. Next on the tutorial, create a virtual environment and install Psycopg2-binary in it. Apparently it's a Postgres database adapter.  And because I'm an idiot, I forgot where I saved the database. I opened up Postgres shell and used the command SHOW data_directory; But it turns out I didn't need it anyway 😁 I created a new Python file and added the following lines of cod...

Python database migrations

 I've gotten extremely comfortable with the commands "manage.py makemigrations" and "manage.py migrate" but today I learnt a new database related command. manage.py migrate [insert app name] zero 😮😮😮😮😮 This simple command is the Ctrl-Z for migrations. It drops the tables for the app. All this while, whenever I have trouble with any of the tables I delete the entire database when I could have been deleting that table alone. oops 😁

Duplicate Zeros

Challenge: Given a fixed length array arr of integers, duplicate each occurrence of zero, shifting the remaining elements to the right. Note that elements beyond the length of the original array are not written. Do the above modifications to the input array in place, do not return anything from your function. This is one of those times that I have truly amazed myself. I overthought this problem so much and ended up with a solution that had such a long runtime. Lesson learnt! This is me overcomplicating my life An insanely simple solution by someone with more braincells than me

Sorting squares

Challenge : Given an array of integers A sorted in non-decreasing order, return an array of the squares of each number, also in sorted non-decreasing order. I was killing myself yesterday using enumerate. And today I was using all sorts of conditional statements and I finally ended up with this. Kind of feels like I cheated because I'm just using a built in method. class Solution:     def sortedSquares(self, A: List[int]) -> List[int]:         lenA = range(len(A))         for i in lenA:             A[i] = pow(A[i],2)         A.sort()         return A It's kind of difficult to be proud because I had so much difficulty trying to work through a bug in my code. There were a few conditions I did not consider that kept breaking my code. It was frustrating. Can't say I'm entirely pleased that I used the sort method. I'll feel better when I can actually write code to s...

More list challenges from LeetCode

Challenge: Given an array nums of integers, return how many of them contain an even number of digits. This was pretty straightforward. Again, I did it in Python. Perhaps it's time I started working on these in C#. It would be a good way of trying to relearn C# and have a deeper understanding of the language. class Solution:     def findNumbers(self, nums: List[int]) -> int:         count = 0         for num in nums:             if len(str(num))%2 ==0:                 count +=1         return count

Algorithms: Max Consecutive Ones

Challenge from LeetCode: count the maximum number of consecutive 1s in a list of 1s and 0s. I got it done pretty quickly, or so I thought. I had not accounted for what would happen upon the last iteration through the for loop. Reworked it and this is what I got:  def checkMax(maxConsec, count):         if count > maxConsec:             return count, 0         else:             return maxConsec, 0          class Solution:         def findMaxConsecutiveOnes(self, nums: List[int]) -> int:         maxConsec = 0         count = 0                 for index, num in enumerate(nums):             if num == 1:                   count += 1             ...

Quick and easy packages list

 I created a new project and knew at some point I would have to look into how requirements.txt files are created. I'm still in the early stages of the project though, so I didn't really look into it. As luck would have it, I accidentally came across it while looking up something else. It's so easy! All I have to do is run a command while my virtual environment is active. pip freeze > requirements.txt Running the command pip freeze alone would list out all the third party packages that have been installed along with their version numbers. Using the command above puts it all into a file named requirements.txt. Technically I could name the file anything I want but it appears to be convention to name it thus. This way, anyone who clones your project can easily install the packages and run the project. Reference: https://towardsdatascience.com/virtual-environments-104c62d48c54  

Checking the right boxes

 A student created a modelform but was struggling with one of the fields. He wanted it to render as checkboxes that would allow the user to select multiple choices. I was surprised that it was actually a little challenging to find any article online that showed one how exactly to do this. Perhaps I wasn't using the right key words in my search? I did figure it out fairly quickly in the end.  models.py class Cats(models.Model):     fav_toys = models.CharField(max_length=100) forms.py TOYS = [     ('Rubberband', 'Rubberband'),     ('Ball', 'Ball'),     ('Feather', 'Feather'), ] class CatForm(ModelForm):     class Meta:         model = Cats         fields = '__all__'         widgets = {             'fav_toys': forms.CheckboxSelectMultiple(choices=TOYS),  } And that did the trick! It's interesting that when the choices were defined in mod...

Deviants in a normal world

It's definitely been a bit since I've seen this graphy. Anyone who has learnt about standard deviation knows this graph. Standard Deviation Standard deviation shows us how spread out all the values in a set are from the mean. The higher the standard deviation, the more spread out the values are over a wider range and the flatter this curve. In a normal distribution, most values are within 1 standard deviation from the mean(the green part of the graph). Apparently NumPy can calculate standard deviation too! import numpy numSet = [ *lots of numbers* ] numSetStdDev = numpy.std(numSet) Variance The variance also indicates how spread out the values in a set are. It measures the average degree to which each value differs from the mean. variance = standard deviation ^2 import numpy numSet = [ *lots of numbers * ] numSetVar = numpy.var(numSet) Source:  https://www.w3schools.com/python/python_ml_standard_deviation.asp

The 3 Ms

It's been quite a while since I last had to calculate the mean, median or mode of any set of numbers. But here I am, giving myself a refresher on statistical calculations. I'm learning some basics with the help of W3 schools. They always break concepts down so well :)  Calculating Mean We can do this the hard way, which sucks and I'm lazy and is ridiculous when we're looking at incredible large sets of numbers anyway. So instead, we're going to do it the easy way using the NumPy module in Python. import numpy numSet = [ *lots of numbers *] numSetMean = numpy.mean(numSet) Calculating Median This is even more annoying to calculate manually. You have to sort all the values from smallest to largest and search for the value in the middle. No one has time for that. Numpy can do this too. import numpy numSet = [ *lots of numbers* ] numSetMedian = numpy.median(numSet) Mode This is just as troublesome to calculate as the median. You're trying to get the value that appear...

Using Modals to render forms

A student wanted to create several tables with foreign keys linking them. He was placing the forms all over the place and that just didn't seem to make sense to me. I suggested that he link all the forms to one main registration page, and while he worked on it, I came up with my own solution that I feel rather proud of. Though I'm well aware it is a very simple solution.  views.py def register (request): # form for team formteam = TeamForm(request.POST or None ) if formteam.is_valid(): formteam.save() return redirect( 'registerForTeam' ) else : print (formteam.errors) formteam = TeamForm() # form for coach formcoaches = CoachesForm(request.POST or None ) if formcoaches.is_valid(): formcoaches.save() return redirect( 'registerForTeam' ) else : print (formcoaches.errors) formcoaches = CoachesForm() # form for player formplayer = PlayersForm(request.POST or None ...

Passing the parcel(data)

When I first learned how to use Django, passing variables was a constant source of confusion. With some practice, I got a better handle on the basics. You pass variables from the view to the template via context. And you pass variables from the template to the view via : the URL POST(when submitting forms, for instance)  and query parameters.  That's all I needed at that point in time anyway. I've just discovered there are more ways of passing them. One in particular caught my eye, passing it via sessions.  It's so easy to use. Once you've set it in your view, you can access it anywhere in your project. I imagine this is not something you would want to do with sensitive information though? I might be wrong of course. But it's definitely interesting to learn a new way to pass around variables.