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

فائدة assert هي لاختبار الأكواد (كود يختبرصحة كود آخر :grin:)

يعني هي توقف تشغيل البرنامج لو حصلت مشكلة اثناء اختبار الكود

الاختبارات مبنية على أساس لدينا اثنين posts داخل store وهي تحقق أن الـ store يستطيع جلب ال post الذي لديه id = 2

في حالة أردتي تعديل الاختبارات أول شيء تحتاجي اضافته في القائمة:

dummy_posts = [
    Post(id=1,
         photo_url='https://images.pexels.com/photos/415829/pexels-photo-415829.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=50&w=50', 
         name='Sara', 
         body='Lorem Ipsum'),
    Post(id=2,
         photo_url='https://images.pexels.com/photos/736716/pexels-photo-736716.jpeg?auto=compress&cs=tinysrgb&dpr=1&h=100&w=100', 
         name='John', 
         body='Lorem Ipsum'),
    Post(id=3,
         photo_url='https://images.pexels.com/photos/736716/pexels-photo-736716.jpeg?auto=compress&cs=tinysrgb&dpr=1&h=100&w=100', 
         name='Abrar', 
         body='Lorem Ipsum'),

ثم في الدالة تكتبي:

def get_by_id_should_retrieve_same_object():
    second_post = dummy_posts[2]
    retrieved_second_post = post_store.get_by_id(3)

    assert second_post is retrieved_second_post

لاحظي أنني كتبت dummy_posts[2] والتي تعني اجلب من القائمة العنصر الثالث (العنصر الأول index = 0، الثاني 1، الثالث 2)

ثم في هذا السطر retrieved_second_post = post_store.get_by_id(3) يجلب العنصر الثالث

وفي الأخير يقارن أنهما متطابقين assert second_post is retrieved_second_post

هكذا يضمن أن الأكواد سليمة وتجلب من الـ store المنشورات

2 Likes

الحل عمل-مستودع-للمنشورات :
لا اعلم ؛ اعتقد اني لم احتاج الى جملة break ؛ حيث قمت مباشرة بعمل Return للبوست الصحيح !!
ما هو تعليقك ؟؟:wink:

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):
      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
        
1 Like

عمل رائع يا حسين كالعادة :ok_hand:

كلاهما سليم…

استعمال break لضمان أن الأكواد لا تعمل return في الوسط فتجعل قراءة الكود أسهل (خصوصا إذا صارت الدالة أكبر وأكبر يصبح ايجاد المشاكل في الكود أصعب)

وفي الآخر هي مجرد تفضيل شخصي

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 item in posts:
            print(item.id, item.name, item.body)
            print("_______________________________")

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

    def get_by_id(self, id):
        # search for post by 
        result = None
        for item in posts:
            if item.id == id:
                result = item
                break
        if result == None:
            print("Post not found!")
        else:
            print(result.id, result.name, result.body)
            print("_______________________________")

    def update(self, id, photo_url, name, body):
       # update post data 
       for i in range(len(posts)):
            if posts[i].id == id:
                posts[i].photo_url = photo_url
                posts[i].name = name
                posts[i].body = body
                break


    def delete(self, id):
        # delete post by id
        result = None
        for i in range(len(posts)):
            if posts[i].id == id:
                result = i
                break
        if result == None:
            print("Post not found!")
        else:
            posts.remove(posts[result])

store = PostStore()
p1 = Post(1, "fghj", "Hassan", "okkkkkkkay")
p2 = Post(2, "hdfsv", "Zekkouri", "hhhhhhhh ")
p3 = Post(3, "bcvjkl", "Zeek Zone", "finaally")

store.add(p1)
store.add(p2)
store.add(p3)
print("Geting all:")
store.get_all()
print("Geting id = 3:")
store.get_by_id(3)
print("Edeting 1:")
store.update(1, "none", "Hassan ZEKKOURI", "Thank you Coretabs!")
print("Geting id = 1:")
store.get_by_id(1)


1 Like

أين بقية الموقع يا حسن… مالذي يؤخرك في اطلاقه :smile:

1 Like

لـيـش يـظـهـر لـي كـذا مـع أنـو الـ store مـوجـود !!

1 Like

مـهـمـة عـمـل مـسـتـودع لـلـمـنـشورات …

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

posts=[]
class PostStore:
        
    def get_all(self):
        return posts

    def add(self,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

أعتقد أنك حللتي المشكلة
وتعرفي أنه يجب تشغيل الـ cmd في نفس المجلد باستعمال shift + right mouse click واختيار run cmd here :grin:

بالنسبة للمهمة… عمل رائع :+1:

1 Like

Studies duties and other online programs :sweat_smile:
I want to do the front end part aswell, so it may take some extra time to be deployed on heruko :stuck_out_tongue_winking_eye:

1 Like

غشيت الحل -_-

2 Likes

لما؟ هل يوجد شيء لما تفهمه؟

1 Like

شوي ولله بس المشكلة مو من الدورة بس احس ماعندي تفكير برمجي

1 Like

احنا هنا لنساعدك على اكتساب التفكير البرمجي… اطرح لنا اسئلتك ونحن سنجيبك عليها :wink:

1 Like

شكراا لكم ماتقصرون

1 Like
    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_post(self, post):
        #add new post

    	posts.append(post)

    def get_by_id(self, id):
        #get post by id

        result = None
        for post in posts:
            if post.id == id:
                result = post
                break
        return result
2 Likes

رابط المشروع على جيت هاب https://github.com/SafaaAlblh/posts-_project

نص ملف store:

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 __init__(self):
        self.posts=[]
        
    def get_all(self):
        # get all posts - الحصول على كل المنشورات
       return self.posts
            
    def add(self, post):
        
        # append post - إضافة منشور
        (self.posts).append(post)
    def get_by_id(self, id):
        # search for post by id - id البحث عن منشور بالمعرف
        result=None
        for post in self.posts:
            if id==post.id:
                result=post
                break
        return result
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):
        return posts

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

    def get_by_id(self, id):
        result = None

        for post in posts:
            if post.id == id:
                result = post
                break
        return result
    #def update(self, id, fields):
       # update post data - id تعديل منشور بالمعرف

    #def delete(self, id):
        # delete post by id - id حذف منشور بالمعرف''

2 Likes
class Post:
    def __init__(self, id, photo_url, name, body, post):
        self.id = id
        self.photo_url = photo_url
        self.name = name
        self.body = body
        self.post=post
posts = []

class PostStore:
    def get_all(self):
        return (posts)

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

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

obj=PostStore()
obj.post=(input())
obj.add(obj.post)



2 Likes

عمل ممتاز انس :clap: :ok_hand:

2 Likes

عمل جميل رفا :ok_hand:

بس عندي ملاحظة في هذا السطر

استعملي البراماتر تبع الدالة add مباشرة ال class PostStore ليس لديه هذه الخاصية

1 Like