اذهب إلى المحتوى
  • 0

هل من المؤكد أن True == 1 و False == 0 في كل الأحوال في بايثون؟

Fahmy Mostafa

السؤال

هل من المؤكد أن True == 1 و False == 0 في كل الأحوال، فعلى سبيل المثال ، هل هو مضمون بأي شكل من الأشكال أن الشفرة التالية ستؤدي دائمًا إلى نفس النتائج:

1 == True   # True
0 == False  # True
['hello', 'world'][False]  # is 'hello'
1 + True	# 2

هل يمكن في أي إحتمال أن يفشل الكود السابق لأي سبب من الأسباب المتعلقة بنوع الكائنات؟ وهل دائمًا يتم إعتبار True بالقيمة 1 و False بالقيمة 0؟ أم أن هناك حالات لا تتساوى هذه القيم؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

في بايثون الإصدار 2 هذا ليس مضمونا كما أنه من الممكن ل True و  False أن يعاد تعيينهما ومع ذلك ، حتى في حالة حدوث ذلك ، لا يزال يتم إرجاع الصحيح المنطقي والخطأ منطقي بشكل صحيح لإجراء مقارنات.

في بايثون 3 ،  True و False هما كلمتان محجوزتان، وسيكونا دائما يساوين 1 و  0.

الكائن False من نوع bool هو صنف فرعي من int:

object
   |
 int
   |
 bool

هذا هو السبب الوحيد الذي يجعل ['hello', 'world'][False] في مثالك يعمل.

لذلك يتم اعتبار القيم المنطقية  كأعداد صحيحة int في بايثون 2 و 3.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

عند تحويل كائن من نوع   bool إلى عدد صحيح ، تكون قيمة العدد الصحيح دائمًا 0 أو 1 ، ولكن عند تحويل int إلى كائن من نوع   bool ، تكون القيمة المنطقية true لجميع الأعداد الصحيحة باستثناء 0.

مثلا:

>>> int(False)
0
>>> int(True)
1
>>> bool(5)
True
>>> bool(-5)
True
>>> bool(0)
False

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

العبارات True, False تتبع للقيم البوليانية في بايثون، و يمكن التعبير عنهما بأرقام تأخذ قيمتين 1,0 على التوالي. بذلك يمكن إجراء كافة العمليات الحسابية عليهما، لاحظ المثال أدناه:

print(True == 1) #True
print(False == 0) #True
print(True + (False / True)) #1.0
print(0 + False + True) #1
not 1 #False

لكن إن تم إستخدام True, False كقيمة راجعة من دالة، يمكن أن تتغير قيمتها حسب البرنامج، مثلاً:

def print_and_true():
    print("I got called")
    return True

not print_and_true()

# I got called
# False

القيمة الراجعة من الدالة print_and_true عبارة عن False لأنه تم إستخدام not قبل مناداة الدالة.

def print_and_return(x):
    print(f"I am returning {x}")
    return x

True and print_and_return(True)
# I am returning True
# True

True and print_and_return(False)
# I am returning True
# False

False and print_and_return(True)
# False

False and print_and_return(False)
# False

في المثال السابق لاحظ عدم مناداة الدالة لأن القيمة الأولى للboolean operator كانت عبارة عن False ففي هذه الحالة لا داعي لتنفيذ ما يليها.

 

 

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...