مشاركة حلول: عمل مستودع للمنشورات Post Store

مرحباً جميعاً

المهمة المطلوبة

بإمكانك الإطلاع على المهمة المطلوبة من هنا

كيفية كتابة الأكواد في المنتدى

3 Likes
class Post:
    def __init__(self, id, photo_url, name, body):
        self.id = id
        self.photo_url = photo_url
        self.name = name
        self.body = body

posts = []

class PostStore:

    def get_all(self):
        # get all posts
        return posts

    def add(self, post):
        # append post
        posts.append(post)
        return posts


    def get_by_id(self, id):
        # search for post by id - id البحث عن منشور بالمعرف
        result = None
        for post in posts:
            if post.id == id:
                result = post
                break
        return result

3 Likes

عمل رائع يا اسماء… لا ملاحظات, انتقلي للتالي :+1:

1 Like
class Post:
    def __init__(self, id, photo_url, name, body):
        self.id = id
        self.photo_url = photo_url
        self.name = name
        self.body = body

posts = []

class PostStore:
    def get_all(self): 
        for post in posts:
            return post

    def add(self, post):
        self.post = post
        posts.append(post)
        return posts

    def get_by_id(self, id):
        result = None
        self.id = id 
        for post in posts:
            if post[0] == id:
                result = post
                break
        return result
2 Likes

استلذ اعمل لنا درس عن كبفية تجربة هذا الجزء من فضلك

2 Likes

بالتأكيد !

تستعملي PyCharm أو VSCode ؟

1 Like

لدي مشكلة في دالة get_by_id انها لا ترجع الناتج الصحيح

class Post:
    def __init__(self, id, photo_url, name, body):
        self.id = id
        self.photo_url = photo_url
        self.name = name
        self.body = body

posts = []

class PostStore:
    def get_all(self):
        # get all posts - الحصول على كل المنشورات
        return posts

    def add(self, post):
        # append post - إضافة منشور
        posts.append(post)
        return posts

    def get_by_id(self, id):
        # search for post by id - id البحث عن منشور بالمعرف
        result = None
        for post in posts:
            if post.id == id:
                result = post
            break

        return result

وعند تشغيل ملف store_tests.py يظهر هذا الخطأ AssertionError
واعتقد السبب داله get_by_id ايضا

1 Like

نعم المشكلة في دالة get_by_id

قمت بتجربة الأكواد والمشكلة بسيطة وصغيرة جداً، لاحظ هذا الجزء:

        for post in posts:
            if post.id == id:
                result = post
            break

أنت تقوم بعمل break في بداية الحلقة، أي أنها غير مرتبطة بالشرط… الصحيح هو:

        for post in posts:
            if post.id == id:
                result = post
                break

لاحظ الفرق بين الاثنين الأكواد

1 Like
lass post:
    def __init__(self, id, name, photo, body):
        self.id = id
        self.name = name
        self.photo = photo
        self.body = body


posts = []

class poststore:
    def get_by_id(self, id):
        result = None
        for post in posts:
          if post.id == id:
            result = post
            break
    
        return result
    def add(self, post):
        self.post = post
        posts.append(post)
        return posts

    def get_all(self):
        return posts

كل شيء مضبوط يا على :+1:

بالنسبة لأسماء الكلاسات، فحسب pep8 الذي كتبه مؤلفي لغة بايثون، يفنرض أن تكون بهذا الشكل:

Post
PostStore

كل كلمة تبدأ بالحرف كبير… للإطلاع على pep8 (فيها إجماع convention على أمور مختلفة في اللغة).

https://www.python.org/dev/peps/pep-0008/#class-names

1 Like
class Post:
    def __init__(self, id, photo_url, name, body):
        self.id = id
        self.photo_url = photo_url
        self.name = name
        self.body = body

posts = []

class PostStore:
    def get_all(self):
        # get all posts - الحصول على كل المنشورات
        return posts

    def add(self, post):
        # append post - إضافة منشور
        posts.append(post)
        return posts

    def get_by_id(self, id):
        # search for post by id - id البحث عن منشور بالمعرف
        result = None

        for post in posts:
            if self.id == id:
                result = post
                break

        return result

ملا حظة: لماذا نستخدم break من البداية أنا أرى مستخدمي مجتمع كورتابز يستعملونها لأنني أول مرة أتعلم فيها بايثون :sweat_smile: :sweat_smile: :sweat_smile:

1 Like

تقوم break بإيقاف الحلقة لأننا أوجدنا المنشور المطلوب (الذي يطابق الـ id خاصته القيمة).

بالنسبة للشرط:

if self.id == id:

فهو غير صحيح، لأنه يقوم بمقارنة الـ id مع الـ object نفسه (self) وليس مع العناصر التي داخل القائمة

1 Like

شكرا على معللومة جديدة
بارك الله فيك :kissing_heart: :kissing_heart: :kissing_heart:

1 Like
class Post:
    def __init__(self, id, photo_url, name, body):
        self.id = id
        self.photo_url = photo_url
        self.name = name
        self.body = body

posts = []


class PostStore:
    def get_all(self):
        # get all posts - الحصول على كل المنشورات
        return posts


    def add(self, post):
        # append post - إضافة منشور
        posts.append(post)
        return posts

    def get_by_id(self, id):
        result = None
        for post in posts:
            if post.id==id:
                result=post
                break
        return result

1 Like
class Post:
   
    def __init__(self, id, photo_url, name, body):
   
        self.id = id
        self.photo_url = photo_url
        self.name = name
        self.body = body
        
posts = []

class PostStore:
    
    def get_all(self):
        # get all posts - الحصول على كل المنشورات
        for post in posts :
            return post
            
    def add(self, post):
        # append post - إضافة منشور
        posts.append(post)
        return posts
        
    def get_by_id(self, id):
        # search for post by id - id البحث عن منشور بالمعرف
        result = None
        for post in posts :
            if post.id == id :
                result = post
                break
        return result
2 Likes

عمل جميل يا ArijTrabelsi

2 Likes

thank you a lot :rose:

1 Like

أعرف إنني لم ألتزم بـ (إرجاع واحد للدالة)، لكن أرى الكود بهذا الشكل readable أكثر
كمان، إذا غيرت الـ index في ملف stroe_test.py ، بحيث أجلب بوست بمعرف 3 ويزيد، يطلع معي error، كيف اتخلص من هذه المشكلة؟

class Post:
    def __init__(self, id, photo_url, name, body):
        self.id = id
        self.photo_url = photo_url
        self.name = name
        self.body = body

class PostStore:
    def get_all(self):
        return posts

    def add(self, post):
        posts.append(post)

    def get_by_id(self, id):
        for post in posts:
            if post.id == id:
                return post
        return None

    def update(self, id, fields):
       pass

    def delete(self, id):
        pass

posts = []

......
1 Like

الأكواد تبدو جيدة يا ابرار :+1:

ماهي التغييرات التي قمتي بها بالضبط على ملف store_test؟

1 Like
 retrieved_second_post = post_store.get_by_id(3)

كان تساؤلي في حالة ما إذا طلبت “ثالث” بوست وهو مش موجود"ثالث بوست أو أكبر منه"
ليش الـ None العائدة من دالة get_by_id ما حافظت لي على صحة الكود، لكن فهمت الآن إنه الـ assert في السطر التالي هي السبب في الخطأ الحاصل، ايش فائدتها هنا، ليش استخدمت للمقارنة؟

1 Like