DEV Community

Dave
Dave

Posted on • Edited on

49 3

Python Debugging Exercises

[The following is a series of debugging exercises that you may encounter in the real world of development. They are based on problems I have been asked. I thought it would be fun to share them.]

It is your first week at your new job as a software developer. You have your environment set up and you're seated beside a fellow junior who started a few days before you.

He turns to you and asks if you have a minute.

"Hey if you don't mind, please help me find out what's wrong..."

Problem 1

Context

To change display name of Model Instances, we will use def __str__() function in a model. The str function in a django model returns a string that is exactly rendered as the display name of instances for that model.

For example, if we adjust a model in models.py like so

from django.db import models
from django.db.models import Model

class SomeModel(Model):
    name = models.CharField(max_length = 100)

    def __str__(self):
         return f"{self.name}"
Enter fullscreen mode Exit fullscreen mode

When we access SomeModel.objects.all(), the output should be a list of the name fields of this object.

Problem

It doesn't work for comments. When a Comment object is printed, it shows [Comment object (1)] rather than what is defined under str.

Let's check the code:

# imports here

class Listing(models.Model):
  max_bid = models.DecimalField(...)
  ...

  def __str__(self):
    return ...

class Bid(models.Model):
  ...

class User(AbstractUser):
  ...

class Comment(models.Model):
  comment = models.TextField()
  listing = models.ForeignKey(Listing, on_delete=models.CASCADE)
  user = models.ForeignKey(User, on_delete=models.CASCADE)

  def _str__(self):
    return f'{self.id}: {self.comment}' 
Enter fullscreen mode Exit fullscreen mode

Where did your fellow teammate go wrong?

Problem 2

Context

Your coworker was secretly interviewing with other companies and was told to find the min value in a list without using min.

Problem

The below code doesn't seem to find the minimum element in the list. Why?

def minimum(some_list):
    a = 0
    for x in range(1, len(some_list)):
        if some_list[x] < a:
            a = some_list[x]
    return a
Enter fullscreen mode Exit fullscreen mode

Where did your fellow teammate go wrong?

AWS GenAI LIVE image

Real challenges. Real solutions. Real talk.

From technical discussions to philosophical debates, AWS and AWS Partners examine the impact and evolution of gen AI.

Learn more

Top comments (5)

Collapse
 
praise002 profile image
Praise Idowu

He used a single underscore instead of a double underscore. But I guess most code editors will indicate it is an error.
So it should be:
def str(self):
return f'{self.id}: {self.comment}'

Collapse
 
praise002 profile image
Praise Idowu

It should be
a = some_list[0]
for x in range(len(some_list)):
pass

Collapse
 
jamesst77534538 profile image
Joe_Loves_Kids

Should be <=.

Collapse
 
kingorie profile image
Kingorie

Your teammate should change line 2 of the code from "a = 0" to "a = some_list[ 0 ]

Collapse
 
kyant profile image
Ky-AnT

You also need to change the range from "range(1, len(some_list))" to "range(len(some_list))"

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay