تقنية

assertAlmostEqual في بايثون: هل تقارن القيمتين بعد تقريبهما؟

assertAlmostEqual; 1.004 vs 1.006; places=2; pass.
الفرق المدوّر صفر.

مع places، assertAlmostEqual تقرّب مقدار الفرق وتقارنه بالصفر؛ لا تقارن القيمتين بعد تقريب كل منهما. [1] [2]

الخلاصة السريعة

لا؛ المقارنة للفارق المدوّر. [1] [2]

  • مع places، assertAlmostEqual تقرّب مقدار الفرق وتقارنه بالصفر؛ لا تقارن القيمتين بعد تقريب كل منهما. [1] [2]
  • على CPython 3.12.14، tc=TestCase() وfirst=1.004 وsecond=1.006؛ نستخدم places=2. [1] [2]
  • النداء يمر؛ round(abs(first-second),2) تساوي 0.0. [1] [2]
  • تقريب القيمتين منفصلًا يعطي 1.0 و1.01؛ هما مختلفتان رغم مرور التأكيد. [1] [2]
  • تحكم: other=1.016 مع first وplaces=2 يسبب AssertionError؛ الفرق المدوّر 0.01. نستخدم أعداد float، دون delta. [1] [2]

الفارق لا القيم المدورة

مع places، assertAlmostEqual تقرّب مقدار الفرق وتقارنه بالصفر؛ لا تقارن القيمتين بعد تقريب كل منهما. [1] [2]

قيمتان قريبتان

على CPython 3.12.14، tc=TestCase() وfirst=1.004 وsecond=1.006؛ نستخدم places=2. [1] [2]

مرور التأكيد

النداء يمر؛ round(abs(first-second),2) تساوي 0.0. [1] [2]

from unittest import TestCase tc=TestCase() first=1.004;second=1.006 tc.assertAlmostEqual(first,second,places=2) print("pass") print(round(first,2),round(second,2),round(abs(first-second),2)) [1] [2]

assertAlmostEqual; 1.004 vs 1.016; places=2; AssertionError.
فرق أكبر يفشل هنا.

التقريب المنفصل والتحكم

تقريب القيمتين منفصلًا يعطي 1.0 و1.01؛ هما مختلفتان رغم مرور التأكيد. [1] [2]

other=1.016 try:tc.assertAlmostEqual(first,other,places=2) except AssertionError:print("AssertionError") print(round(abs(first-other),2)) [1] [2]

تحكم: other=1.016 مع first وplaces=2 يسبب AssertionError؛ الفرق المدوّر 0.01. نستخدم أعداد float، دون delta. [1] [2]

المراجع

  1. Python assertAlmostEqual
  2. CPython 3.12.14 assertion

للتوسع: لغات البرمجة.

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