0Pricing
Competitive Programming Academy · درس

مواجهة input() وsys.stdin

لماذا تكلّفكم input() العادية وقتًا في الاختبارات الكبيرة

مواجهة input() وsys.stdin درس مجاني في Competitive Programming Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Competitive Programming Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.

التكلفة الخفية لـ input()

تنفّذ كل استدعاءة لـ input() عملًا إضافيًا خلف الكواليس. لا مشكلة في ذلك عند قراءة بضعة أسطر، لكن المسابقات قد ترسل إليكم آلاف الأسطر. ⏱️

لماذا يتراكم ذلك

يأتي التباطؤ من الكلفة الإضافية لكل استدعاء: إذ تتكرر المطالبات والتفريغ وفحوصات الترميز مع كل سطر تقرؤونه.

تعرّفوا إلى sys.stdin

المسار الأسرع هو القراءة من sys.stdin، أي تدفق الإدخال الخام. فهو يتجاوز الإضافات المريحة التي يضيفها input() لكم.

import sys
data = sys.stdin

اقرؤوا سطرًا واحدًا بسرعة

استخدموا sys.stdin.readline() لالتقاط سطر واحد بسرعة. فهو يتصرف مثل input()، لكن بكلفة إضافية أقل بكثير لكل استدعاء.

import sys
line = sys.stdin.readline()

انتبهوا إلى محرف السطر الجديد

يُبقي readline() محرف السطر الجديد في النهاية. استدعوا .strip() لإزالته قبل تحليل القيمة.

n = int(sys.stdin.readline().strip())

اقرؤوا كل شيء دفعة واحدة

للحصول على أسرع قراءة، اجلبوا الإدخال كله دفعة واحدة باستخدام sys.stdin.read()، ثم عالجوا النص بأنفسكم.

data = sys.stdin.read()

قسّموا النص كله

بعد read()، استدعوا .split() لتحويل جميع الرموز إلى قائمة مسطحة واحدة. وتُعالَج المسافات البيضاء ومحارف السطر الجديد معًا.

tokens = sys.stdin.read().split()

أعيدوا ربط input للسرعة

من الحيل الشائعة توجيه input إلى readline، بحيث تبقى شيفرتكم القديمة كما هي، لكنها تعمل بسرعة أكبر.

import sys
input = sys.stdin.readline

متى يكون input() مناسبًا تمامًا

إذا كانت المسألة تقرأ بضعة أسطر فقط، فإن input() العادي مناسب تمامًا. احتفظوا بالمسار السريع للمدخلات الكبيرة.

للطباعة كلفة إضافية أيضًا

تنطبق الفكرة نفسها على الإخراج: إذ تكون استدعاءات print() الكثيرة بطيئة. سنعالج ذلك في درس لاحق عن التجميع.

اختاروا الأداة المناسبة

القاعدة العامة: عند صغر الإدخال، استخدموا input()؛ وعند كبره، انتقلوا إلى sys.stdin. إن اختيار الأداة المناسبة لقيمة N يوفر لكم النقاط.

تحقق سريع

اختبار سريع لحدسكم بشأن سرعة القراءة.

مراجعة: القراءة السريعة

تعرّفتم إلى sys.stdin بوصفه البديل السريع لـ input(): استخدموا readline() لكل سطر، أو read().split() لقراءة كل شيء. طابقوا الأداة مع حجم الإدخال. ⚡

الأسئلة الشائعة

هل درس «مواجهة input() وsys.stdin» مجاني؟

نعم — نص درس «مواجهة input() وsys.stdin» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Competitive Programming Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.

ماذا ستتعلم في «مواجهة input() وsys.stdin»؟

لماذا تكلّفكم input() العادية وقتًا في الاختبارات الكبيرة تتمرن على Competitive Programming Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Competitive Programming Academy؟

لا تُشترط خبرة سابقة. Competitive Programming Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «مواجهة input() وsys.stdin»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Competitive Programming Academy هذا؟

نعم. كل درس في Competitive Programming Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. مواجهة input() وsys.stdin
  2. تحليل أعداد كثيرة في سطر واحد
  3. إخراج دفعي بالطريقة الصحيحة
  4. قراءة N سطرًا والحالات الطرفية
← العودة إلى Competitive Programming Academy