محتويات الدورة

بايثون / الأساسيات / الدرس 2

القيم والأنواع والتعبيرات

اختر تمثيلا يحفظ المعنى، وحوّل الأنواع عن قصد، وافهم الحساب والقيم المنطقية دون الخلط بين النص والعدد.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • للكائنات أنواع
  • الحقيقة والمقارنات

للكائنات أنواع

القيمة في بايثون كائن له نوع يحدد عملياته الممكنة. تمثل الأعداد الصحيحة كميات كاملة، وتمثل float قيما تقريبية، وتمثل السلاسل نصوص يونيكود، وتمثل القيم المنطقية الصواب والخطأ. تشير None إلى الغياب عندما يسمح به الاتفاق. قد يرتبط الاسم لاحقا بنوع آخر، لكن للكائن الحالي سلوكا محددا. اختر النوع بحسب المعنى: الرمز البريدي نص ولو كانت محارفه أرقاما، لأن الصفر الأول والهوية مهمان أكثر من الحساب. يمنع التمثيل الصحيح كثيرا من الأخطاء قبل التحقق الشرطي.

الحساب وأولوية العمليات

تجمع التعبيرات القيم باستخدام المعاملات. تسبق أولوية الضرب الجمع، وتوضح الأقواس التجميع المقصود. تنتج / عددا عشريا، وتحسب // خارج القسمة الأرضي، وتعطي % الباقي الموافق. يعني التقريب الأرضي الاتجاه نحو سالب ما لا نهاية، لذا اختبر الأعداد السالبة بدلا من افتراض حذف الجزء العشري. يستخدم الأس المعامل **؛ أما ^ فهو عملية بتية للأعداد الصحيحة. وضح وحدات القياس في الأسماء أو التوثيق، لأن جمع الدقائق والساعات بلا تحويل خطأ في النموذج حتى لو نجح التنفيذ.

التحويل عند الحدود

لا يتحول النص القادم من الخارج تلقائيا إلى عدد. تحلل int("12") تمثيلا لعدد صحيح، وتحول str(12) العدد إلى نص للعرض. تعيد input نصا أيضا، لكن المثال يستخدم نصا ثابتا حتى لا يحتاج إلى تفاعل. قد يفشل التحويل، وسنتعلم معالجة ذلك باستثناءات محددة. احتفظ بالنص الأصلي عند الحاجة لتوضيح الحقل الخاطئ، ثم مرر أعدادا متحققا منها إلى الحساب. تنسيق النتيجة حد مستقل؛ يؤدي خلط هذه المراحل إلى تحويلات متكررة وصعوبة تحديد العملية الفاشلة.

python التحويل عند الحدود — مثال محلول
text = "12"
count = int(text)
print(count * 3)
print(17 // 5, 17 % 5)
الناتج المتوقع
36
3 2

ينتج التحويل عددا صحيحا قبل الضرب. يعيد الخارج والباقي بناء 17 بوصفه ثلاث مجموعات من خمسة وباقيا مقداره اثنان.

التقريب والدقة

يمثل الفاصل العائم الثنائي كسورا عشرية كثيرة تمثيلا تقريبيا. لا تعني النتيجة المطبوعة المفاجئة أن بايثون غيرت الحساب عشوائيا. قارن الكميات المقيسة بسماحية مناسبة، ويمكن استخدام math.isclose مع ضبط السماحيتين النسبية والمطلقة بحسب المجال. عندما يتطلب النموذج حسابا عشريا مضبوطا، تحفظ Decimal المبنية من نص القيم العشرية المدخلة. أما بناؤها من float فينقل تقريبه. يجب أن يحدد التطبيق وحدات القياس والدقة ومواضع التقريب والفروق المقبولة؛ لا يقرر النوع هذه السياسة نيابة عنه.

python التقريب والدقة — مثال محلول
from decimal import Decimal
from math import isclose

print(0.1 + 0.2 == 0.3)
print(isclose(0.1 + 0.2, 0.3))
print(Decimal("0.1") + Decimal("0.2"))
الناتج المتوقع
False
True
0.3

تفشل المساواة العشرية المباشرة هنا، وتنجح المقارنة بسماحية، وتعطي Decimal المبنية من نص المجموع العشري الدقيق.

الحقيقة والمقارنات

تنتج المقارنات مثل < و== قيما منطقية. استخدم == لمساواة القيم، وis لاختبار الهوية، ومن أمثلته value is None. تعد الحاويات الفارغة والصفر وNone وFalse كاذبة في الشروط، لكن النص "False" صادق لأنه غير فارغ. لا تحلل bool هذا النص بوصفه جوابا بنعم أو لا؛ حدد الكلمات المقبولة صراحة عند بناء محلل كهذا. وتتيح بايثون مقارنات متسلسلة مثل 0 <= score <= 100 لتوضيح المجال والتحقق من طرفيه دون فجوة منطقية.

الأخطاء الشائعة وإصلاحها

ظهور TypeError عند جمع نص وعدد

لماذا يحدث؟
يمثل المعاملان نوعين مختلفين ولم يُطلب تحليل النص.
كيف تصلحه؟
حلل النص العددي قبل الحساب أو نسق القيمتين كنص.
كيف تتجنب تكراره؟
افصل تحليل المدخلات عن الحساب وتنسيق العرض.

فشل مساواة قيم عشرية على نحو مفاجئ

لماذا يحدث؟
يقرب float الثنائي الكسور العشرية المعنية.
كيف تصلحه؟
استخدم سماحية صريحة أو تمثيلا دقيقا يناسب النموذج.
كيف تتجنب تكراره؟
وثق سياسة الدقة والتقريب واختبر الحدود الواقعية.

إرجاع bool("False") القيمة True

لماذا يحدث؟
كل نص غير فارغ صادق بغض النظر عن حروفه.
كيف تصلحه؟
قارن المدخل الموحّد بكلمات مقبولة محددة.
كيف تتجنب تكراره؟
اختبر النص الفارغ والمقبول والمرفوض واختلاف حالة الحروف.

اختبر فهمك

1. حوّل 137 دقيقة إلى ساعات كاملة ودقائق متبقية.

اعرض الحل المشروح

احسب hours = 137 // 60 وminutes = 137 % 60. النتيجة ساعتان و17 دقيقة. تحقق من 2 * 60 + 17 == 137 ومن 0 <= 17 < 60، فتثبت إعادة بناء الكمية وصحة مجال الباقي.

2. فسر لماذا يفضل غالبا إبقاء رمز المنتج "0042" نصا.

اعرض الحل المشروح

يحدد الرمز عنصرا ولا يقيس كمية. تنتج int("0042") العدد 42 وتحذف الأصفار المهمة في بدايته. احفظ الرمز كنص، وقارن كتابته بعد توحيدها وفق سياسة موثقة، وحوّل حقل الكمية المستقل وحده إلى عدد صحيح.

أهم ما تعلمته

  • يتبع التمثيل معنى القيمة ووحداتها.
  • التحويل والتقريب قراران صريحان في التصميم.
  • تختلف صدقية النص عن تحليل جواب منطقي.

المراجع الرسمية