"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > أسئلة بايثون الصعبة

أسئلة بايثون الصعبة

تم النشر بتاريخ 2024-07-29
تصفح:313

في العامين الماضيين، كنت أستخدم بايثون كلغة البرمجة الرئيسية. اعتقدت أنه ربما يكون هذا سببًا وجيهًا "للتعمق" كما فعلت في أسئلة جافا سكريبت الصعبة. كانت بعض الأسئلة التالية عبارة عن مشكلات أحتاج إلى التعامل معها في وظيفتي الحالية، والبعض الآخر مستوحى من الويب.

هل أنت مستعد لإبعاد عقلك (من سؤال بايثون)؟

Tricky Python Questions

أسئلة

ملاحظة 1!: لكل سؤال هناك إجابة مع شرح (الرابط أسفل كل عنصر).
ملاحظة 2!: لكل سؤال فكر في النتيجة.

السؤال رقم 1
exapmle_dict = dict()
exapmle_dict.a = "string"
print(exapmle_dict)

انتقل إلى الإجابة 1

السؤال 2
class Json:
    def __init__(self, *args, **kwargs):
        import json

    def print_dict_as_json(self, obj):
        print(json.dumps(obj))

example_json = Json()
example_json.print_dict_as_json({"a": "string"})

انتقل إلى الإجابة 2

السؤال 3
def myFun(arg1, arg3, **kwargs):
    for key, value in kwargs.items():
        print("%s == %s" % (key, value))


my_dict = {'arg1':1, 'arg2': 2}
myFun(**my_dict, arg3=3)

انتقل إلى الإجابة 3

السؤال الرابع
def add_to_all_1(arr):
    for i in range(len(arr)):
        arr[i]  =1

def my_func():
    arr = [1,2,3]
    add_to_all_1(arr)
    arr2 = arr
    print(arr2)

my_func()

انتقل إلى الإجابة 4

الإجابات

الإجابة على السؤال 1

ان كان هذا ما تقول:

{"a": "string"}

للأسف أنت مخطئ، الجواب هو:

AttributeError: 'dict' object has no attribute 'a'

إذا كنت تحبني وجاءت من جافا سكريبت أولاً، فإن قاموس الوصول (الكائن في جافا سكريبت) ليس بالنقطة كما هو الحال في جافا سكريبت، ولا يمكنك الوصول إلا عن طريق []، وداخل المفتاح الذي تريد تعيين "أ".

العودة إلى السؤال 1

الإجابة على السؤال 2

ان كان هذا ما تقول:

{"a": "string"}

أنت مخطئ مرة أخرى، الجواب هو:

...
NameError: name 'json' is not define

قد تعرف الاختلافات بين النطاق المحلي والعالمي في بايثون (إذا لم يكن الأمر كذلك فعليك قراءة هذا: نطاق بايثون). __init__ عبارة عن وظيفة ، ويكون الاستيراد داخل نطاق محلي لذا لا يعرف ما هو json. يمكنك إصلاحه عن طريق استيراده عالميًا مثل هذا:

import json

class Json:
    def print_dict_as_json(self, obj):
        print(json.dumps(obj))

example_json = Json()
example_json.print_dict_as_json({"a": "string"})

أو بطريقة أكثر تقدمًا:

class Json:
    import json as json
    def print_dict_as_json(self, obj):
        print(self.json.dumps(obj))

example_json = Json()
example_json.print_dict_as_json({"a": "string"})

يمكنك الاطلاع على استخدام الاستيراد داخل الفصل لمزيد من التفاصيل.

العودة إلى السؤال 2

الإجابة على السؤال 3

ان كان هذا ما تقول:

arg2 == 2

أنت محق! في بايثون، لدينا ثلاث طرق لتمرير وسيطة:

  • بالوسيطة نفسها:
def myFun(arg1):
   print(arg1)

myFun('arg1')
  • By *args - قائمة أو مجموعات من الوسائط (تسمح لنا بتمرير عدد متغير من الوسائط غير المتعلقة بالكلمات الرئيسية إلى دالة Python):
def myFun(*arg1):
   print(*arg1)

my_tuple = ('arg1', 'arg2')
myFun(my_tuple)
  • بواسطة kwargs يمكنها تمرير وسيطات key=value (kwargs تسمح لنا بتمرير عدد متغير من وسيطات الكلمات الرئيسية إلى وظيفة Python) - كما هو الحال في السؤال. إذا كنت تريد قراءة المزيد عن الموضوع، يمكنك القراءة هنا: freecodecamp - كيفية استخدام *args و **kwargs في Python

العودة إلى السؤال 3

الإجابة على السؤال 4

الجواب هو:

[2, 3, 4]

بالنسبة لبعض الأشخاص الذين يعرفون النطاقات والمهام، قد يبدو هذا سؤالًا سهلاً جدًا. بالنسبة لأولئك الذين لا يعرفون، يحفظ بايثون ذاكرة متغيرة كمرجع، لذلك في هذه الحالة، سيشير arr إلى مرجع في الذاكرة -> ستغير الدالة القيم (لكن ستظل نفس المرجع) -> سوف arr2 احصل على العنوان المرجعي لـ arr ولكن بعد تعديل القيم.

العودة إلى السؤال 4

شكرا لكم على قراءة هذا المقال. أتمنى أنك استمتعت وتعلمت أشياء جديدة. إذا كان لديك أي أسئلة أو اقتراحات، يرجى ترك تعليق.

بيان الافراج تم نشر هذه المقالة على: https://dev.to/tomeraitz/tricky-python-questions-45gg?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3