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

ما المشكلة في هذا الكود؟

السؤال

نشر

السلام عليكم

أرجوا أن تساعدوني في فهم هذا السؤال لم سمحتم

لم أفهم لماذا الجواب (c) ؟ ، انا حسب ما فهمت الكود ، قيمة x هي ١٥ ، و قيمة y هي ٥  

حسب الشرط الأول: x هي أكبر من y ، لذلك سيتحقق الشرط و يتم طباعة: x is bigger than y و لن يتم الذهاب الى الشروط الاخرى

Screenshot 2026-09-11 at 10.15.11 PM.png

Recommended Posts

  • 0
نشر

السبب في ان الاجابة هي c يعود الى ان الدالة input في لغة بايثون تستقبل المدخلات كنصوص وليس كارقام. عند مقارنة النصوص فان البرنامج يقارن الرموز من اليسار الى اليمين بناء على قيمتها. في هذا السؤال تمت مقارنة الرمز الاول من النص 15 وهو 1 مع الرمز الاول من النص 5 وهو 5. وبما ان 1 اصغر من 5 فان البرنامج يعتبر ان النص 15 اصغر من النص 5 ولذلك لم يتحقق الشرط الاول وانتقل التنفيذ الى else مباشرة.
لجعل المقارنة صحيحة وتتم بشكل عددي يجب تحويل المدخلات الى ارقام باستخدام int كما في الكود التالي.

x = int(input('x: '))

y = int(input('y: '))

بهذه الطريقة ستكون النتيجة هي الخيار a لان المقارنة ستصبح بين قيم عددية حقيقية.

  • 0
نشر

وعليكم السلام ورحمة الله وبركاته.

لاحظ عدم استخدام دالة int عند استقبال النص ولهذا فالمتغيرات نوعها نصي string حيث دالة input تعيد القيم بنوع نصي وليس رقم .

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

فمثلا الرقم 15 والرقم 5 هنا يتم مقارنة الرقم 1 من جهة اليسار ورقم 5 وهنا ال 5 اكبر من 1 لهذا يرى ان 5 اكبر من 15 .

  • 0
نشر

دالة ()input تُعيد نصاً وليس رقماً، وذلك لأن المستخدم قد يكتب في لوحة المفاتيح أي شيء:

  • أرقام: 123
  • نصوص: Ahmed
  • رموز: !@#$
  • مسافات فارغة أو خليط من ذلك.

لذا النوع الوحيد من البيانات القادر على تمثيل أي حرف يُكتب من الكيبورد دون التسبب بانهيار البرنامج هو النص String، ولو كانت الدالة تُعيد أرقام تلقائياً، فماذا ستفعل عندما يكتب المستخدم اسمه؟ سيتوقف البرنامج بسبب خطأ في النوع.

وتركت بايثون لك حرية تحديد نوع البيانات الذي تريده بالتحديد ()int أو ()float أو إبقائه نصاً.

وعلى مستوى أنظمة التشغيل، تيار الإدخال القياسي Standard Input / stdin يتعامل مع الضغطات القادمة من لوحة المفاتيح كسلسلة من البايتات أو المحارف Characters، بايثون تقرأ ما يصلها من لوحة المفاتيح كما هو تماماً أي النص، وتترك لك مهمة معالجته بحسب حاجتك.

  • 0
نشر

الكود يستخدم input() لقراءة القيم، والدالة input() في بايثون دائماً تُرجع نص (string) وليس رقم (integer)، حتى لو كتب المستخدم أرقاماً.

فعندما يُدخل المستخدم:

x: 15

y: 5

فإن قيمة x هي النص 15 وقيمة y هي النص 5 وليست أرقاماً فعلية.

والمقارنة بين النصوص (strings) في بايثون تتم بطريقة قاموسية/حرفية (lexicographic)، أي تقارن حرفاً بحرف حسب الترتيب في جدول ASCII، وليس بالقيمة العددية.

فلو قارنّا 15 > 5:

تُقارن أول محرف من كل نص: 1 مقابل 5 في ترتيب ASCII، الرقم 1 أصغر من 5 (لأن 1 = 49 و5 = 53)

إذن 15 < 5 كنصوص، لهذا السبب لا يتحقق الشرط x > y، ولا يتحقق أيضاً x == y (لأن النصين مختلفان)، فينتقل التنفيذ إلى else ويُطبع: "x is less than y"

ثم لو أراد المبرمج مقارنة الأرقام فعلياً، كان يجب عليه تحويل المدخلات إلى أرقام هكذا:

x = int(input('x: '))
y = int(input('y: '))

عندها فقط ستكون المقارنة عددية، وستحصل على x is bigger than y كما توقعت.

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...