1 00:00:00,000 --> 00:00:03,992 [MUSIC PLAYING] 2 00:00:03,992 --> 00:00:50,490 3 00:00:50,490 --> 00:00:53,820 ديفيد مالان: هذه هي دورة CS50، وهذه هي المحاضرة السادسة. 4 00:00:53,820 --> 00:00:56,490 وستذكرون أننا قدّمنا في الأسبوع الماضي برمجة الويب 5 00:00:56,490 --> 00:00:58,874 بطريقة HTML وCSS، أو على الأقل الكتل البنائية 6 00:00:58,874 --> 00:01:01,290 لأننا لا نملك القدرة على البرمجة بعد. 7 00:01:01,290 --> 00:01:04,900 إنها مجرد ترميز، HTML وCSS بتطبيق نمط معين هناك. 8 00:01:04,900 --> 00:01:08,490 ولكن قدّمنا في الأسبوع الماضي هذه الاستعارة لبروتوكول يُسمى TC/IP. 9 00:01:08,490 --> 00:01:10,780 وقمنا بالطبع، بربطه، بالظرف. 10 00:01:10,780 --> 00:01:12,750 وكان على هذا الظرف، بشكل افتراضي، على الجهة الأمامية 11 00:01:12,750 --> 00:01:14,790 جزآن على الأقل من المعلومات. 12 00:01:14,790 --> 00:01:17,040 وإذا كان أي شخص يتذكر ما هما هذان الجزآن 13 00:01:17,040 --> 00:01:19,500 من المعلومات في مجال إلى؟ 14 00:01:19,500 --> 00:01:22,010 شخص آخر لم نستمع إليه في الآونة الأخيرة؟ 15 00:01:22,010 --> 00:01:22,510 أجل؟ 16 00:01:22,510 --> 00:01:23,400 الجمهور: عنوان IP. 17 00:01:23,400 --> 00:01:23,590 ديفيد مالان: أجل. 18 00:01:23,590 --> 00:01:26,730 عنوان IP، عنوان رقمي يُحدّد بشكل فريد جهاز الكمبيوتر الخاص بك 19 00:01:26,730 --> 00:01:27,964 وجهاز الكمبيوتر الخاص بشخص آخر. 20 00:01:27,964 --> 00:01:29,505 وشيء آخر، إذا كنتم تتذكرون. 21 00:01:29,505 --> 00:01:32,120 22 00:01:32,120 --> 00:01:32,620 أوه، هيا. 23 00:01:32,620 --> 00:01:33,860 إنه كما لو كان منذ دقيقتين. 24 00:01:33,860 --> 00:01:34,100 حسنًا. 25 00:01:34,100 --> 00:01:34,530 أجل. 26 00:01:34,530 --> 00:01:35,390 الجمهور: رقم المنفذ. 27 00:01:35,390 --> 00:01:36,515 ديفيد مالان: رقم المنفذ. 28 00:01:36,515 --> 00:01:40,420 إذن رقم آخر، رقم أقصر، هو مجرد رقم مثل 80 أو 443 29 00:01:40,420 --> 00:01:44,090 يشير إلى HTTP أو HTTPS، أو أرقام أخرى، 30 00:01:44,090 --> 00:01:45,890 مثل 25 للبريد الإلكتروني وما شابه ذلك. 31 00:01:45,890 --> 00:01:49,090 إذن تتيح لك هذه العناوين الفريدة معًا إرسال المعلومات 32 00:01:49,090 --> 00:01:51,940 ليس فقط إلى كمبيوتر محدد، ولكن أيضًا خدمة محددة 33 00:01:51,940 --> 00:01:53,860 تعمل على هذا الكمبيوتر. 34 00:01:53,860 --> 00:01:57,580 ومن أجل طلب معلومات بالفعل من ذلك الخادم، 35 00:01:57,580 --> 00:02:01,480 فهناك بروتوكول آخر يُسمى HTTP، بروتوكول نقل النص التشعبي. 36 00:02:01,480 --> 00:02:03,600 هذا هو ما بداخل الظرف. 37 00:02:03,600 --> 00:02:06,130 لذلك عندما يقوم الخادم بفتحه، بشكل مجازي، 38 00:02:06,130 --> 00:02:10,509 يبدو في الداخل، هذا هو الأمر الذي يقرأه ذلك الخادم لكي يقرر 39 00:02:10,509 --> 00:02:12,180 ما هي الطريقة التي يجب أن يستجيب بها بالفعل. 40 00:02:12,180 --> 00:02:15,260 ولذلك فإن هذا الطلب هنا يُخبر الخادم-- 41 00:02:15,260 --> 00:02:19,330 والمعروف كـ www.example.com في هذا المثال المُحدّد-- 42 00:02:19,330 --> 00:02:23,560 ليقوم بإرسال ما بداخل الظرف الخاص به بالضبط إليّ 43 00:02:23,560 --> 00:02:27,990 وجهاز الكمبيوتر المحمول الخاص بي إذا طلبتُ ذلك؟ 44 00:02:27,990 --> 00:02:29,646 الجمهور: صفحة ويب محددة. 45 00:02:29,646 --> 00:02:31,020 ديفيد مالان: صفحة ويب محددة. 46 00:02:31,020 --> 00:02:33,459 وشخص آخر، أي صفحة ويب تحديدًا، بشكل افتراضي؟ 47 00:02:33,459 --> 00:02:34,125 الجمهور: الفهرس. 48 00:02:34,125 --> 00:02:36,700 ديفيد مالان: نعم، إذن index.html، الذي تحدثنا عنه الأسبوع الماضي 49 00:02:36,700 --> 00:02:40,602 فقط يميل إلى أن يكون اسم الملف الافتراضي على خادم صفحة الويب 50 00:02:40,602 --> 00:02:43,560 التي تم تحديدها للتو بشكل افتراضي. ولا تتعين تسميتها بهذا، 51 00:02:43,560 --> 00:02:44,820 ولكنه تقليد بشري. 52 00:02:44,820 --> 00:02:48,070 وبقية هذا عبارة عن فعل يقول فقط، حرفيًا، أعطني ذلك الملف. 53 00:02:48,070 --> 00:02:50,400 هذا فقط يخبر الخادم أي إصدار من HTTP 54 00:02:50,400 --> 00:02:54,600 أنا أتحدث به حتى يمكن للبشر تحسينه وترقيته مع مرور الوقت. 55 00:02:54,600 --> 00:02:57,660 ولكن هذا سيخبر الخادم بأن يعيد index.html. 56 00:02:57,660 --> 00:03:00,480 وفي الوقت نفسه، رأينا المزيد من get queries المتطورة 57 00:03:00,480 --> 00:03:03,960 عندما بدأنا التحدث عن Google، وأي موقع ويب 58 00:03:03,960 --> 00:03:07,830 ليس لديه فقط واجهة تطبيق، مثل HTML وCSS، ولكن أيضًا واجهة خلفية. 59 00:03:07,830 --> 00:03:10,320 والواجهة الخلفية هي حيث يوجد المنطق، حيث يوجد الخادم، 60 00:03:10,320 --> 00:03:12,850 والعمل المثير للاهتمام، في نهاية المطاف. 61 00:03:12,850 --> 00:03:15,780 ولذلك يشير هذا الخط المائل search إلى بعض البرامج 62 00:03:15,780 --> 00:03:18,820 التي تعمل على خوادم Google من الأسبوع الماضي 63 00:03:18,820 --> 00:03:20,460 والتي ببساطة تستجيب للطلبات. 64 00:03:20,460 --> 00:03:27,740 وما الذي تفعله أو تمثله علامة الاستفهام q تساوي cats في هذا الإثبات؟ 65 00:03:27,740 --> 00:03:28,720 الجمهور: مدخل المستخدم. 66 00:03:28,720 --> 00:03:29,780 ديفيد مالان: نعم، مدخل المستخدم. 67 00:03:29,780 --> 00:03:32,790 إذن تقول علامة الاستفهام فقط، أن هذا كل شيء عن اسم الملف أو عنوان URL. 68 00:03:32,790 --> 00:03:34,500 ها هو مدخل المستخدم. 69 00:03:34,500 --> 00:03:38,361 Q هو حرفيًا معلمة HTTP أو المدخل 70 00:03:38,361 --> 00:03:40,110 الذي قرر لاري وسيرغي، مؤسسا Google، 71 00:03:40,110 --> 00:03:44,340 قبل 20 عامًا أن يمثل مدخل المستخدم، q لـ query. 72 00:03:44,340 --> 00:03:47,231 علامة يساوي تعني فقط أن query التي كتبها البشر كانت قطط. 73 00:03:47,231 --> 00:03:49,230 ولكن لا يتعين على الشخص كتابة هذا. 74 00:03:49,230 --> 00:03:53,250 بمجرد فهمك لبروتوكول HTTP، إذا أردت حقًا أن تكون خبيرًا، 75 00:03:53,250 --> 00:03:58,387 يمكنك الانتقال إلى www.google.com/search؟q=cats وسيحث 76 00:03:58,387 --> 00:04:00,970 البحث من أجلك لأنه في نهاية اليوم، 77 00:04:00,970 --> 00:04:02,724 هذا كل ما يقوم به المتصفح. 78 00:04:02,724 --> 00:04:05,640 عندما تكون لديك أشكال الويب هذه التي لديك القدرة الآن على إنشائها، 79 00:04:05,640 --> 00:04:09,810 فقط تقوم بالتشغيل التلقائي لعملية إنشاء رسائل HTTP هذه. 80 00:04:09,810 --> 00:04:13,820 الآن، آمل أن يستجيب الخادم برسالة لم تروها من قبل بالفعل، 81 00:04:13,820 --> 00:04:17,010 HTTP 200، وهو حرفيًا يعني موافق. 82 00:04:17,010 --> 00:04:22,200 بالطبع، لقد رأى الكثير منا أرقامًا تظهر بخلاف 200، مثل ماذا؟ 83 00:04:22,200 --> 00:04:24,450 404، والذي يعني؟ 84 00:04:24,450 --> 00:04:25,410 لم يتم العثور على الملف. 85 00:04:25,410 --> 00:04:28,980 الآن، لماذا قرر الأشخاص منذ سنوات إخبار 86 00:04:28,980 --> 00:04:31,440 أشخاص آخرين ما الذي تعنيه التعليمة البرمجية الرقمية هذه، وأعني، 87 00:04:31,440 --> 00:04:33,000 أن هذا تفصيل غير مثير للاهتمام. 88 00:04:33,000 --> 00:04:36,660 لكن العالم، لأي سبب من الأسباب، قد كشف عنه في العديد من مواقع الويب 404. 89 00:04:36,660 --> 00:04:38,070 لكن هذا يعني الأمر نفسه. 90 00:04:38,070 --> 00:04:39,450 كل شيء ليس على ما يرام. 91 00:04:39,450 --> 00:04:40,615 لم يتم العثور على ملف. 92 00:04:40,615 --> 00:04:42,240 قد ترون شيئًا آخر مثل هذا. 93 00:04:42,240 --> 00:04:44,730 لقد رأينا هذا بجامعة هارفارد، في الواقع، بصورة غريبة، 94 00:04:44,730 --> 00:04:46,780 أن هارفارد انتقلت بشكل دائم. 95 00:04:46,780 --> 00:04:51,780 الآن، كانت هافارد تستجيب لطلبات معينة باستخدام HTTP 301 96 00:04:51,780 --> 00:04:55,610 من أجل تحقيق أي ميزة أو تأثير؟ 97 00:04:55,610 --> 00:04:56,110 لماذا؟ 98 00:04:56,110 --> 00:04:56,672 أجل. 99 00:04:56,672 --> 00:04:57,630 الجمهور: عمليات إعادة التوجيه. 100 00:04:57,630 --> 00:04:58,400 ديفيد مالان: عمليات إعادة التوجيه. 101 00:04:58,400 --> 00:05:00,690 إذن هذه هي طريقة ذات مستوى منخفض لوصف ذلك. 102 00:05:00,690 --> 00:05:03,150 لكن 301، على الرغم من أنه يقول تم النقل بشكل دائم، 103 00:05:03,150 --> 00:05:05,330 وهو تلميح فني أكثر للمتصفح قائلاً، 104 00:05:05,330 --> 00:05:08,420 تم نقل هارفارد ليس إلى أي عنوان URL جئت منه للتو، 105 00:05:08,420 --> 00:05:10,440 ولكن إلى عنوان URL هذا على وجه التحديد. 106 00:05:10,440 --> 00:05:14,000 والآن، ربما كانت جامعة هارفارد على الأرجح، إذا تتذكرون، أعادت توجيهي من أي عنوان URL؟ 107 00:05:14,000 --> 00:05:19,010 إذا لم أكن بالفعل في عنوان URL هذا، فأين قد أكون؟ 108 00:05:19,010 --> 00:05:22,450 ربما نقطة com، إذا كانت لديهم بالفعل مجالات متعددة وكانوا يعيدون التوجيه. 109 00:05:22,450 --> 00:05:23,410 ربما ينجح هذا. 110 00:05:23,410 --> 00:05:23,930 ماذا أيضًا؟ 111 00:05:23,930 --> 00:05:25,070 أجل. 112 00:05:25,070 --> 00:05:26,020 الجمهور: HTTP فقط. 113 00:05:26,020 --> 00:05:26,770 ديفيد مالان: أجل. 114 00:05:26,770 --> 00:05:30,250 ربما قمت للتو بكتابة HTTP، وتريد هارفارد، لأسباب أمنية، 115 00:05:30,250 --> 00:05:36,610 إجبار المتصفح الخاص بي على طلب هذه الصفحة مجددًا عبر HTTPS. 116 00:05:36,610 --> 00:05:40,490 أحيانًا قد يضيف موقع ويب www إذا لم تكتبتوها، 117 00:05:40,490 --> 00:05:42,640 أو يمكن أن تتم إعادة توجيهكم إلى أي مكان. 118 00:05:42,640 --> 00:05:47,020 في الواقع، إذا انتقلتم إلى موقع ويب دورة CS50 عن طريق كتابة CS50.harvard.edu فقط، 119 00:05:47,020 --> 00:05:47,890 شاهدوا عنوان URL. 120 00:05:47,890 --> 00:05:51,990 ستتم إعادة توجيهكم إلى صفحة محددة أكثر، بحسب فترة السنة. 121 00:05:51,990 --> 00:05:53,800 إذن نحن نستخدم هذه الخدع، أيضًا. 122 00:05:53,800 --> 00:05:56,725 قد يبدو 404 غير موجود هكذا، ولكن توجد بشكل 123 00:05:56,725 --> 00:06:00,630 أعمق داخل هذا الظرف المجازي المحتويات الفعلية لصفحة الويب. 124 00:06:00,630 --> 00:06:03,190 إذن تعيدون ليس فقط رؤوس HTTP هذه، 125 00:06:03,190 --> 00:06:06,160 كما تُسمى، في الجزء العلوي من الاستجابة، إذا جاز التعبير، 126 00:06:06,160 --> 00:06:10,750 ولكن يمكنكم أيضًا إعادة HTML، ولغة أخرى تحدثنا عنها، 127 00:06:10,750 --> 00:06:13,480 هذه في الواقع لغة، ولكنها ليست لغة برمجة. 128 00:06:13,480 --> 00:06:17,440 تخبر هذه العلامات المتصفح بالضبط ما سيقوم به وسيقدمه. 129 00:06:17,440 --> 00:06:19,480 لقد قدّمنا علامة النمط هذه، على الرغم من ذلك. 130 00:06:19,480 --> 00:06:22,180 ما الشيء الذي تتيحه لنا هذه للقيام به والذي لا تقوم به HTML بمفردها؟ 131 00:06:22,180 --> 00:06:27,770 132 00:06:27,770 --> 00:06:29,030 نعم. 133 00:06:29,030 --> 00:06:31,620 استخدم CSS لتجميل الموقع وجعله أجمل فقط. 134 00:06:31,620 --> 00:06:34,040 HTML، بالنسبة لمعظم الجزء، هو حول البنية 135 00:06:34,040 --> 00:06:37,400 وحول وضع علامات على محتويات صفحة الويب الخاصة بك بطريقة ما 136 00:06:37,400 --> 00:06:38,930 يجدها المتصفح مفيدة. 137 00:06:38,930 --> 00:06:41,810 لكن CSS مخصصة حقًا لمصلحة المستخدم، في نهاية اليوم، 138 00:06:41,810 --> 00:06:43,640 وعينه أو عينها، لأنها تتيح لك بالفعل 139 00:06:43,640 --> 00:06:46,114 التحكم في حجم الخط والموضع والأشياء ذات المستوى المنخفض 140 00:06:46,114 --> 00:06:49,280 التي قد بدأتَ في العبث بها باستخدام أحدث مجموعة مشاكل. 141 00:06:49,280 --> 00:06:51,590 الآن، كنا سنقترح أنه ربما لا يجب أن 142 00:06:51,590 --> 00:06:54,961 تبدأوا كتابة CSS فقط داخل صفحة HTML الخاصة بكم 143 00:06:54,961 --> 00:06:57,710 لأنه من الصعب إلى حد ما الاحتفاظ بها لأن أمثلتكم 144 00:06:57,710 --> 00:06:58,730 تصبح متطورة أكثر. 145 00:06:58,730 --> 00:06:59,990 لذلك قد تستبعدوها. 146 00:06:59,990 --> 00:07:01,698 والاحتمالات التي قمت بها لمجموعة المشاكل 147 00:07:01,698 --> 00:07:04,430 هذه عند إنشاء صفحة رئيسية، إذا كانت لديكم أنماط CSS 148 00:07:04,430 --> 00:07:08,450 نفسها عبر ملفات متعددة، ستكون سخيفة وغير فعّالة لنسخها 149 00:07:08,450 --> 00:07:11,730 ولصقها مرارًا وتكرارًا بينما يمكنكم استبعادها هكذا. 150 00:07:11,730 --> 00:07:14,090 وفي النهاية، نظرنا في JavaScript، آخر مرة، 151 00:07:14,090 --> 00:07:16,460 لغة برمجة أخرى وهي متشابهة للغاية 152 00:07:16,460 --> 00:07:18,254 عند رؤيتها، للوهلة الأولى على الأقل. 153 00:07:18,254 --> 00:07:20,420 لكنها في الواقع تتخلص من الكثير من آلام الصداع ذات المستوى 154 00:07:20,420 --> 00:07:22,990 المنخفض مثل المؤشرات وعناوين الذاكرة والتي 155 00:07:22,990 --> 00:07:24,740 عانينا منها في الأسابيع الأخيرة. 156 00:07:24,740 --> 00:07:27,230 لكن الأهم هو كيف قمنا باستخدامها. 157 00:07:27,230 --> 00:07:31,460 إذن يمكنكم التفكير في صفحة ويب مثل هذه بمجرد تحميلها بواسطة المتصفح الخاص بكم 158 00:07:31,460 --> 00:07:32,887 كبنية شجرة فقط. 159 00:07:32,887 --> 00:07:35,720 فكروا في ما قمنا به في أسابيع مناقشتنا لبنية البيانات 160 00:07:35,720 --> 00:07:40,580 وكل هذه العُقد في الشجرة التي رأيناها في JavaScript التي يمكن معالجتها. 161 00:07:40,580 --> 00:07:43,040 وعبر هذا المبدأ البسيط جدًا، نكتب 162 00:07:43,040 --> 00:07:47,990 التعليمة البرمجية التي تقوم بتعديل هذه الشجرة الموجودة في ذاكرة المتصفح، 163 00:07:47,990 --> 00:07:51,380 وهذا يعني أنه يمكنكم إنشاء أشياء ديناميكية أكثر مثل Gmail وFacebook 164 00:07:51,380 --> 00:07:53,880 وأي عدد من مواقع الويب التي تتغير باستمرار. 165 00:07:53,880 --> 00:07:55,754 لم تقوموا بهذا بعد في مجموعة المشاكل. 166 00:07:55,754 --> 00:07:59,330 لقد قمتم فقط بإنشاء صفحات ويب ثابتة باستخدام HTML وCSS التي تم ترميزها بشكل ثابت. 167 00:07:59,330 --> 00:08:02,420 ولكن سنبدأ في الأسبوع المقبل، وبمجرد أن يتوفر لدينا بفضل هذا الأسبوع، مفردات 168 00:08:02,420 --> 00:08:04,910 python ستبدأون في جعل الأشياء ديناميكية أكثر 169 00:08:04,910 --> 00:08:07,670 ومن ثم إعادة تشغيل JavaScript، 170 00:08:07,670 --> 00:08:11,152 وجمع كل مؤشرات الترابط هذه معًا. 171 00:08:11,152 --> 00:08:14,360 ولكي نقوم بتضمين JavaScript، تذكرون، أننا استخدمنا علامة نص في الأعلى 172 00:08:14,360 --> 00:08:16,010 أو قمنا بطرحها من ملف. 173 00:08:16,010 --> 00:08:18,620 أو في بعض الحالات، إنه لمن الضروري أو المفيد 174 00:08:18,620 --> 00:08:22,550 أن ننقلها إلى أسفل الملف أو نطرحها هكذا، 175 00:08:22,550 --> 00:08:24,680 ولكن المزيد عن هذا لاحقًا. 176 00:08:24,680 --> 00:08:32,600 إذن هل هناك أي أسئلة بشأن الأسبوع الماضي أو على HTTP، أو HTML، أو CSS، أو TCP/IP؟ 177 00:08:32,600 --> 00:08:33,330 لا؟ 178 00:08:33,330 --> 00:08:35,530 لا شيء على الإطلاق؟ 179 00:08:35,530 --> 00:08:36,146 أوه، نعم؟ 180 00:08:36,146 --> 00:08:38,229 الجمهور: إذن في أي حالة ستقوم بوضع علامة 181 00:08:38,229 --> 00:08:41,225 النص في أعلى [INAUDIBLE] 182 00:08:41,225 --> 00:08:42,350 ديفيد مالان: سؤال جيد. 183 00:08:42,350 --> 00:08:44,808 إذن في أي الحالات سأضع علامة النص في الأعلى 184 00:08:44,808 --> 00:08:45,970 أم في الأسفل؟ 185 00:08:45,970 --> 00:08:49,090 إذا كانت التعليمة البرمجية التي تكتبها في JavaScript تعالج 186 00:08:49,090 --> 00:08:52,510 dOM، الشجرة التي كانت موجودة على الشاشة منذ قليل، 187 00:08:52,510 --> 00:08:56,860 المغزى هو أن هذه الشجرة تحتاج إلى أن تكون موجودة عندما يتم تنفيذ تعليمتك البرمجية. 188 00:08:56,860 --> 00:09:01,330 لذلك، إذا كانت لديك على سبيل المثال، تعليمة JavaScript البرمجية هنا في مقدمة صفحتك، 189 00:09:01,330 --> 00:09:04,570 لكن العُقد في الشجرة، العلامات التي تريد 190 00:09:04,570 --> 00:09:07,360 معالجتها لتغيير الأشياء إلى اللون الأحمر إلى الأخضر إلى الأزرق 191 00:09:07,360 --> 00:09:11,020 مثلما فعلنا في الأسبوع الماضي، أو جعل الأشياء فارغة، وموجودة في أسفل الصفحة هنا، 192 00:09:11,020 --> 00:09:14,590 لا يمكنك كتابة تعليمتك البرمجية هنا وجعلها تغير الأشياء في أسفل الصفحة 193 00:09:14,590 --> 00:09:16,780 هنا لأن الأمر يحدث دون ترتيب. 194 00:09:16,780 --> 00:09:20,110 إذن تبدو متشابهة جوهريًا للغة C حيث يجب أن تحدث الأشياء بالترتيب الصحيح، 195 00:09:20,110 --> 00:09:22,120 إذا أردتم تغيير شيء ما في الأسفل هنا، 196 00:09:22,120 --> 00:09:25,480 تحتاج تعليمتكم البرمجية إلى أن تكون هنا على الأقل، 197 00:09:25,480 --> 00:09:28,430 أو تحتاج إلى استخدام بعض التقنيات الأفضل لقول، 198 00:09:28,430 --> 00:09:31,120 سأقوم بكتابة تعليمتي البرمجية في الأعلى هنا ولكن انتظروا بضع ثوانٍ 199 00:09:31,120 --> 00:09:34,124 قبل تنفيذ ذلك حتى يتم تحميل صفحة الويب بأكملها. 200 00:09:34,124 --> 00:09:36,790 إذن بالنسبة لمعظم الأمثلة التي ألقينا نظرة عليها، لم يكن هذا الأمر يمثل مشكلة. 201 00:09:36,790 --> 00:09:39,460 لكننا سنعود إلى هذا ربما قريبًا. 202 00:09:39,460 --> 00:09:42,100 حسنًا، إذن دعونا الآن نتبع النهج نفسه 203 00:09:42,100 --> 00:09:45,419 الذي قمنا به آخر مرة لتقديم لغة واحدة باستخدام طريقة أخرى. 204 00:09:45,419 --> 00:09:48,460 ستتذكرون، بالطبع، أننا بدأنا الفصل الدراسي بأكمله بسكراتش 205 00:09:48,460 --> 00:09:51,010 وبعد بضعة أسابيع انتقلنا إلى لغة C. وقمنا الأسبوع الماضي 206 00:09:51,010 --> 00:09:52,780 ببعض المقارنات مع JavaScript. 207 00:09:52,780 --> 00:09:54,820 دعونا نفعل الشيء نفسه باختصار مع Python 208 00:09:54,820 --> 00:09:57,790 ولكن بعد ذلك، نقضي وقتًا أطول على لوحة المفاتيح لنقارن بين اللغتين لرؤية 209 00:09:57,790 --> 00:10:00,430 ما هو الاختلاف بينهما في الواقع. 210 00:10:00,430 --> 00:10:02,350 إذن لماذا في لغة أخرى، مع ذلك، أولاً؟ 211 00:10:02,350 --> 00:10:07,900 لدينا سكراتش، ولغة C، وJavaScript، وPython، بخلاف HTML وCSS 212 00:10:07,900 --> 00:10:09,010 لأغراض مختلفة. 213 00:10:09,010 --> 00:10:11,890 على سبيل المثال، لماذا لدينا كل هذه اللغات بالفعل؟ 214 00:10:11,890 --> 00:10:16,030 لماذا لم يقرر البشر فقط، أن هذا كل شيء، نحن جميعًا نستخدم سكراتش؟ 215 00:10:16,030 --> 00:10:19,720 نستخدم جميعًا لغة C أو JavaScript أو Python؟ 216 00:10:19,720 --> 00:10:23,930 ما هو الحدس الذي من المحتمل، أن يكون وراء ذلك؟ 217 00:10:23,930 --> 00:10:27,450 لماذا يوجد عدد كبير من اللغات اللعينة هناك، بخلاف هذه اللغة؟ 218 00:10:27,450 --> 00:10:28,123 أجل؟ 219 00:10:28,123 --> 00:10:29,925 الجمهور: [INAUDIBLE] 220 00:10:29,925 --> 00:10:31,050 ديفيد مالان: قُل ذلك مجددًا؟ 221 00:10:31,050 --> 00:10:32,770 الجمهور: اللغات المختلفة مفيدة لأشياء مختلفة. 222 00:10:32,770 --> 00:10:34,540 ديفيد مالان: نعم، اللغات المختلفة مفيدة لأشياء مختلفة. 223 00:10:34,540 --> 00:10:36,850 وهذا من المحتمل أن يكون دون القول لشيء مثل سكراتش، أليس كذلك؟ 224 00:10:36,850 --> 00:10:37,570 إنه أمر مرئي جدًا. 225 00:10:37,570 --> 00:10:39,340 وبياني ومتحرك جدًا. 226 00:10:39,340 --> 00:10:41,122 يبدو منطقيًا أن قطع اللغز-- 227 00:10:41,122 --> 00:10:43,330 أو أن اللغة نفسها مبنية على قطع اللغز 228 00:10:43,330 --> 00:10:44,720 والسحب والإسقاط. 229 00:10:44,720 --> 00:10:47,410 إذن ربما يتم تخصيص اللغات لتطبيقات معينة. 230 00:10:47,410 --> 00:10:51,550 ولكن هل هذا صحيح بالنسبة للغة C، وPython، وJavaScript، 231 00:10:51,550 --> 00:10:54,490 وهي جميعًا لغات قائمة على النص سنراها؟ 232 00:10:54,490 --> 00:10:57,310 الجمهور: [INAUDIBLE] على سبيل المثال، هي 233 00:10:57,310 --> 00:10:58,730 مستويات مختلفة من التجريد. 234 00:10:58,730 --> 00:10:59,396 ديفيد مالان: حسنًا. 235 00:10:59,396 --> 00:11:01,007 مستويات مختلفة من التجريد. 236 00:11:01,007 --> 00:11:06,474 الجمهور: لغة C هي [INAUDIBLE] تتعامل بالفعل مع الكثير من الأشياء التي 237 00:11:06,474 --> 00:11:08,960 لا يجب أن تفكر فيها في Python-- 238 00:11:08,960 --> 00:11:10,166 ديفيد مالان: جيد. 239 00:11:10,166 --> 00:11:14,150 الجمهور: -- حيث يتم الاعتناء بهذه الأنواع من الأشياء من أجلك، 240 00:11:14,150 --> 00:11:18,134 مثل تخصيصات الذاكرة وهكذا. 241 00:11:18,134 --> 00:11:22,510 ولذا اعتمادًا على أي مستوى تجريد تريد العمل عليه 242 00:11:22,510 --> 00:11:24,554 وأي الأجزاء التي تريد معالجتها. 243 00:11:24,554 --> 00:11:25,470 ديفيد مالان: حسنًا، جيد. 244 00:11:25,470 --> 00:11:27,469 تبدو إعادتها إلى التجريد أمرًا منطقيًا. 245 00:11:27,469 --> 00:11:31,470 لدى لغة C، في الواقع، ذات المستوى المنخفض جدًا، حرفيًا القدرة على معالجة الذاكرة 246 00:11:31,470 --> 00:11:32,860 وعبر المؤشرات وما إلى ذلك. 247 00:11:32,860 --> 00:11:35,460 وهذا أمر عظيم لأنه يمكنك القيام بأي شيء تريده في الكمبيوتر. 248 00:11:35,460 --> 00:11:37,290 لكن يصاحبها خطر كبير وتكلفة كبيرة. 249 00:11:37,290 --> 00:11:39,060 السبب الأول، التكلفة هي وقت الشخص. 250 00:11:39,060 --> 00:11:41,940 والأمر مؤلم فقط لكتابة هذا النوع من التعليمة البرمجية أحيانًا. 251 00:11:41,940 --> 00:11:48,210 والثاني، أنها تُعد أيضًا مخاطرة كبيرة لأنه إذا ارتكبت خطأ ما، حتى لو كان خطأ بسيطًا، 252 00:11:48,210 --> 00:11:49,680 فقد يتعطل الكمبيوتر بأكمله. 253 00:11:49,680 --> 00:11:51,471 ونحن لم نرى أمثلة على ذلك، ولكن قد 254 00:11:51,471 --> 00:11:53,340 تقوموا بإنشاء تعليمتكم البرمجية بحيث تكون عُرضة لمتسلل 255 00:11:53,340 --> 00:11:56,274 إذا كان قادرًا أو كانت قادرة على استغلال خطأ متعلق بالذاكرة بطريقة ما 256 00:11:56,274 --> 00:11:59,190 وقراءة جميع كلمات المرور في برنامجكم، أو شيء من هذا القبيل. 257 00:11:59,190 --> 00:12:01,500 إذن تعد مقولة القوّة الوافرة تصحبها مسؤوليّة كبيرة 258 00:12:01,500 --> 00:12:03,630 شعار لغة C إلى حد ما في الأسفل هنا. 259 00:12:03,630 --> 00:12:07,142 لكن JavaScript التي رأيناها تتيح لنا القيام بأشياء على مستوى أعلى قليلاً. 260 00:12:07,142 --> 00:12:08,100 لم تكن هناك مؤشرات. 261 00:12:08,100 --> 00:12:08,910 لم تكن هناك ذاكرة. 262 00:12:08,910 --> 00:12:10,650 لم نتحدث عن أمور في ذلك المستوى. 263 00:12:10,650 --> 00:12:12,566 تحدثنا عن أشياء في مستوى الشجرة، 264 00:12:12,566 --> 00:12:16,902 dOM في الذاكرة وتغيير الألوان وموضع الأشياء على الشاشة. 265 00:12:16,902 --> 00:12:18,360 وهذا، في الواقع، مستوى أعلى. 266 00:12:18,360 --> 00:12:21,990 الآن، لا ترتكز Python بالضرورة على الويب. 267 00:12:21,990 --> 00:12:23,580 إنها أكثر من لغة متعددة الأغراض. 268 00:12:23,580 --> 00:12:26,310 يستخدم الأشخاص Python لكتابة برامج سطر الأوامر، 269 00:12:26,310 --> 00:12:29,480 مثلما سنفعل قريبًا، على لوحة المفاتيح، كما كنا نفعل باستخدام لغة C. 270 00:12:29,480 --> 00:12:31,230 يمكنكم أيضًا، على الرغم من ذلك، استخدامها، كما سنرى 271 00:12:31,230 --> 00:12:33,400 الأسبوع المقبل، لإنشاء لغات أخرى. 272 00:12:33,400 --> 00:12:35,820 إذن في الأسبوع المقبل سنكتب تعليمة برمجية في Python، 273 00:12:35,820 --> 00:12:39,990 اللغة التي نحن بصدد رؤيتها، لإنشاء لغة أخرى، HTML 274 00:12:39,990 --> 00:12:40,630 وCSS. 275 00:12:40,630 --> 00:12:44,430 ربما لاحظ البعض منكم في الصفحة الرئيسية أن لديكم بعض التكرار. 276 00:12:44,430 --> 00:12:46,770 ربما كانت لديكم علامات متشابهة أو بنية متشابهة، 277 00:12:46,770 --> 00:12:48,690 ربما قائمة متشابهة عبر الصفحات. 278 00:12:48,690 --> 00:12:51,120 ستتيح لنا Python واللغات الأخرى استبعاد 279 00:12:51,120 --> 00:12:53,760 ذلك وإنشاء تلك القواسم المشتركة بسهولة 280 00:12:53,760 --> 00:12:55,440 أكثر، ضمن أشياء أخرى كثيرة. 281 00:12:55,440 --> 00:12:58,560 وكما يمكن القول أنها أسهل وأسرع في الكتابة 282 00:12:58,560 --> 00:13:02,050 لأنها تأتي مع العديد من الميزات، كما سنرى قريبًا. 283 00:13:02,050 --> 00:13:03,180 إذن في الواقع-- أتعرفون ماذا؟ 284 00:13:03,180 --> 00:13:03,940 دعوني أقوم بهذا. 285 00:13:03,940 --> 00:13:07,570 دعوني أمضي قُدمًا وأفتح CS50 IDE. 286 00:13:07,570 --> 00:13:09,390 دعوني أمضي قدمًا وأقوم بإنشاء ملف جديد. 287 00:13:09,390 --> 00:13:11,330 وبدافع الفضول، من مجموعات المشاكل 288 00:13:11,330 --> 00:13:16,482 الأخيرة لديكم، ما الذي من المحتمل أن يكون ضمن أكثر البرامج صعوبة التي قمتم بكتابتها؟ 289 00:13:16,482 --> 00:13:17,197 الجمهور: الكراك. 290 00:13:17,197 --> 00:13:18,780 ديفيد مالان: حسنًا، كان الكراك فكرة جيدة. 291 00:13:18,780 --> 00:13:19,680 ماذا أيضًا؟ 292 00:13:19,680 --> 00:13:20,460 الجمهور: تغيير الحجم. 293 00:13:20,460 --> 00:13:21,570 ديفيد مالان: تغيير الحجم، الاسترداد. 294 00:13:21,570 --> 00:13:22,980 نعم، بالتأكيد التحليلات الجنائية. 295 00:13:22,980 --> 00:13:24,980 ومن المحتمل أن أشخاصًا آخرين قاموا بالاسترداد وتغيير الحجم. 296 00:13:24,980 --> 00:13:26,640 لذلك دعونا نقوم بتغيير الحجم، على سبيل المثال. 297 00:13:26,640 --> 00:13:30,750 إذن دعوني أمضي قدمًا وأكتب برنامجًا في ملف يُسمى resize.py للغة Python، 298 00:13:30,750 --> 00:13:35,790 بدلاً من لغة .C، ونرى إذا كان لا يمكننا قضاء، ماذا، بضع ساعات، يومين، 299 00:13:35,790 --> 00:13:38,220 كما فعلتم على الأرجح في لغة C، تنفيذ تغيير الحجم. 300 00:13:38,220 --> 00:13:40,270 حسنًا، دعوني أمضي قدمًا وأقوم بذلك. 301 00:13:40,270 --> 00:13:42,360 سأمضي قدمًا و-- 302 00:13:42,360 --> 00:13:42,960 لنرى. 303 00:13:42,960 --> 00:13:46,570 أولاً سأقوم باستيراد بعض الميزات التي تأتي فقط مع Python. 304 00:13:46,570 --> 00:13:50,910 وسأمضي قدمًا وسأقول من sys قم باستيراد argv. 305 00:13:50,910 --> 00:13:54,730 وسأمضي قدمًا وأقوم أيضًا من pil باستيراد صورة. 306 00:13:54,730 --> 00:13:55,980 لا أعرف بعد ما هي هذه. 307 00:13:55,980 --> 00:13:57,450 سنقوم بتقسيم هذا في غضون لحظات. 308 00:13:57,450 --> 00:13:58,783 لكن بعد ذلك دعوني فقط أجري فحصًا. 309 00:13:58,783 --> 00:14:00,270 إذا كان طول -- 310 00:14:00,270 --> 00:14:04,770 بدلاً من ذلك، إذا كان طول argv لا يساوي 4، 311 00:14:04,770 --> 00:14:08,190 سأمضي قدمًا وأخرج من المستخدم وأقول إن استخدام هذا البرنامج 312 00:14:08,190 --> 00:14:12,840 هو Python resize.py وinfile، وoutfile. 313 00:14:12,840 --> 00:14:15,440 إذن على الرغم من أنه يجب أن يبدو بعض هذه مشفرًا في الوقت الحالي، 314 00:14:15,440 --> 00:14:18,110 هناك بعض القواسم المشتركة-- argv، تذكرون، من لغة C، 315 00:14:18,110 --> 00:14:21,450 وسلسلة الاستخدام هذه التي قمنا بطباعتها كلما حدث أي شيء خاطئ. 316 00:14:21,450 --> 00:14:23,640 هذا يبدو مشابهًا جدًا وبشكل جوهري للغة C. 317 00:14:23,640 --> 00:14:25,110 وما الذي فعلناه في تغيير الحجم؟ 318 00:14:25,110 --> 00:14:27,570 إذا قمتم بتنفيذ تغيير الحجم، مثل الإصدار الذي اعتدتم عليه بشكل أقل، 319 00:14:27,570 --> 00:14:31,590 لزيادة حجم الأشياء، فمن المحتمل أنكم قد أعلنتم عن متغير مثل n 320 00:14:31,590 --> 00:14:33,240 ويساوي sys-- 321 00:14:33,240 --> 00:14:36,940 أو بالأحرى، argv قوس واحد للوصول إليه. 322 00:14:36,940 --> 00:14:39,580 سأمضي قدمًا وأقوم بتحويل ذلك أو صب ذلك إلى int. 323 00:14:39,580 --> 00:14:43,669 من المحتمل أنه كان لديكم متغير infile الذي يمنح الوصول إلى argv 2. 324 00:14:43,669 --> 00:14:46,710 من المحتمل أنه كان لديكم متغير outfile الذي يمنح الوصول إلى argv 3، 325 00:14:46,710 --> 00:14:47,820 وهكذا. 326 00:14:47,820 --> 00:14:49,740 وتبين أنه في Python، أتعرفون ماذا؟ 327 00:14:49,740 --> 00:14:53,280 يمكنني بالفعل استخدام مكتبة، التعليمة البرمجية التي كتبها أشخاص آخرون. 328 00:14:53,280 --> 00:14:56,580 دعوني أنتقل إلى متغير يُسمى inimage، مثل infile. 329 00:14:56,580 --> 00:14:58,290 هذا هو inimage الخاص بي. 330 00:14:58,290 --> 00:15:01,200 وسيساوي image.open لأنني 331 00:15:01,200 --> 00:15:03,040 أريد فتح هذا الشيء الذي يُسمى infile. 332 00:15:03,040 --> 00:15:04,650 ومن ثم العرض-- 333 00:15:04,650 --> 00:15:07,230 دعوني أحصل على عرض وطول الصورة الموجودة 334 00:15:07,230 --> 00:15:09,840 عن طريق كتابة inimage.size. 335 00:15:09,840 --> 00:15:12,960 ومن ثم دعوني أمضي قدمًا وأقوم بإنشاء صورة جديدة-- سأطلق عليها، outimage-- 336 00:15:12,960 --> 00:15:17,520 والتي ستساوي inimage الذي يستدعي دالة تغيير الحجم 337 00:15:17,520 --> 00:15:22,210 والقيام بكتابة العرض ضرب n، والذي يكون الرقم الذي ربما كتبه الشخص، 338 00:15:22,210 --> 00:15:26,220 والطول ضرب n، والذي يكون الرقم الذي كتبه الشخص. 339 00:15:26,220 --> 00:15:29,970 ثم دعوني أمضي قدمًا وأحفظ outfile على النحو التالي. 340 00:15:29,970 --> 00:15:32,520 Outfile، حسنًا. 341 00:15:32,520 --> 00:15:33,840 تم. 342 00:15:33,840 --> 00:15:37,460 مجموعة المشاكل الثالثة. 343 00:15:37,460 --> 00:15:39,660 مفاجأة. 344 00:15:39,660 --> 00:15:43,280 حسنًا، هي مثيرة حقًا أو مثبطة للهمم جدًا، جدًا، ربما. 345 00:15:43,280 --> 00:15:45,630 إذن، وباستخدام اللغة الصحيحة، كما تقولون، هل يمكنكم 346 00:15:45,630 --> 00:15:48,660 حل المشاكل بسهولة أكثر. 347 00:15:48,660 --> 00:15:51,210 الآن، أنا مخادع قليلاً لأنني أيضًا 348 00:15:51,210 --> 00:15:52,680 استفدت مما يُطلق عليها مكتبة. 349 00:15:52,680 --> 00:15:54,809 ووصلنا إلى هذه في لغة C. وبدون شك 350 00:15:54,809 --> 00:15:56,850 يمكننا أن نبحث بشكل أعمق على شبكة الإنترنت 351 00:15:56,850 --> 00:16:02,010 في التعليمة البرمجية الأخرى المتاحة للأشخاص الآخرين ومن المحتمل أن نجد مكتبة لملفات الصورة النقطية. 352 00:16:02,010 --> 00:16:05,840 ولكن لاحظوا أننا لا نتعامل مع الحشو الآن. 353 00:16:05,840 --> 00:16:07,330 لا نتعامل مع المصفوفات. 354 00:16:07,330 --> 00:16:11,560 لا نتعامل مع الذاكرة لأنني استخدم الأداة المناسبة لهذه المهمة. 355 00:16:11,560 --> 00:16:13,740 وإذا كتبتُ هذاه التعليمة البرمجية بشكل صحيح-- ودعوني 356 00:16:13,740 --> 00:16:16,440 أنتقل لأتأكد أنني لم أرتكب أي أخطاء مطبعية. 357 00:16:16,440 --> 00:16:20,280 دعوني أمضي قدمًا هنا وأحصل لنفسي على نسخة 358 00:16:20,280 --> 00:16:23,200 من الوجه المبتسم، الذي أحضرته معي. 359 00:16:23,200 --> 00:16:25,420 إذن تلك كانت الصورة المصغرة من الأسبوع الماضي. 360 00:16:25,420 --> 00:16:27,128 دعوني أمضي قُدمًا وأفتح هذا في IDE. 361 00:16:27,128 --> 00:16:28,770 الوجه المبتسم، فائق الصغر. 362 00:16:28,770 --> 00:16:30,330 فقط بضع وحدات بكسل هناك. 363 00:16:30,330 --> 00:16:33,840 ودعوني أمضي قدمًا الآن وأشغل Python، وسنرى السبب في غضون لحظات، 364 00:16:33,840 --> 00:16:34,860 تغير حجمها. 365 00:16:34,860 --> 00:16:40,680 ودعونا نزيد هذا بعامل 10، ونزيد الوجه المبتسم، ونُسميه out.bmp. 366 00:16:40,680 --> 00:16:45,960 الآن دعوني أمضي قدمًا وأفتح out.bmp و ها هو ذا، يبدو أن الأمر نجح بالفعل. 367 00:16:45,960 --> 00:16:47,250 صحيح، لا توجد ألوان غير تقليدية. 368 00:16:47,250 --> 00:16:49,080 لا توجد أحجام غريبة. 369 00:16:49,080 --> 00:16:49,810 لا يوجد حشو. 370 00:16:49,810 --> 00:16:51,330 لا يوجد حشو لجميع الأشياء. 371 00:16:51,330 --> 00:16:53,070 إنها الآن Python فقط. 372 00:16:53,070 --> 00:16:56,010 لذلك ربما يمكنكم جمع بعض المنطق لما يجري هنا. 373 00:16:56,010 --> 00:16:59,250 لكن بعضها بالتأكيد يجب أن يكون منطقيًا وربما يبدو سحريًا. 374 00:16:59,250 --> 00:17:02,130 لذلك دعونا نستخدم اليوم تقسيم هذا وتقدير ليس فقط 375 00:17:02,130 --> 00:17:04,650 ما يمكنكم القيام به باستخدام لغة أخرى مثل Python، 376 00:17:04,650 --> 00:17:07,079 ولكن كيف هو متشابه ومختلف وكيف تم بناؤه 377 00:17:07,079 --> 00:17:11,120 في الواقع على شيء مثل لغة C. لذلك دعونا نجري بعض المقارنات أولاً 378 00:17:11,120 --> 00:17:13,619 حتى يمكننا أن نرى أنه ليس امتداد كبير لتقديم 379 00:17:13,619 --> 00:17:15,552 لغة أخرى بسرعة حتى الآن. 380 00:17:15,552 --> 00:17:18,510 إذن تذكرون أنه في سكراتش إذا أردنا تعيين متغير، مثل عدّاد، 381 00:17:18,510 --> 00:17:20,940 إلى الصفر، فيمكنكم ببساطة فعل شيء من هذا القبيل، 382 00:17:20,940 --> 00:17:22,470 لتعيينه يساوي صفر على اليسار. 383 00:17:22,470 --> 00:17:24,810 في لغة C، وسنقوم بالشيء نفسه هنا على اليمين. 384 00:17:24,810 --> 00:17:27,609 في JavaScript، بدا هذا مختلفًا بعض الشيء بدلاً من ذلك. 385 00:17:27,609 --> 00:17:29,670 ما الذي قمنا به في JavaScript؟ 386 00:17:29,670 --> 00:17:33,600 نعم، استخدمنا يدع بدلاً من ذلك لأننا لم نحدد بشكل واضح النوع. 387 00:17:33,600 --> 00:17:37,560 لكننا بحاجة إلى إخبار الكمبيوتر، دعني أحصل على هذا المتغير الذي يُسمى عدّاد. 388 00:17:37,560 --> 00:17:41,310 في Python، سيكون الأمر كذلك. 389 00:17:41,310 --> 00:17:43,500 إذن لقد تخلصنا من النوع. 390 00:17:43,500 --> 00:17:46,850 لقد تخلصنا من ذكر يدع أو كلمة رئيسية أخرى. 391 00:17:46,850 --> 00:17:50,880 ولقد تخلصنا من-- من المحتمل وبشكل يبعث على الرضى-- 392 00:17:50,880 --> 00:17:52,440 اختفت الفاصلات المنقوطة. 393 00:17:52,440 --> 00:17:53,580 لا مزيد من الفاصلات المنقوطة. 394 00:17:53,580 --> 00:17:56,890 ولا مزيد من الأقواس المتعرجة بالطريقة التي رأيتموها حتى الآن. 395 00:17:56,890 --> 00:17:59,285 إذن كانت هذه لغة C، وJavaScript، والآن Python. 396 00:17:59,285 --> 00:18:00,660 إذن ماذا عن شيء كهذا؟ 397 00:18:00,660 --> 00:18:03,407 في سكراتش، إذا أردتم زيادة العدّاد بمقدار واحد، 398 00:18:03,407 --> 00:18:04,740 ستستخدمون كتلة مثل هذه. 399 00:18:04,740 --> 00:18:07,200 في لغة C، سنفعل الشىء نفسه على اليمين هنا في التعليمة البرمجية. 400 00:18:07,200 --> 00:18:09,450 في JavaScript، هل تبدو مختلفة على اليمين؟ 401 00:18:09,450 --> 00:18:13,290 402 00:18:13,290 --> 00:18:14,670 لا. 403 00:18:14,670 --> 00:18:16,410 لم تسنح لكم فرصة استخدام هذا بعد. 404 00:18:16,410 --> 00:18:20,640 ولكن كانت JavaScript إحدى أنواع عمليات الكشف عن JavaScript أيضًا. 405 00:18:20,640 --> 00:18:21,960 كانت متطابقة. 406 00:18:21,960 --> 00:18:24,930 شيء من هذا القبيل، على الرغم من ذلك، هو Python. 407 00:18:24,930 --> 00:18:26,100 لذا هي نفسها تقريبًا. 408 00:18:26,100 --> 00:18:27,683 لكنني تخلصت من الفاصلة المنقوطة. 409 00:18:27,683 --> 00:18:29,370 لكن المنطق هو نفسه بالضبط-- 410 00:18:29,370 --> 00:18:32,760 تعيين العدّاد على اليسار يساوي أيًا كان على اليمين بالإضافة إلى قيمة 411 00:18:32,760 --> 00:18:33,720 إضافية واحدة. 412 00:18:33,720 --> 00:18:34,660 ماذا عن هذا؟ 413 00:18:34,660 --> 00:18:38,040 كان لهذا أي تأثير في لغة C؟ 414 00:18:38,040 --> 00:18:39,160 زيادة المتغير. 415 00:18:39,160 --> 00:18:40,540 إذن هذا بالضبط الشيء نفسه. 416 00:18:40,540 --> 00:18:43,796 إنه تدوين شديد الاقتضاب جيد لإنشاء عدّاد يساوي 417 00:18:43,796 --> 00:18:46,170 عدّاد زائد 1، وكتابته أمر ممل قليلاً. 418 00:18:46,170 --> 00:18:48,300 كانت لدينا الصيغة نفسها في JavaScript. 419 00:18:48,300 --> 00:18:51,284 وربما يمكنكم التخمين في Python، ما هي الكيفية التي ستبدو عليها؟ 420 00:18:51,284 --> 00:18:52,700 الجمهور: الشيء نفسه دون-- 421 00:18:52,700 --> 00:18:54,850 ديفيد مالان: الشيء نفسه ناقص الفاصلة المنقوطة. 422 00:18:54,850 --> 00:18:56,320 نمط جميل جدًا حتى الآن. 423 00:18:56,320 --> 00:18:58,880 تصبح اللغات فقط مهذبة ومهذبة، إذا صح التعبير. 424 00:18:58,880 --> 00:19:01,160 في لغة C، تذكرون أنه يمكننا فقط إنشاء زائد زائد، 425 00:19:01,160 --> 00:19:04,310 وهي خدعة أخرى لتشغيل العملية نفسها تلقائيًا. 426 00:19:04,310 --> 00:19:06,440 تتيح صيغة JavaScrip الأمر نفسه. 427 00:19:06,440 --> 00:19:09,740 وإذا كنتم أعجبتكم حقًا تلك الصيغة، فلا يمكنني عرض شريحة Python لكم. 428 00:19:09,740 --> 00:19:10,430 غير موجودة. 429 00:19:10,430 --> 00:19:11,750 لم تعد قادرة على إنشاء زائد زائد. 430 00:19:11,750 --> 00:19:13,160 لذلك نحن ندفع الثمن. 431 00:19:13,160 --> 00:19:15,620 لم يقم مؤلف Python بتضمين ذلك في اللغة. 432 00:19:15,620 --> 00:19:16,250 لكن لا مشكلة. 433 00:19:16,250 --> 00:19:18,830 لدينا على الأقل هذه، وهي ليست مروعة للغاية. 434 00:19:18,830 --> 00:19:20,680 إذن ما الذي ألقينا نظرة عليه أيضًا في المرة الأخيرة؟ 435 00:19:20,680 --> 00:19:23,780 وحالة إذا كهذه، لمقارنة إذا كان x أقل من y، 436 00:19:23,780 --> 00:19:25,310 في لغة C تبدو هكذا. 437 00:19:25,310 --> 00:19:27,920 في JavaScript تبدو مثل هذا الشيء نفسه. 438 00:19:27,920 --> 00:19:31,740 في Python، تبدو هكذا. 439 00:19:31,740 --> 00:19:34,460 لذا اختفت الأقواس المتعرجة. 440 00:19:34,460 --> 00:19:36,050 تمت إضافة نقطتين. 441 00:19:36,050 --> 00:19:40,380 وما لم تروه بعد هو أن المسافة البادئة ستكون مهمة. 442 00:19:40,380 --> 00:19:43,370 لذلك أي منكم كان يتعامل مع style50 على نحو سريع وغير دقيق 443 00:19:43,370 --> 00:19:46,080 وكما رأينا في ساعات العمل، جميع تعليماتكم البرمجية، 444 00:19:46,080 --> 00:19:48,288 ومع ذلك فإن العديد من السطور التي قمتم بكتابتها لأي سبب من الأسباب 445 00:19:48,288 --> 00:19:50,970 تتم محاذاتها جميعًا على اليسار ولم تتم إزاحة أي شيء في الواقع. 446 00:19:50,970 --> 00:19:52,678 الآن لن تسمح Python بذلك. 447 00:19:52,678 --> 00:19:55,180 تتطلب Python مسافة بادئة من أجل المنطق. 448 00:19:55,180 --> 00:19:57,680 إذن هذه في الواقع ميزة نمطية للغة. 449 00:19:57,680 --> 00:20:02,000 إنها تجبركم على اعتماد أمور نمطية مرئية جيدة لأن التعليمة البرمجية 450 00:20:02,000 --> 00:20:04,520 لن يتم تشغيلها فقط إذا لم تضع المسافات البادئة بشكل صحيح. 451 00:20:04,520 --> 00:20:07,070 إذن أي شيء سيحدث إذا كان x أقل من y 452 00:20:07,070 --> 00:20:11,100 وتحتاج إلى إزاحته، لنقل، أربع مسافات أسفل تلك النقطتين. 453 00:20:11,100 --> 00:20:12,080 ماذا أيضًا قد رأيناه؟ 454 00:20:12,080 --> 00:20:14,630 في لغة C أو في سكراتش كانت لدينا هذه الكتلة لـ if وكتل أخرى. 455 00:20:14,630 --> 00:20:16,460 في لغة C تبدو هكذا. 456 00:20:16,460 --> 00:20:18,170 في JavaScript تبدو هكذا. 457 00:20:18,170 --> 00:20:21,890 في Python، ستبدو هكذا، وإن كانت باستخدام مسافة بادئة 458 00:20:21,890 --> 00:20:23,126 أسفل كل علامات النقطتين تلك. 459 00:20:23,126 --> 00:20:23,750 ماذا عن هذا؟ 460 00:20:23,750 --> 00:20:27,260 عندما كان لدينا مفترق طرق ثلاثي الاتجاهات-- ماذا لو أخرى، ماذا لو أخرى-- 461 00:20:27,260 --> 00:20:28,970 في لغة C يبدو الأمر هكذا. 462 00:20:28,970 --> 00:20:30,440 بدت JavaScript نفسها. 463 00:20:30,440 --> 00:20:32,880 في Python، تبدو غير تقليدية قليلاً. 464 00:20:32,880 --> 00:20:34,130 ستبدو هكذا-- 465 00:20:34,130 --> 00:20:36,670 ولكن ثلاث علامات نقطتين، هذه المرة علامتين. 466 00:20:36,670 --> 00:20:37,170 ماذا أيضًا؟ 467 00:20:37,170 --> 00:20:41,480 ألقينا نظرة على التكرارت الحلقية الدائمة في سكراتش، وفي لغة C، وفي JavaScript. 468 00:20:41,480 --> 00:20:45,950 يمكنكم استخدام الصيغة نفسها بالضبط في Python، تقريبا الشيء نفسه. 469 00:20:45,950 --> 00:20:48,320 اختفت الأقواس المتعرجة، وتمت إضافة النقطتين. 470 00:20:48,320 --> 00:20:52,580 والخدعة الطفيفة، إذا لاحظتم ذلك، صحيح وخاطئ 471 00:20:52,580 --> 00:20:54,440 أصبحت الآن أسماء مناسبة جديدة، إذا صح التعبير. 472 00:20:54,440 --> 00:20:56,960 وتعد كتابة حرف T كبير حرف F كبير أمرًا ضروريًا. 473 00:20:56,960 --> 00:20:57,930 ماذا عن التكرار الحلقي؟ 474 00:20:57,930 --> 00:21:00,870 إذن في سكراتش، يمكننا القول بسهولة، كرّر هذا 50 مرة. 475 00:21:00,870 --> 00:21:03,410 C وJavaScript دقيقتان قليلاً حيث يتعين 476 00:21:03,410 --> 00:21:05,810 عليكم التهيئة والزيادة والتحقق. 477 00:21:05,810 --> 00:21:08,060 تتخذ C وJavaScript النهج نفسه، 478 00:21:08,060 --> 00:21:11,450 على الرغم من أننا بالطبع نستخدم let في JavaScript بدلاً من int. 479 00:21:11,450 --> 00:21:15,470 Python أكثر إيجازًا قليلاً على الرغم من أنها أقل وضوحًا قليلاً 480 00:21:15,470 --> 00:21:16,880 خطوة بخطوة. 481 00:21:16,880 --> 00:21:17,960 تفعلون هذا فقط. 482 00:21:17,960 --> 00:21:23,270 إن i في نطاق 50 هو طريقة لقول ابدأ التكرار في 0، 483 00:21:23,270 --> 00:21:25,970 احسب على طول الطريق ما يصل إلى ولكن لا يتضمن 50، 484 00:21:25,970 --> 00:21:28,260 وبالتالي يتيح لكم نطاق القيم. 485 00:21:28,260 --> 00:21:30,770 إذن هذه هي الطريقة التي ربما الأكثر غرابة 486 00:21:30,770 --> 00:21:33,620 حتى الآن، ولكنها ما تزال أكثر إيجازًا في الكتابة. 487 00:21:33,620 --> 00:21:37,250 إذن في لغة C، كان لدينا العديد من أنواع البيانات-- bool، char، double، float، int، long، 488 00:21:37,250 --> 00:21:37,965 سلسلة-- 489 00:21:37,965 --> 00:21:40,340 آخر هذه الأنواع، بالطبع، من مكتبة CS50. 490 00:21:40,340 --> 00:21:42,048 وهناك أنواع أخرى يمكنكم استخدامها في لغة C، 491 00:21:42,048 --> 00:21:44,810 كما قد تتذكرون، من مجموعة المشاكل 3، ربما. 492 00:21:44,810 --> 00:21:47,790 في Python، سنقوم بتقصير هذه القائمة، على الأقل في البداية، 493 00:21:47,790 --> 00:21:48,850 لأنواع البيانات هذه فقط. 494 00:21:48,850 --> 00:21:52,730 في Python، سيكون لدينا قيم منطقية bools لصحيح وخاطئ، وfloats لأرقام حقيقية، 495 00:21:52,730 --> 00:21:56,410 وints لأعداد صحيحة، ومن ثم strs لسلاسل. 496 00:21:56,410 --> 00:21:59,864 فقط بصورة موجزة أكثر قليلاً، ولكنها موجودة بالفعل. str في Python 497 00:21:59,864 --> 00:22:00,530 شيء حقيقي. 498 00:22:00,530 --> 00:22:02,569 إنها ليست إضافة CS50. 499 00:22:02,569 --> 00:22:04,610 هناك أنواع بيانات أخرى تأتي مع Python. 500 00:22:04,610 --> 00:22:07,400 في الواقع، بهذا تصبح اللغة قوية. 501 00:22:07,400 --> 00:22:11,196 ومَن جاء منكم من خلفية Java أو لغة ++C، 502 00:22:11,196 --> 00:22:13,070 مجموعتكم الفرعية من الأشخاص الذين قاموا بالبرمجة من قبل، 503 00:22:13,070 --> 00:22:16,310 لديكم المزيد من الميزات في Python فقط مثلما تفعلون في تلك اللغات الأخرى 504 00:22:16,310 --> 00:22:21,770 التي لم تكن لدينا في C. في Python، لديكم قواميس أو جداول علامات التجزئة. 505 00:22:21,770 --> 00:22:25,640 لديكم قوائم، وهي عبارة عن مصفوفات، ولكن يمكنكم تغيير حجمها تلقائيًا. 506 00:22:25,640 --> 00:22:28,330 لا يتعين عليكم اتخاذ قرار مسبقًا عن مدى كبر أو صغر حجمها. 507 00:22:28,330 --> 00:22:31,520 النطاق الذي رأيناه للتو، إنه نطاق القيم، مثل 50 منها، 508 00:22:31,520 --> 00:22:33,050 تم تعيينه بالمعنى الرياضي. 509 00:22:33,050 --> 00:22:35,600 إنه مجموعة من الأشياء التي تضمن لك عدم وجود 510 00:22:35,600 --> 00:22:37,790 تكرارات في تلك المجموعة. 511 00:22:37,790 --> 00:22:40,820 ومن ثم الصف وهو مزيج من الأشياء التي تشبه الرياضيات إلى حد ما 512 00:22:40,820 --> 00:22:43,760 عندما يكون لديكم x فاصلة y أو خط الطول فاصلة خط العرض. 513 00:22:43,760 --> 00:22:46,490 في أي وقت لديكم أزواج أو ثلاثيات أو الكثير من الأشياء، 514 00:22:46,490 --> 00:22:47,870 هذه تُسمى بالصفوف. 515 00:22:47,870 --> 00:22:51,410 وهي شائعة في دورات الرياضيات وفصول نظرية CS للمستوى الأعلى، 516 00:22:51,410 --> 00:22:52,320 أيضًا. 517 00:22:52,320 --> 00:22:54,500 ولكننا أعطيناكم، في هذا الأسبوع الأول على الأقل 518 00:22:54,500 --> 00:22:57,410 نظرتنا في Python، وعدد قليل من الدالات من CS50، 519 00:22:57,410 --> 00:23:01,610 من بينها getFloat ،getInt، وgetString، والتي تتصرف بالضبط 520 00:23:01,610 --> 00:23:02,729 مثل نظرائها في C. 521 00:23:02,729 --> 00:23:04,520 وهذا سيتيح لنا فقط البدء 522 00:23:04,520 --> 00:23:08,180 بكتابة تعليمة برمجية بطريقة تذكرنا جدًا بما فعلناه في الأسابيع القليلة الماضية. 523 00:23:08,180 --> 00:23:10,370 ولكن دعونا نفكر في الشيء الذي سيتغير 524 00:23:10,370 --> 00:23:12,740 بينما نحن على وشك البدء بكتابة البرامج الخاصة بنا. 525 00:23:12,740 --> 00:23:16,130 في لغة C، عندما كنت تريدون استخدام مكتبة CS50، وقمتم بالطبع 526 00:23:16,130 --> 00:23:17,690 بتضمين ملف الرأس الخاص بها. 527 00:23:17,690 --> 00:23:20,990 ستغير هذه الصيغة في Python حيث كنتم في هذا الأسبوع الأول 528 00:23:20,990 --> 00:23:24,410 تريدون استخدام مكتبة CS50، ستقولون بدلاً من ذلك 529 00:23:24,410 --> 00:23:29,060 من CS50 قم بالاستيراد ثم قائمة من الدالات مفصولة بفاصلة 530 00:23:29,060 --> 00:23:31,560 تريدون استيرادها أو استخدامها في تعليمتكم البرمجية. 531 00:23:31,560 --> 00:23:32,810 إذن، هذا الأمر دقيق أكثر قليلاً. 532 00:23:32,810 --> 00:23:34,940 لا تقول هذه الصيغة أعطني كل شيء. 533 00:23:34,940 --> 00:23:36,650 أعطني هذا، وهذا، وهذا الشيء الآخر. 534 00:23:36,650 --> 00:23:39,762 وإذا كنتم ترغبون في استخدام قائمة واحدة أو أكثر، فيمكنكم فقط الفصل بينها بفواصل. 535 00:23:39,762 --> 00:23:42,470 وكملاحظة جانبية، وعلى وجه التحديد هؤلاء الذين رأوا Python من قبل، 536 00:23:42,470 --> 00:23:44,270 هناك طرق أخرى للقيام بذلك. 537 00:23:44,270 --> 00:23:45,740 توجد عدة نُهج. 538 00:23:45,740 --> 00:23:48,299 من المحتمل أن هذا هو الشيء الأنسب للمقارنة لأغراضنا اليوم. 539 00:23:48,299 --> 00:23:50,090 ما الذي ستعرفونه أيضًا؟ 540 00:23:50,090 --> 00:23:52,880 في لغة C يجب أن تحولوا تعليمتكم البرمجية برمجيًا. 541 00:23:52,880 --> 00:23:54,690 وقمتم بذلك باستخدام clang، هكذا. 542 00:23:54,690 --> 00:23:57,320 ومن ثم قمتم بتشغيل البرنامج باستخدام نقطة خط مائل مرحبًا. 543 00:23:57,320 --> 00:23:59,270 أو بشكل بسيط أكثر، كتبتكم مرحبًا، وبعد ذلك 544 00:23:59,270 --> 00:24:02,630 كنا سنكتشف الأمر من أجلكم في IDE أو sandbox أو lab. 545 00:24:02,630 --> 00:24:05,602 في Python، ستقومون بتخطي خطوة التحويل البرمجي. 546 00:24:05,602 --> 00:24:07,310 عندما تريدون تشغيل برنامج في Python، 547 00:24:07,310 --> 00:24:09,600 ستقومون فقط بما فعلته بسرعة من قبل. 548 00:24:09,600 --> 00:24:13,400 ستقومون فقط بتشغيل الأمر Python ثم اسم الملف 549 00:24:13,400 --> 00:24:14,660 الذي تريدون تشغيله. 550 00:24:14,660 --> 00:24:16,580 والسبب وراء هذا هو على النحو التالي. 551 00:24:16,580 --> 00:24:20,750 في عالم لغة C، تذكرون أنه كان لدينا هذا النوع من العملية المستمرة 552 00:24:20,750 --> 00:24:24,530 حيث لدينا تعليمة المصدر البرمجية الخاصة بنا كمدخل. 553 00:24:24,530 --> 00:24:29,750 ثم أردنا الوصول إلى المغزى من التعليمة البرمجية الآلية، الأصفار والواحدات. 554 00:24:29,750 --> 00:24:32,990 وما الذي كان يحول بين تعليمة المصدر البرمجية والتعليمة البرمجية الآلية، 555 00:24:32,990 --> 00:24:34,430 فقط ليتضح الأمر؟ 556 00:24:34,430 --> 00:24:36,420 أي عملية؟ 557 00:24:36,420 --> 00:24:37,640 نعم، إذن التحويل البرمجي. 558 00:24:37,640 --> 00:24:40,730 إذن كان لدينا محول برمجي في المنتصف هدفه في الحياة 559 00:24:40,730 --> 00:24:44,180 بحسب التعريف هو ترجمة لغة إلى أخرى. 560 00:24:44,180 --> 00:24:47,510 ويصادف أنه بلغة تشبه اللغة الإنجليزية إلى لغة تشبه الكمبيوتر 561 00:24:47,510 --> 00:24:50,790 ولكن المحول البرمجي هو مصطلح عام فقط يحول شيء واحد إلى آخر. 562 00:24:50,790 --> 00:24:53,750 إذن بدا خط الاتصال هذا للغة C هكذا. 563 00:24:53,750 --> 00:24:56,570 وهذا هو السبب في أنه يجب أن تشغلوا Clang بشكل صريح، أو make. 564 00:24:56,570 --> 00:24:58,730 يجب أن تزيحوا عملية man في المنتصف 565 00:24:58,730 --> 00:25:01,370 لتحويل اللغة إلى شيء يفهمه الكمبيوتر. 566 00:25:01,370 --> 00:25:06,980 لم يتم تحويل Python ولغات أخرى برمجيًا بالطريقة نفسها تمامًا. 567 00:25:06,980 --> 00:25:09,020 يتم قولها بشكل عام ليتم تفسيرها، 568 00:25:09,020 --> 00:25:11,600 حيث لن تقوموا بتحويلها برمجيًا إلى أصفار وواحدات 569 00:25:11,600 --> 00:25:12,860 ومن ثم تشغيل البرنامج. 570 00:25:12,860 --> 00:25:17,330 يمكنكم بدلاً من ذلك تشغيل برنامج كتبه شخص آخر يُسمى Python. 571 00:25:17,330 --> 00:25:20,006 وهذا البرنامج، بحسب تعريفه، هو مترجم. 572 00:25:20,006 --> 00:25:22,130 وهدف هذا المترجم في الحياة، كما تشير 573 00:25:22,130 --> 00:25:25,580 الكلمة، هو قراءة تعليمتك البرمجية من الأعلى إلى الأسفل، من اليسار إلى اليمين، 574 00:25:25,580 --> 00:25:27,380 ويقوم بالضبط بما تمليه عليه لفعله، 575 00:25:27,380 --> 00:25:32,420 خطوة بخطوة بخطوة، دون القيام بعمل مسبق لتحويل الأشياء 576 00:25:32,420 --> 00:25:33,260 إلى أصفار وواحدات. 577 00:25:33,260 --> 00:25:35,840 إذن في عالم البشر، إذا كنت أتحدث اللغة الإنجليزية وهناك شخص ما 578 00:25:35,840 --> 00:25:38,450 يتحدث اللغة الإسبانية وكل منا لا يتحدث لغة الآخر، 579 00:25:38,450 --> 00:25:41,720 قد نضع شخص ثالث بيننا، بالطبع شخص يعمل مترجمًا. 580 00:25:41,720 --> 00:25:43,070 الدور متشابه جدًا. 581 00:25:43,070 --> 00:25:45,112 يستمع المترجم إليّ ثم يترجم 582 00:25:45,112 --> 00:25:46,903 هذا لشيء يفهمه الكمبيوتر. 583 00:25:46,903 --> 00:25:48,760 ولكن لن يصبح أصفار وواحدات. 584 00:25:48,760 --> 00:25:51,010 إنه ينتقل فقط مباشرة من واحد إلى الآخر. 585 00:25:51,010 --> 00:25:53,380 إذن الاختلاف هنا في Python هو أنك ستظل 586 00:25:53,380 --> 00:25:56,560 تكتب تعليمة المصدر البرمجية ، مثلما فعلتُ بسرعة لتغيير الحجم. 587 00:25:56,560 --> 00:25:59,380 وفي نهاية المطاف، نحن فعلاً نريد تحويلها 588 00:25:59,380 --> 00:26:04,260 إلى برنامج يُسمى مترجم. 589 00:26:04,260 --> 00:26:07,320 ولذا تبدو الخطوة المثالية مثل هذه. 590 00:26:07,320 --> 00:26:11,400 ولكن كملاحظة جانبية، Python هي لغة متطورة للغاية. 591 00:26:11,400 --> 00:26:14,220 وعلى الرغم من أن لدينا رفاهية تشغيلها فقط 592 00:26:14,220 --> 00:26:18,570 باستخدام خطوة واحدة بدلاً من هاتين الخطوتين، هناك في الواقع، كملاحظة جانبية، 593 00:26:18,570 --> 00:26:21,470 بعض السحر غير الظاهر. 594 00:26:21,470 --> 00:26:25,500 وبداعي الفضول، هناك في الواقع، لأسباب تتعلق بالأداء، 595 00:26:25,500 --> 00:26:28,920 محول برمجي تم إنشاؤه في Python يقوم بالفعل بتحويلها إلى شيء ما 596 00:26:28,920 --> 00:26:31,500 وسيط يُسمى التعليمة البرمجية المكونة من وحدات البايت. 597 00:26:31,500 --> 00:26:34,120 والتعليمة البرمجية المكونة من وحدات البايت هي ما تم تفسيره بالفعل. 598 00:26:34,120 --> 00:26:38,370 وهذا هو السبب في أن Python، على الرغم من أنها قد تكون أبطأ من لغة C 599 00:26:38,370 --> 00:26:42,090 في بعض المهام لأنكم لن تنتقلوا إلى الأصفار والواحدات ذات المستوى المنخفض، 600 00:26:42,090 --> 00:26:45,260 يمكن استخدمها في الواقع في تطبيقات الأعمال التجارية ومواقع الويب الشائعة 601 00:26:45,260 --> 00:26:45,760 وما شابه ذلك. 602 00:26:45,760 --> 00:26:47,590 وهذا الأمر لم ينجح بشكل جيد. 603 00:26:47,590 --> 00:26:51,000 ولذا يمكن أن تكون ذات أداء عالٍ، أيضًا. 604 00:26:51,000 --> 00:26:52,990 ولكن المزيد حول ذلك بعد قليل. 605 00:26:52,990 --> 00:26:55,860 إذن من هذا المنطلق، إذا كانت هذه هي الاختلافات ليس فقط 606 00:26:55,860 --> 00:26:58,410 من الناحية البنائية ولكن أيضًا من الناحية الآلية، دعونا نمضي قدمًا 607 00:26:58,410 --> 00:27:00,420 ونكتب برنامجًا بالفعل. 608 00:27:00,420 --> 00:27:03,127 لذا دعوني أمضي قُدمًا وأنتقل إلى IDE. 609 00:27:03,127 --> 00:27:04,710 دعوني أغلق الأمثلة السابقة. 610 00:27:04,710 --> 00:27:07,680 ودعونا نبدأ بشكل بسيط أكثر لأن تغيير حجم كان أمرًا صعبًا في كل مرة. 611 00:27:07,680 --> 00:27:10,680 دعوني أمضي قدمًا وأقوم بإنشاء ملف جديد يُسمى hello.py. 612 00:27:10,680 --> 00:27:13,140 وبدلاً من كتابة هذا البرنامج بلغة C، 613 00:27:13,140 --> 00:27:15,420 دعوني أمضي قدمًا وأكتب فقط مرحبًا بالعالم. 614 00:27:15,420 --> 00:27:17,190 لذا دعونا نمضي قُدمًا ونفعل هذا. 615 00:27:17,190 --> 00:27:19,200 اطبع مرحبًا بالعالم. 616 00:27:19,200 --> 00:27:20,220 تم. 617 00:27:20,220 --> 00:27:23,830 هذا هو أول برامجي في Python، وحقًا أول برنامج أقوم به في Python، 618 00:27:23,830 --> 00:27:26,380 ليس شيء حيوي بتغيير الحجم إلى حد ما. 619 00:27:26,380 --> 00:27:32,955 إذن ما هو الشيء غير الموجود في هذا الملف والذي كان في شيء مثل hello.c؟ 620 00:27:32,955 --> 00:27:35,490 لا توجد دالة main الضرورية هنا. 621 00:27:35,490 --> 00:27:37,150 ما هو الشيء غير الموجود أيضًا؟ 622 00:27:37,150 --> 00:27:38,100 الجمهور: Printf. 623 00:27:38,100 --> 00:27:39,530 ديفيد مالان: لم يذكر printf. 624 00:27:39,530 --> 00:27:41,946 إنها طباعة بدلاً من ذلك، وهي مراعية للشخص بشكل أكبر قليلاً. 625 00:27:41,946 --> 00:27:42,780 الجمهور: المكتبات. 626 00:27:42,780 --> 00:27:45,320 DAVID MALAN: لم تذكر ملفات الرأس أو المكتبات 627 00:27:45,320 --> 00:27:46,350 في الجزء العلوي من الملف. 628 00:27:46,350 --> 00:27:48,760 لقد تعمقتُ فقط بشكل صحيح وانتقلتُ إليه. 629 00:27:48,760 --> 00:27:49,260 نعم؟ 630 00:27:49,260 --> 00:27:50,160 الجمهور: لا توجد فاصلات منقوطة. 631 00:27:50,160 --> 00:27:51,360 ديفيد مالان: لا توجد فاصلات منقوطة. 632 00:27:51,360 --> 00:27:51,859 ماذا أيضًا؟ 633 00:27:51,859 --> 00:27:55,340 634 00:27:55,340 --> 00:27:55,840 ماذا أيضًا؟ 635 00:27:55,840 --> 00:27:56,340 نعم؟ 636 00:27:56,340 --> 00:27:57,584 الجمهور: لا يوجد خط مائل عكسي n. 637 00:27:57,584 --> 00:27:58,750 ديفيد مالان: لا يوجد خط مائل عكسي n. 638 00:27:58,750 --> 00:28:00,940 من المحتمل أنني-- لم أقم بتشغيلها بعد، ولكن أعتقد 639 00:28:00,940 --> 00:28:02,980 أنني سأحصل على هذا مجانًا هذه المرة باستخدام Python. 640 00:28:02,980 --> 00:28:04,271 لا يجب أن أكون صريحًا جدًا. 641 00:28:04,271 --> 00:28:06,612 هل كانت هناك يد أخرى مرفوعة هنا؟ 642 00:28:06,612 --> 00:28:08,470 الجمهور: لا يوجد حرف f في printf. 643 00:28:08,470 --> 00:28:10,696 ديفيد مالان: لا يوجد حرف f في printf، نعم. 644 00:28:10,696 --> 00:28:11,320 شيء آخر؟ 645 00:28:11,320 --> 00:28:14,140 646 00:28:14,140 --> 00:28:15,222 لا توجد مسافة بادئة. 647 00:28:15,222 --> 00:28:16,930 ومع ذلك لكي نكون منصفين، هناك سطر واحد فقط. 648 00:28:16,930 --> 00:28:18,054 لكن لا توجد مسافة بادئة. 649 00:28:18,054 --> 00:28:18,730 هذا عادل. 650 00:28:18,730 --> 00:28:19,430 هذا عادل. 651 00:28:19,430 --> 00:28:21,070 لا توجد أقواس متعرجة، أيضًا. 652 00:28:21,070 --> 00:28:22,180 لم يذكر int. 653 00:28:22,180 --> 00:28:23,350 لم يذكر void. 654 00:28:23,350 --> 00:28:24,640 أعني، يا إلهي. 655 00:28:24,640 --> 00:28:26,890 لماذا لم نفعل هذا فقط في المرة الأخيرة؟ 656 00:28:26,890 --> 00:28:29,290 ولهذا السبب تتطور اللغات. 657 00:28:29,290 --> 00:28:32,560 أدرك الأشخاص منذ سنوات، يا إلهي، لغة C تخدمنا بشكل جيد. 658 00:28:32,560 --> 00:28:35,380 بمجرد أن أفهم المؤشرات والصيغة، حسنًا، لقد فهمت. 659 00:28:35,380 --> 00:28:38,590 لكن يا إلهي، إن كتابة حتى أبسط البرامج أمر ممل 660 00:28:38,590 --> 00:28:42,910 لأنه يجب أن أكتب علامة التجزئة بما في ذلك، standard io.h، int main void، أعني، 661 00:28:42,910 --> 00:28:46,060 كل هذا التجاوز البنائي الذي يحول فقط دون قيامك 662 00:28:46,060 --> 00:28:48,520 بالعمل الذي تهتم به، وهو في أبسط أشكاله 663 00:28:48,520 --> 00:28:50,650 هنا حيث يقوم فقط بطباعة مرحبًا بالعالم. 664 00:28:50,650 --> 00:28:53,890 إذن Python والعديد من اللغات الحديثة-- من بينها، 665 00:28:53,890 --> 00:28:56,110 Ruby وPHP ولغات أخرى-- 666 00:28:56,110 --> 00:28:58,960 فقط تتخلص من العديد من هذا التجاوز حتى يمكنكم البدء 667 00:28:58,960 --> 00:29:01,280 بالعمل بسرعة أكبر على الفور. 668 00:29:01,280 --> 00:29:02,790 إذن كيف يمكنني المضي قدمًا وتشغيل هذا؟ 669 00:29:02,790 --> 00:29:06,570 في لغة C، تذكروت أنني قمتُ بإنشاء نقطة خط مائل hello.py. 670 00:29:06,570 --> 00:29:09,070 لكننا قلنا للتو منذ لحظة أن هذا ليس هو النهج الصحيح. 671 00:29:09,070 --> 00:29:11,780 كيف يمكنني المضي وتشغيل هذا البرنامج؟ 672 00:29:11,780 --> 00:29:16,450 نعم، إذن حرفيًَا أقوم بتشغيل برنامج يُسمى بالصدفة Python نفسها. 673 00:29:16,450 --> 00:29:17,450 هذا هو المترجم. 674 00:29:17,450 --> 00:29:20,780 هذا هو الرجل في المنتصف بيني وبين صديقي الذي يتحدث اللغة الإسبانية 675 00:29:20,780 --> 00:29:25,280 ويجب عليه فقط تحويل hello.py إلى أي جهاز كمبيوتر يفهمه 676 00:29:25,280 --> 00:29:26,150 بنفسه. 677 00:29:26,150 --> 00:29:28,070 إذن لدينا هناك، بالفعل، مرحبًا بالعالم. 678 00:29:28,070 --> 00:29:30,830 وكما تلاحظون، لا يوجد خط مائل عكسي n على تعليمتي البرمجية. 679 00:29:30,830 --> 00:29:33,210 لكنني أحرك المؤشر إلى السطر الجديد. 680 00:29:33,210 --> 00:29:34,880 حيث قررت Python للتو، أتعلمون ماذا؟ 681 00:29:34,880 --> 00:29:37,884 إنه لمن الشائع للغاية أن تكون هناك سطورًا جديدة، دعونا فقط نضيف هذه بشكل افتراضي. 682 00:29:37,884 --> 00:29:39,800 تعلمون، سيكون الثمن الذي سندفعه 683 00:29:39,800 --> 00:29:41,480 مزعجًا قليلاً للتخلص منها. 684 00:29:41,480 --> 00:29:43,569 لكننا سنرى ذلك بعد قليل، أيضًا. 685 00:29:43,569 --> 00:29:44,360 إذن إنها مجرد مقايضة. 686 00:29:44,360 --> 00:29:45,693 حسنًا، لنقم بشيء واحد آخر. 687 00:29:45,693 --> 00:29:48,110 وهو أبسط البرامج الممكنة فقط. 688 00:29:48,110 --> 00:29:51,350 دعونا نمضي قدمًا ونقوم، لنقل، بشيء أفضل قليلاً 689 00:29:51,350 --> 00:29:54,720 يتيح لنا أن نفعل شيء أكثر من ذلك. 690 00:29:54,720 --> 00:29:58,310 إذن دعونا نمضي قدمًا، لنقل، ولا نقارن هذا 691 00:29:58,310 --> 00:30:00,960 فقط، ولكن دعونا في الواقع نحصل على بعض مدخلات المستخدم. 692 00:30:00,960 --> 00:30:03,020 إذن بالنسبة لمدخل المستخدم، توجد بعض الطرق للقيام بذلك. 693 00:30:03,020 --> 00:30:06,144 سنقوم بذلك بطريقة CS50 في البداية، لكن هذه هي عجلات التدريب هذا الأسبوع 694 00:30:06,144 --> 00:30:08,510 التي سنستخدمها لأسبوع واحد فقط قبل أن نزيلها، 695 00:30:08,510 --> 00:30:11,600 فقط للانتقال من لغة C إلى Python. 696 00:30:11,600 --> 00:30:13,670 دعوني أمضي قدمًا واستدعي هذه السلسلة zero.py 697 00:30:13,670 --> 00:30:15,200 لأني أتعامل مع السلاسل. 698 00:30:15,200 --> 00:30:18,860 ودعوني أمضي قدمًا وأكتب s ليتم منحي متغير. 699 00:30:18,860 --> 00:30:19,770 Get string. 700 00:30:19,770 --> 00:30:23,060 دعوني أطلب من الشخص اسمه أو اسمها هكذا، ومن ثم دعوني أمضي قدمًا 701 00:30:23,060 --> 00:30:24,860 وأقول مرحبًا. 702 00:30:24,860 --> 00:30:28,070 وكذا وكذا، والآن يجب فقط أن أفكر في كيفية طباعة اسمه. 703 00:30:28,070 --> 00:30:30,590 وفي Python، يمكنني في الواقع القيام بذلك فقط. 704 00:30:30,590 --> 00:30:32,240 لا أحتاج إلى كتابة النسبة المئوية s. 705 00:30:32,240 --> 00:30:36,710 ولا أحتاج إلى وضع واحدة أخرى-- أو، لا أحتاج إلى وضع فاصلة ثانية هنا. 706 00:30:36,710 --> 00:30:39,170 ولكن يمكنني فقط القيام بهذا، وهو أبسط قليلاً. 707 00:30:39,170 --> 00:30:40,880 وهذا غير صحيح. 708 00:30:40,880 --> 00:30:43,902 أنا لا أفعل ما أنصح به. 709 00:30:43,902 --> 00:30:44,610 التخلص من f. 710 00:30:44,610 --> 00:30:46,530 فقط طباعة ما كنتَ تريد طباعته، حقًا. 711 00:30:46,530 --> 00:30:49,590 إذن s، لاحظوا، من الواضح أنه متغير لأنني أقوم بتعيين 712 00:30:49,590 --> 00:30:51,330 قيمة له من اليمين إلى اليسار. 713 00:30:51,330 --> 00:30:53,760 ولكن لاحظوا أنني لم أحدد النوع. 714 00:30:53,760 --> 00:30:57,216 إذن، تحتوي Python على نوع. str التي تحدثنا عنها وهي سلسلة مُعادلة. 715 00:30:57,216 --> 00:30:58,590 لكن لا يجب أن تذكرها. 716 00:30:58,590 --> 00:31:01,589 Python، مثل JavaScript، ستحددها، حتى دون وجود كلمة رئيسية 717 00:31:01,589 --> 00:31:02,160 مثل let. 718 00:31:02,160 --> 00:31:05,330 لكنني أحتاج إلى إضافة شيء واحد. 719 00:31:05,330 --> 00:31:05,845 ما هو؟ 720 00:31:05,845 --> 00:31:07,636 الجمهور: تحتاج إلى استيراد getString؟ 721 00:31:07,636 --> 00:31:09,630 ديفيد مالان: نعم، getString هي شيء خاص بدورة CS50. 722 00:31:09,630 --> 00:31:12,570 وسنستخدمها فقط لمدة أسبوع، ولكنني أحتاج إلى استيرادها. 723 00:31:12,570 --> 00:31:15,990 والصيغة للقيام بهذا باستخدامها هي لقول، من مكتبة CS50، 724 00:31:15,990 --> 00:31:17,940 قم باستيراد دالة تُسمى getstring. 725 00:31:17,940 --> 00:31:20,160 ولا أحتاج إلى استيراد المزيد مع الفواصل. 726 00:31:20,160 --> 00:31:21,800 هذه تكفي لهذا البرنامج. 727 00:31:21,800 --> 00:31:23,060 أجل. 728 00:31:23,060 --> 00:31:25,510 الجمهور: هل تريد أن-- 729 00:31:25,510 --> 00:31:29,920 بدلاً من قول مرحبًا اسمك، هل تريد الحصول أولاً على الاسم الذي يقول 730 00:31:29,920 --> 00:31:32,370 [INAUDIBLE]؟ 731 00:31:32,370 --> 00:31:35,524 أنت لا تشير إلى مكان وجود الخطأ [INAUDIBLE].. 732 00:31:35,524 --> 00:31:37,940 ديفيد مالان: بالتأكيد، دعوني أعود مجددًا إلى هذا خلال ثانية واحدة. 733 00:31:37,940 --> 00:31:40,520 دعونا نشغل هذا البرنامج أولاً لإثبات أنه يقوم 734 00:31:40,520 --> 00:31:42,810 بالفعل بما رأينا أنه يقوم به في الأسبوع الماضي. 735 00:31:42,810 --> 00:31:50,987 ودعوني أمضي قدمًا هنا وأكتب هذه المرة Python من سلسلة 0. 736 00:31:50,987 --> 00:31:53,070 دعوني أمضي قدمًا وهي فقط في انتظار اسمي. 737 00:31:53,070 --> 00:31:54,090 إذن سأكتب ديفيد. 738 00:31:54,090 --> 00:31:54,740 مرحبًا، ديفيد. 739 00:31:54,740 --> 00:31:57,800 ولكن كما كنتم تقترحون، ماذا إذا أردت تغيير موضع هذا؟ 740 00:31:57,800 --> 00:32:01,310 حسنًا، لنفترض أنني أردت قول اسم الشخص وبعد ذلك 741 00:32:01,310 --> 00:32:06,629 شيء مثل مرحبًا لأنني متحمس بالفعل لرؤيته، بدلاً من ذلك. 742 00:32:06,629 --> 00:32:07,670 دعونا نرى ما يفعله هذا. 743 00:32:07,670 --> 00:32:10,430 دعوني أمضي قدمًا الآن وأشغّل Python من سلسلة 0. 744 00:32:10,430 --> 00:32:12,050 أكتب اسمي. 745 00:32:12,050 --> 00:32:14,630 وأعتقد أنه تقريبًا ما قصدتموه. 746 00:32:14,630 --> 00:32:16,040 لكن هناك خطأ-- 747 00:32:16,040 --> 00:32:17,330 خطأ جمالي، على الأقل. 748 00:32:17,330 --> 00:32:19,850 إذن يبدو أنه باستخدام دالة طباعة Python لا 749 00:32:19,850 --> 00:32:21,970 تحتاجون إلى استخدام العنصر النائب مثل النسبة المئوية s. 750 00:32:21,970 --> 00:32:27,680 ولكن يبدو أنه من المفترض أن تضيف مساحة من أجلك بعد كل شيء 751 00:32:27,680 --> 00:32:31,190 تمر به كمدخل لطباعتها. 752 00:32:31,190 --> 00:32:33,380 لذا لاحظوا كم وسيطة تستهلكها الطباعة 753 00:32:33,380 --> 00:32:37,070 وفقًا لهذا الجزء المظلل؟ 754 00:32:37,070 --> 00:32:39,680 كم عدد الوسطيات التي يمكن أن تستنتجوها؟ 755 00:32:39,680 --> 00:32:42,672 الجمهور: S مسافة ومن ثم الشيء. 756 00:32:42,672 --> 00:32:43,380 ديفيد ج. مالان: وسيطتان؟ 757 00:32:43,380 --> 00:32:44,370 نعم، إذن وسيطتان. 758 00:32:44,370 --> 00:32:48,292 وسيطة واحدة هي s، فاصلة، والثانية هي ما تم تظليله باللون الأخضر هنا. 759 00:32:48,292 --> 00:32:51,000 نعم، توجد فاصلة ثانية هناك، ولكنها داخل السلسلة. 760 00:32:51,000 --> 00:32:53,487 إذن مثلما هو الحال في C، وهذا نوع من أنواع جذب الانتباه. 761 00:32:53,487 --> 00:32:54,820 توجد وسيطتان هنا فقط. 762 00:32:54,820 --> 00:32:56,730 ولكن يبدو أن دالة الطباعة-- وستعرفون ذلك 763 00:32:56,730 --> 00:33:00,180 من خلال قراءة هذه الوثائق-- إذا مررتم في وسيطتين أو ثلاث أو أكثر، 764 00:33:00,180 --> 00:33:01,230 إنها تطبعها جميعًا. 765 00:33:01,230 --> 00:33:02,856 لكن تفصل بينها بمسافة واحدة. 766 00:33:02,856 --> 00:33:03,938 إذن هذا ليس صحيحًا تمامًا. 767 00:33:03,938 --> 00:33:06,450 إذن هذا دافع كبير بالفعل لإزالة ذلك. 768 00:33:06,450 --> 00:33:10,030 إذا كنت أريد بالفعل تحسين هذا البرنامج وتنظيمه قليلاً، 769 00:33:10,030 --> 00:33:11,940 دعوني أفعل ذلك في الإصدار الأول هنا. 770 00:33:11,940 --> 00:33:15,660 دعوني أقوم بإنشاء ملف آخر يُطلق عليه، على سبيل المثال، string1.py. 771 00:33:15,660 --> 00:33:17,850 دعوني أبدأ من حيث بدأنا منذ قليل. 772 00:33:17,850 --> 00:33:21,430 ودعوني أستخدم عنصر نائب بالفعل يشبه C. لذا إذا أردتُ كتابة، 773 00:33:21,430 --> 00:33:27,150 على سبيل المثال، مرحبًا ذاك وذاك، يتضح أنه يمكنك بالفعل قول، مرحبًا Python، 774 00:33:27,150 --> 00:33:30,540 ضَع متغيرًا يُسمى s هنا. 775 00:33:30,540 --> 00:33:34,920 ومع ذلك، إذا قمتُ بتشغيلها كما هي، ستصبح خطأ. 776 00:33:34,920 --> 00:33:36,460 لم يتم حلها تمامًا بعد. 777 00:33:36,460 --> 00:33:38,770 ولكن عندما أنقر فوق Enter الآن وأكتب اسمي-- 778 00:33:38,770 --> 00:33:41,040 حسنا، هذا يبدو بالفعل أمرًا غبيًا. 779 00:33:41,040 --> 00:33:45,660 لذا يبدو أنني بحاجة إلى إخبار Python بأن هذه السلسلة التي أمر بها، 780 00:33:45,660 --> 00:33:48,480 مرحبًا فاصلة ذاك وذاك، هي سلسلة منسقة. 781 00:33:48,480 --> 00:33:52,080 إنها سلسلة العنصر النائب التي يجب أن تتم بها بعض التغييرات. 782 00:33:52,080 --> 00:33:55,230 وهذا مشفر بشكل غريب بعض الشيء من الناحية البنائية في Python. 783 00:33:55,230 --> 00:34:01,050 لكن الطريقة التي تفعلون بها ذلك في Python هي أن تضعوا حرف f قبل السلسلة نفسها. 784 00:34:01,050 --> 00:34:04,020 لذا معذرة، لقد تخلصنا من f منذ لحظة. 785 00:34:04,020 --> 00:34:05,190 لذا نحن نسميها الطباعة فقط. 786 00:34:05,190 --> 00:34:07,230 نحن الآن نعيد استخدام f مختلفة هنا. 787 00:34:07,230 --> 00:34:09,270 وهذه صيغة تبدو غبية، في الحقيقة. 788 00:34:09,270 --> 00:34:12,270 ولكن هذه تعني فقط، مرحبًا Python، علامات الاقتباس المزدوجة التالية 789 00:34:12,270 --> 00:34:14,280 أو علامات الاقتباس المفردة التي على وشك أن تروها يجب 790 00:34:14,280 --> 00:34:16,199 أن تكون منسقة بطريقة خاصة. 791 00:34:16,199 --> 00:34:18,780 وهي حرفيًا ستنتقل إلى بداية السلسلة 792 00:34:18,780 --> 00:34:21,010 حتى على الرغم من أن ذلك يبدو أمرًا غريبًا في الحقيقة. 793 00:34:21,010 --> 00:34:24,409 لكن إذا أعدت الآن تشغيل سلسلة Python هذه وكتبتُ الآن اسمي، 794 00:34:24,409 --> 00:34:26,110 الآن إنها تقوم بالاستبدال. 795 00:34:26,110 --> 00:34:29,460 إذن يمكنني أن أغيرها بصورة مرنة أكثر وبشكل منطقي الآن 796 00:34:29,460 --> 00:34:33,150 وأقوم بشيء مثل مرحبًا لأنني الآن أمرُ بوسيطة واحدة 797 00:34:33,150 --> 00:34:35,230 ستنسقها الطباعة من أجلي. 798 00:34:35,230 --> 00:34:38,699 إذن عندما أكتب اسمي الآن، لن أحصل على هذه المسافة غير الضرورية. 799 00:34:38,699 --> 00:34:42,090 والآن أنا أتحكم بشكل كامل في تنسيق السلسلة. 800 00:34:42,090 --> 00:34:46,230 إذن تعرفون، خطوتان إلى الأمام إلى حد ما، ربما، خطوة واحدة إلى الخلف من الناحية البنائية. 801 00:34:46,230 --> 00:34:48,480 لكنها تتيح لنا أن نقوم بما نريد القيام به. 802 00:34:48,480 --> 00:34:50,230 يمكننا كتابة البرنامج نفسه باستخدام أعداد صحيحة 803 00:34:50,230 --> 00:34:52,469 وقيم كسرية باستخدام getInt وgetFloat. 804 00:34:52,469 --> 00:34:53,860 ستبدو الأمر نفسه بالضبط. 805 00:34:53,860 --> 00:34:57,330 لا تقلقوا بشأن النسبة المئوية s مقابل النسبة المئوية i مقابل النسبة المئوية f. 806 00:34:57,330 --> 00:35:01,440 أنتم تكتبون فقط اسم المتغير داخل تلك الأقواس المتعرجة. 807 00:35:01,440 --> 00:35:04,834 حسنًا، دعوني أمضي قدمًا وأقوم ببعض العمليات الحسابية بسرعة. 808 00:35:04,834 --> 00:35:06,000 دعوني أمضي قُدمًا وأقوم بذلك. 809 00:35:06,000 --> 00:35:07,680 دعوني أمضي قدمًا وأقوم بإنشاء ملف جديد. 810 00:35:07,680 --> 00:35:10,170 سنسمي هذا ints.py للأعداد الصحيحة. 811 00:35:10,170 --> 00:35:13,680 ودعوني أمضي قدمًا وأحصل على حق الوصول هذا إلى-- 812 00:35:13,680 --> 00:35:18,249 ماذا عن دالة أو طريقة getint الخاصة بمكتبة CS50 الموجودة. 813 00:35:18,249 --> 00:35:20,040 بعد ذلك دعوني أمضي قدمًا وأعلن عن متغير 814 00:35:20,040 --> 00:35:23,541 يُسمى X وأحصل على عدد صحيح من المستخدم وأطلب منه أو منها X فقط. 815 00:35:23,541 --> 00:35:25,290 ثم دعوني أمضي قدمًا وأقوم بالشيء نفسه 816 00:35:25,290 --> 00:35:27,594 وأحصل فقط على y منه، أيضًا. 817 00:35:27,594 --> 00:35:29,760 ومن ثم في الأسفل هنا، دعوني أقوم فقط ببعض العمليات الحسابية البسيطة. 818 00:35:29,760 --> 00:35:34,270 وقمنا بهذا في الأسبوع الأول عن طريق الطباعة على النحو التالي. 819 00:35:34,270 --> 00:35:38,220 دعوني أمضي قدمًا وأطبع فقط x زائد y يساوي-- 820 00:35:38,220 --> 00:35:42,090 والآن هذا هو الأمر الرائع في ميزة القوس المتعرج هذه. 821 00:35:42,090 --> 00:35:46,050 يمكنك بالفعل استخدام ليس فقط أسماء المتغيرات، 822 00:35:46,050 --> 00:35:48,180 ولكن يمكنك أيضًا القيام بعمليات بسيطة هناك، كذلك. 823 00:35:48,180 --> 00:35:52,434 يمكنني حرفيًا القيام بعملية حسابية داخل تلك الأقواس المتعرجة وطباعة تلك القيمة. 824 00:35:52,434 --> 00:35:55,600 لكن بالطبع، هذا سيقوم فقط حرفيًا بطباعة الأقواس المتعرجة. 825 00:35:55,600 --> 00:35:56,960 ماذا عليّ أن أضيف؟ 826 00:35:56,960 --> 00:35:58,560 نعم، لذا إنه يبدو غريبًا بعض الشيء. 827 00:35:58,560 --> 00:36:00,420 لكن هذا الآن سيحل هذه المشكلة. 828 00:36:00,420 --> 00:36:05,924 سيقوم حرفيًا بطباعة x زائد y يساوي أيًا كان المجموع الفعلي. 829 00:36:05,924 --> 00:36:07,840 الجمهور: مجرد متابعة، ما الذي تعنيه f؟ 830 00:36:07,840 --> 00:36:08,673 ديفيد ج. مالان: تنسيق. 831 00:36:08,673 --> 00:36:10,180 تنسيق السلسلة التالية من أجلي. 832 00:36:10,180 --> 00:36:11,060 سؤال جيد. 833 00:36:11,060 --> 00:36:14,900 دعونا نقوم قليلاً بالنسخ واللصق ولكن سنغير المُشغل هنا. 834 00:36:14,900 --> 00:36:19,520 إذن x ناقص y، أريد أن أرى كيف يبدو هذا. 835 00:36:19,520 --> 00:36:21,070 X، لنقل-- ماذا فعلنا آخر مرة؟ 836 00:36:21,070 --> 00:36:22,634 الضرب في y. 837 00:36:22,634 --> 00:36:23,800 أريد أن أقوم بتلك العملية الحسابية، أيضًا. 838 00:36:23,800 --> 00:36:26,420 يمكنني أن أقسّمها أيضًا. 839 00:36:26,420 --> 00:36:29,140 ومن ثم كان لدينا شيء واحد آخر، وهو نموذجي، 840 00:36:29,140 --> 00:36:31,900 أو عمليات حسابية نموذجية، وهي، تتذكرون، علامة النسبة المئوية. 841 00:36:31,900 --> 00:36:33,922 إذن من الناحية البنائية، إنها متطابقة في الشكل. 842 00:36:33,922 --> 00:36:36,880 نحن فقط نضيف تدوين القوس المتعرج هذا لدالة الطباعة 843 00:36:36,880 --> 00:36:37,630 الآن. 844 00:36:37,630 --> 00:36:38,838 دعوني أمضي قُدمًا وأشغل ذلك. 845 00:36:38,838 --> 00:36:40,390 Python من ints.py. 846 00:36:40,390 --> 00:36:44,710 ودعوني أمضي قدمًا وأقوم بكتابة واحد ولنقل اثنين. 847 00:36:44,710 --> 00:36:46,840 إذن 1 زائد 2 هو 3. 848 00:36:46,840 --> 00:36:48,610 1 ناقص 2 هو -1. 849 00:36:48,610 --> 00:36:50,430 1 ضرب 2 هو 2. 850 00:36:50,430 --> 00:36:53,280 1 مقسوم على 2 هو 0.5. 851 00:36:53,280 --> 00:36:57,700 ومن ثم 1 مقسوم على 2 ونأخذ الباقي 1. 852 00:36:57,700 --> 00:37:00,550 إذن أعتقد أن هذا يتحقق رياضيًا. 853 00:37:00,550 --> 00:37:03,235 لكن يجب أن تكونوا متفاجئين قليلاً من إحدى هذه النتائج. 854 00:37:03,235 --> 00:37:06,340 855 00:37:06,340 --> 00:37:07,090 كررها؟ 856 00:37:07,090 --> 00:37:08,560 الجمهور: حصلتَ على قيمة كسرية. 857 00:37:08,560 --> 00:37:10,184 ديفيد ج. مالان: نعم ،حصلتُ على قيمة كسرية. 858 00:37:10,184 --> 00:37:14,560 على سبيل المثال، يبدو أن Python نفسها قد أصلحت خللاً في C نفسها. 859 00:37:14,560 --> 00:37:20,420 ماذا حدث في C عندما قسمتَ 1، عدد صحيح، على 2، عدد صحيح، في C؟ 860 00:37:20,420 --> 00:37:21,670 ستحصل على عدد صحيح آخر. 861 00:37:21,670 --> 00:37:23,670 وما هو أقرب عدد صحيح يمكنك تمثيله 862 00:37:23,670 --> 00:37:26,174 ولا توجد فيه علامة عشرية؟ 863 00:37:26,174 --> 00:37:29,530 0، لأن C سوف تقتطع كل شيء بعد العلامة العشرية. 864 00:37:29,530 --> 00:37:32,220 وحتى الآن، يبدو أن Python قد أصلحت هذه المشكلة. 865 00:37:32,220 --> 00:37:34,340 وهذه في الواقع ظاهرة حديثة إلى حد ما. 866 00:37:34,340 --> 00:37:36,670 وهذا موضع نقاش كبير وقديم حول ما إذا كان 867 00:37:36,670 --> 00:37:40,900 يجب أن تحتفظ بالتعريف التاريخي للقسمة أم لا، وهو 868 00:37:40,900 --> 00:37:44,170 هي قسمة عامة، إذا جاز التعبير، أو يجب أن نجعلها قسمة حقيقة، 869 00:37:44,170 --> 00:37:45,910 مثلما تعلمنا جميعًا في المدرسة. 870 00:37:45,910 --> 00:37:50,230 اتخذت Python النهج الأخير وجعلت القسمة تعني القسمة، القسمة الحقيقية، 871 00:37:50,230 --> 00:37:52,459 حيث إذا قمتَ بقسمة عددين صحيحين ستظهر لك قيم كسرية. 872 00:37:52,459 --> 00:37:54,250 بالطبع، هذه هي المشكلة إذا أراد الأشخاص 873 00:37:54,250 --> 00:37:56,740 كتابة التعليمة البرمجية التي تفترض أنه سيتم اقتطاعها. 874 00:37:56,740 --> 00:37:59,350 يمكن أن يكون ذلك بمثابة ميزة قوية في الواقع. 875 00:37:59,350 --> 00:38:02,740 إذن يتضح أن، ولن تسنح لك فرص لاستخدام هذا كثيرًا، 876 00:38:02,740 --> 00:38:05,650 لكن التسوية في العالم كانت، حسنًا، إذا كنتم حقًا 877 00:38:05,650 --> 00:38:11,020 تريدون النهج القديم للقسمة في Python، سنعيده لكم. 878 00:38:11,020 --> 00:38:12,384 يجب أن تستخدموا خطين مائلين. 879 00:38:12,384 --> 00:38:15,050 لذا مجددًا، خطوة واحدة أخرى من هاتين الخطوتين إلى الأمام، خطوة واحدة الى الخلف. 880 00:38:15,050 --> 00:38:18,040 لكن إنها هناك، لذا يمكن حل المشاكل بالطريقة نفسها. 881 00:38:18,040 --> 00:38:22,080 وهذا، إذا قمتُ بحفظه وأعدتُ تشغيل التعليمية البرمجية نفسها، 1 و2، 882 00:38:22,080 --> 00:38:27,160 الآن حصلتُ على 0، تماما كما في C، وهو يمكن تطبيقه. 883 00:38:27,160 --> 00:38:29,410 دعونا نطرح الآن مثالاً آخر يحتوي على بعض الأرقام. 884 00:38:29,410 --> 00:38:32,520 ودعوني أمضي قدمًا وأسمي هذا floats.py. 885 00:38:32,520 --> 00:38:36,942 ودعوني أفعل الشيء نفسه، من CS50 قم باستيراد getFloat هذه المرة. 886 00:38:36,942 --> 00:38:38,650 لذا يمكنني التعامل مع قيم كسرية حقيقية. 887 00:38:38,650 --> 00:38:40,570 دعوني أعلن عن متغير × وأحصل على قيمة كسرية 888 00:38:40,570 --> 00:38:42,580 وسنطلب من المستخدم متغير x. 889 00:38:42,580 --> 00:38:45,842 ثم دعونا نمضي قدمًا ونحصل على قيم كسرية أخرى، وكما فعلنا من قبل، نسميها y. 890 00:38:45,842 --> 00:38:47,800 لكن هذه المرة، كلتاهما، في الواقع، قيمة كسرية. 891 00:38:47,800 --> 00:38:51,070 إذن دعوني أمضي قدمًا وأقوم بعملية حسابية، x زائد y يساوي z. 892 00:38:51,070 --> 00:38:52,660 دعوني أعطي نفسي متغير ثالث. 893 00:38:52,660 --> 00:38:55,480 ومن ثم دعوني فقط أمضي قدمًا وأقوم بطباعة رسالة متشابهة-- 894 00:38:55,480 --> 00:39:00,200 x مقسوم على y يساوي z. 895 00:39:00,200 --> 00:39:03,130 حسنًا، ودعوني أمضي قدمًا وأقوم بحفظ هذا، وأزيل ما بداخل نافذتي الطرفية، 896 00:39:03,130 --> 00:39:05,620 وأقوم بإنشاء Python من floats.py. 897 00:39:05,620 --> 00:39:08,270 1 مقسوم على 10 هذه المرة. 898 00:39:08,270 --> 00:39:09,700 وأحصل-- اللعنة، خطأ. 899 00:39:09,700 --> 00:39:11,270 كيف أقوم بحل تلك المشكلة؟ 900 00:39:11,270 --> 00:39:12,520 حسنًا، إذن مجرد f بسيط. 901 00:39:12,520 --> 00:39:13,570 لنجعلها سلسلة منسقة. 902 00:39:13,570 --> 00:39:14,330 ليس أمرًا صعبًا. 903 00:39:14,330 --> 00:39:16,610 إذن لنعيد تشغيل هذا، 1، 10. 904 00:39:16,610 --> 00:39:19,000 حسنًا، هوو، هوو. 905 00:39:19,000 --> 00:39:21,120 هذا أمر جديد. 906 00:39:21,120 --> 00:39:22,430 ما الذي يحدث هناك؟ 907 00:39:22,430 --> 00:39:27,180 908 00:39:27,180 --> 00:39:29,474 الجمهور: [INAUDIBLE] 909 00:39:29,474 --> 00:39:32,640 ديفيد ج. مالان: لقد حددت z في السطر أعلاه، وما هو تعليقك؟ 910 00:39:32,640 --> 00:39:33,806 الجمهور: لقد استخدمتَ x زائد y. 911 00:39:33,806 --> 00:39:36,220 ديفيد ج. مالان: لقد استخدمتُ x زائد y، لكنني أعتقد أنني-- 912 00:39:36,220 --> 00:39:37,330 أوه، انتظر، حسنًا. 913 00:39:37,330 --> 00:39:37,870 معذرة. 914 00:39:37,870 --> 00:39:41,760 دعونا-- حسنًا، حتى نتمكن من إصلاح ذلك. 915 00:39:41,760 --> 00:39:44,590 دعونا-- معذرة. 916 00:39:44,590 --> 00:39:45,900 هناك. 917 00:39:45,900 --> 00:39:48,450 حسنًا، إذن 1، 10. 918 00:39:48,450 --> 00:39:51,900 امم، ما زال خطأ. 919 00:39:51,900 --> 00:39:54,150 ملاحظة جيدة، شكرًا لك، على الرغم من ذلك. 920 00:39:54,150 --> 00:39:57,840 لماذا 1 زائد 2 يساوى 11-- 921 00:39:57,840 --> 00:40:01,210 أو 1 زائد 10 يساوى 11؟ 922 00:40:01,210 --> 00:40:01,961 أجل؟ 923 00:40:01,961 --> 00:40:03,700 الجمهور: [INAUDIBLE]. 924 00:40:03,700 --> 00:40:04,950 ديفيد ج. مالان: انتظروا، انتظروا، انتظروا. 925 00:40:04,950 --> 00:40:06,260 معذرة. 926 00:40:06,260 --> 00:40:08,100 الجمهور: [INAUDIBLE] 927 00:40:08,100 --> 00:40:10,410 [LAUGHTER] 928 00:40:10,410 --> 00:40:13,690 ديفيد ج. مالان: هذا يعيدني إلى وجهة نظري السابقة وهي كم أنا متعب. 929 00:40:13,690 --> 00:40:14,590 إذن هذا صحيح. 930 00:40:14,590 --> 00:40:19,460 إذن Python تقوم بالعملية الحسابة بشكل صحيح. 931 00:40:19,460 --> 00:40:21,760 لكن-- حسنًا، هذا أمر مروع. 932 00:40:21,760 --> 00:40:24,850 حسنًا، إذن الآن دعونا نقوم بالقسمة ونحاول 933 00:40:24,850 --> 00:40:28,690 نجعل النقطة أعتقد أنني قصدتُ في وقت متأخر من الليلة الماضية حيث إذا قسمتُ 1 934 00:40:28,690 --> 00:40:35,260 على 10، حسنًا، 1 مقسوم على 10، كما هو متوقع، هل ينجح الأمر هنا بالفعل. 935 00:40:35,260 --> 00:40:36,707 إذن 0.1، هذا صحيح. 936 00:40:36,707 --> 00:40:39,040 ولكن تذكرون في C-- دعوني أخرِج نفسي من هذا المأزق-- 937 00:40:39,040 --> 00:40:42,430 تذكرون في C ماذا حدث لو تعمقنا أكثر قليلاً 938 00:40:42,430 --> 00:40:44,750 ونظرنا قليلاً في النقطة العشرية الأولى. 939 00:40:44,750 --> 00:40:46,080 إذن كيف أقوم بفعل ذلك في Python؟ 940 00:40:46,080 --> 00:40:47,510 الأمر متشابه للغاية في الواقع. 941 00:40:47,510 --> 00:40:50,860 دعوني أمضي قدمًا وليس فقط أعرض بنفسي z لكن أمضى قدمًا 942 00:40:50,860 --> 00:40:54,970 وأطبعه، دعونا نقول، لموضعين عشريين هذه القيمة نفسها. 943 00:40:54,970 --> 00:40:56,170 الصيغة هنا غريبة. 944 00:40:56,170 --> 00:40:59,470 انها مختلفة عن C. لكنكم حرفيًا تأخذون المتغير الذي تريدون تنسيقه، 945 00:40:59,470 --> 00:41:02,380 وتضعون نقطتين ومن ثم نقطة-- 946 00:41:02,380 --> 00:41:03,880 لأنكم تريدون ضبط النقطة-- 947 00:41:03,880 --> 00:41:06,220 ومن ثم تريدون أن تقولوا شيئًا مثل 2f. 948 00:41:06,220 --> 00:41:09,670 لذا هذا يقول، مرحبًا، Python، قم بتنسيق المتغير 949 00:41:09,670 --> 00:41:13,657 الموجود على يسار النقطتين باستخدام نقطتين عشريتين. 950 00:41:13,657 --> 00:41:15,490 وبالمناسبة، إنها قيمة كسرية حقيقة. 951 00:41:15,490 --> 00:41:16,906 إذن f هذا له معنى مختلف. 952 00:41:16,906 --> 00:41:18,070 هذا هو f كما هو في قيمة كسرية. 953 00:41:18,070 --> 00:41:20,570 f على اليسار منسق. 954 00:41:20,570 --> 00:41:22,020 إذن دعوني أمضي قُدمًا وأشغل هذا. 955 00:41:22,020 --> 00:41:23,590 1 مقسوم على 10. 956 00:41:23,590 --> 00:41:25,220 وحسنًا، ما يزال الأمر جيد جدًا. 957 00:41:25,220 --> 00:41:28,870 إذن دعونا نقوم بذلك ربما ثلاثة مواضع عشرية، ونحفظ ذلك، ونعيد تشغيله. 958 00:41:28,870 --> 00:41:30,430 1 مقسوم على 10. 959 00:41:30,430 --> 00:41:31,490 ما يزال الأمر جيدة جدًا. 960 00:41:31,490 --> 00:41:33,040 دعونا نكون طموحين قليلاً. 961 00:41:33,040 --> 00:41:37,870 دعونا نقوم بها 50 موضع عشري، مقسوم على 10، واللعنة. 962 00:41:37,870 --> 00:41:40,690 لم تقم Python بحل تلك المشكلة الأساسية. 963 00:41:40,690 --> 00:41:42,400 إذن كيف نصف تلك المشكلة؟ 964 00:41:42,400 --> 00:41:45,590 965 00:41:45,590 --> 00:41:50,092 ما هي الكلمة الطنانة هنا لشرح أو حل تلك المشكلة؟ 966 00:41:50,092 --> 00:41:51,191 الجمهور: [INAUDIBLE] 967 00:41:51,191 --> 00:41:53,690 ديفيد ج. مالان: هذا هو تجاوز عدد صحيح، مرتبط في جوهره. 968 00:41:53,690 --> 00:41:55,610 يحدث تجاوز العدد الصحيح حرفيًا عندما 969 00:41:55,610 --> 00:41:58,580 تقومون بإضافات كثيرة ويتحول شيء ما من قيمة كبيرة 970 00:41:58,580 --> 00:42:01,160 إلى صغيرة أو حتى سالبة. 971 00:42:01,160 --> 00:42:01,984 متشابه في جوهره. 972 00:42:01,984 --> 00:42:02,484 أجل؟ 973 00:42:02,484 --> 00:42:08,175 الجمهور: [INAUDIBLE] 974 00:42:08,175 --> 00:42:08,925 ديفيد ج. مالان: أجل. 975 00:42:08,925 --> 00:42:12,320 إذا كنتم تريدون كمية غير محدودة من الدقة دائمًا، 976 00:42:12,320 --> 00:42:13,910 فتحتاجون إلى كمية غير محدودة من الذاكرة. 977 00:42:13,910 --> 00:42:16,730 ولا يحتوي Mac أو جهاز الكمبيوتر الشخصي أو الهاتف على كمية غير محدودة من الذاكرة. 978 00:42:16,730 --> 00:42:20,510 في مرحلة ما، يتم رسم خط في الرمل ويمكنكم أن تكونوا دقيقين للغاية فقط. 979 00:42:20,510 --> 00:42:24,230 ولذا كان عدم الدقة هو التناظر في عالم القيم الكسرية 980 00:42:24,230 --> 00:42:27,290 لتجاوز، تذكرون، حيث إذا كان لديكم فقط عدد غير محدود من وحدات البت 981 00:42:27,290 --> 00:42:29,060 يمكنكم القيام به بشكل جيد إلى نقطة ما. 982 00:42:29,060 --> 00:42:32,510 لكن في النهاية، قام جهاز الكمبيوتر بتقييم تلك القيمة من أجلك 983 00:42:32,510 --> 00:42:35,370 لأنه لا يمكنك أن تمثل عدد غير محدود من القيم. 984 00:42:35,370 --> 00:42:38,960 إذن هذا يعني أن Python محدودة فقط، بشكل أساسي، 985 00:42:38,960 --> 00:42:40,910 مثل بعض اللغات الأخرى مثل C. لذا لم نتخلص 986 00:42:40,910 --> 00:42:42,410 من جميع تلك المشاكل. 987 00:42:42,410 --> 00:42:45,690 لكن بصراحة، في عالم علم البيانات والتحليلات، 988 00:42:45,690 --> 00:42:47,690 هي بالتأكيد عمليات حسابية دقيقة ومهمة. 989 00:42:47,690 --> 00:42:49,710 لذا هناك حلول لهذه المشكلة. 990 00:42:49,710 --> 00:42:52,070 لكنها تتطلب مكتبات خاصة، عادة، 991 00:42:52,070 --> 00:42:55,070 استيراد شيء يتيح لكم استخدام أكبر قدر من الذاكرة 992 00:42:55,070 --> 00:42:58,560 لأنكم تحتاجون كمية أكبر من حجم الذاكرة الافتراضي. 993 00:42:58,560 --> 00:43:00,350 لذا ما تزال تلك المشكلة موجودة. 994 00:43:00,350 --> 00:43:03,470 دعوني أمضي قدمًا وأفتح مثالاً آخر هنا. 995 00:43:03,470 --> 00:43:07,730 وفي الحقيقة، في C، ستتذكرون أنه كان لدينا هذا المثال هنا. 996 00:43:07,730 --> 00:43:13,240 في C كان لدينا برنامج يُسمى overflow.c. 997 00:43:13,240 --> 00:43:16,330 ولاحظوا أن تلك التعليمة البرمجية في C منذ بضعة أسابيع 998 00:43:16,330 --> 00:43:19,915 مضروبة فقط i في 2، في 2، في 2. 999 00:43:19,915 --> 00:43:21,790 لذا كانت تتضاعف، إذا جاز التعبير-- 1000 00:43:21,790 --> 00:43:25,000 1 إلى 2، إلى 4، إلى 8، و16، و32، و64، وهكذا. 1001 00:43:25,000 --> 00:43:27,670 ما الذي كان سيحدث إذا انتظرنا مدة كافية وشاهدنا هذا البرنامج 1002 00:43:27,670 --> 00:43:30,913 منذ بضعة أسابيع؟ 1003 00:43:30,913 --> 00:43:32,680 الجمهور: ستحصل على 5 مليار بدلاً من-- 1004 00:43:32,680 --> 00:43:36,846 ديفيد ج. مالان: نعم، سنحصل على 5 مليار أو 4 مليار تقريبًا-- 1005 00:43:36,846 --> 00:43:39,970 أو بالأحرى، سنحصل من الناحية الفنية، على ما أعتقد، على 2 مليار، ومن ثم تحوّل. 1006 00:43:39,970 --> 00:43:41,410 وحدثت مشكلة نتيجة عن ذلك في الواقع. 1007 00:43:41,410 --> 00:43:42,230 إذن دعوني أقوم بذلك بالفعل. 1008 00:43:42,230 --> 00:43:44,627 دعوني أمضي قدمًا وأكتب make overflow حتى نتمكن من توضيح النقاط 1009 00:43:44,627 --> 00:43:47,710 التي أشرتَ إليها في وقت سابق بشأن تجاوز عدد صحيح، وهي، في الواقع، 1010 00:43:47,710 --> 00:43:48,430 هذه النقطة. 1011 00:43:48,430 --> 00:43:50,860 دعوني أمضي قُدمًا وأشغّل overflow. 1012 00:43:50,860 --> 00:43:54,290 سأقوم بتكبير شاشتي فقط حتى يمكننا جعلها مناسبة أكثر قليلاً على الشاشة. 1013 00:43:54,290 --> 00:43:55,860 وبما أن ذلك يعمل-- 1014 00:43:55,860 --> 00:43:57,490 عذرًا، دعوني أصلح هذا. 1015 00:43:57,490 --> 00:43:59,280 ها نحن ذا. 1016 00:43:59,280 --> 00:44:01,000 دعوني أمضي قدمًا وأكتب make overflow. 1017 00:44:01,000 --> 00:44:06,290 والآن 1، و2، و4، و8، و16، و32، وهكذا. 1018 00:44:06,290 --> 00:44:08,590 إنها بطيئة بعض الشيء في البداية، ولكن المضاعفة والمضاعفة 1019 00:44:08,590 --> 00:44:11,036 ستجعلنا نصل إلى قيمة كبيرة بسرعة كبيرة. 1020 00:44:11,036 --> 00:44:13,660 سيتجاوز هذا فى الواقع بمجرد أن نصل إلى 2 مليار تقريبًا. 1021 00:44:13,660 --> 00:44:14,410 لماذا؟ 1022 00:44:14,410 --> 00:44:16,970 لماذا اثنين مليار، معطاة أو مأخوذة؟ 1023 00:44:16,970 --> 00:44:18,700 لماذا هذه القيمة في C؟ 1024 00:44:18,700 --> 00:44:19,876 أجل؟ 1025 00:44:19,876 --> 00:44:21,956 الجمهور: [INAUDIBLE] 1026 00:44:21,956 --> 00:44:23,830 ديفيد ج. مالان: نعم، هذا هو العدد الذي يمكن أن يقوم عدد صحيح بتخزينه 1027 00:44:23,830 --> 00:44:27,700 لأننا نستدعي C. عادة ما يكون العدد الصحيح 32 وحدة بت أو 4 وحدات بايت. 1028 00:44:27,700 --> 00:44:31,120 وباستخدام 32 وحدة بت، يمكنك تمثيل القيمة المحتملة بمقدار أربعة مليارات. 1029 00:44:31,120 --> 00:44:34,090 وإذا كان نصف هذه القيم إيجابي ونصفها الآخر سلبي، 1030 00:44:34,090 --> 00:44:37,720 فمن المنطقي أن يرمز هذا إلى السبب في أن أعلى رقم يمكنك حسابه هو 2 مليار تقريبًا. 1031 00:44:37,720 --> 00:44:41,630 وبالفعل، عندما نحاول فقط حساب مضاعفة المليار الواحد، سنقوم بتجاوزه. 1032 00:44:41,630 --> 00:44:44,830 إذن بالنسبة إلى وجهة نظرك السابقة، ما يزال التجاوز يعد مشكلة، 1033 00:44:44,830 --> 00:44:46,540 لكن في سياق الأعداد الصحيحة. 1034 00:44:46,540 --> 00:44:49,000 لكن الآن دعونا نحاول استخدم إصدار Python من هذا. 1035 00:44:49,000 --> 00:44:52,887 دعوني أمضي قُدمًا الآن وأشغّل overflow.py، 1036 00:44:52,887 --> 00:44:54,470 وهو برنامج كتبتُه مسبقًا. 1037 00:44:54,470 --> 00:44:56,428 إنه على موقع الويب الخاص بالدورة، كما هو الحال دائمًا، 1038 00:44:56,428 --> 00:44:58,300 إذا كنتم ترغبون في إلقاء نظرة عليه عن كثب. 1039 00:44:58,300 --> 00:45:04,240 وإذا انتقلتُ إلى هذا الملف من الأسبوع الأول، overflow.py، فإننا سنرى هذه التعليمة البرمجية. 1040 00:45:04,240 --> 00:45:05,500 إذن هي تقريبًا نفسها. 1041 00:45:05,500 --> 00:45:07,624 لكن لاحظوا أنني استخدم مكتبة أخرى نحن لم نرها من قبل، 1042 00:45:07,624 --> 00:45:09,590 from time import sleep. 1043 00:45:09,590 --> 00:45:10,340 إنها لطيفة إلى حد ما. 1044 00:45:10,340 --> 00:45:12,007 لذا يتيح لي هذا السكون لمدة ثانية. 1045 00:45:12,007 --> 00:45:14,131 سيصبح هذا أمرًا مملاً بسرعة، لكن هذا جيد. 1046 00:45:14,131 --> 00:45:15,160 دعونا نقوم بهذا بسرعة. 1047 00:45:15,160 --> 00:45:18,580 إذا انتقلتُ إلى دليل المصدر السادس، من الأسبوع الأول، 1048 00:45:18,580 --> 00:45:23,530 وقمتُ بتشغيل Python of overflow.py، إنها الدالة نفسها-- أو البرنامج نفسه، 1049 00:45:23,530 --> 00:45:24,542 وظيفيًا. 1050 00:45:24,542 --> 00:45:26,500 لكن بصراحة، أصبح هذا أمرًا مملاً بعض الشيء. 1051 00:45:26,500 --> 00:45:31,090 دعونا نمضي قدمًا ونزيل السكون لمدة ثانية، ونقوم بالحفظ وإعادة التحميل. 1052 00:45:31,090 --> 00:45:32,610 دعونا فقط نقم بتشغيل هذا الشيء. 1053 00:45:32,610 --> 00:45:35,800 يا للعجب، انظروا إليه. 1054 00:45:35,800 --> 00:45:36,520 فقط هناك. 1055 00:45:36,520 --> 00:45:38,440 انظروا للأعلى هناك. 1056 00:45:38,440 --> 00:45:42,070 ما الذي تقوم به بشكل مختلف؟ 1057 00:45:42,070 --> 00:45:44,380 إنها تعدُّ أكثر بكثير من 2 مليار. 1058 00:45:44,380 --> 00:45:47,387 إذن ما الذي قد تستنتجونه بشأن الأعداد الصحيحة في Python؟ 1059 00:45:47,387 --> 00:45:48,670 الجمهور: [INAUDIBLE] 1060 00:45:48,670 --> 00:45:50,146 ديفيد ج. مالان: كرري ذلك؟ 1061 00:45:50,146 --> 00:45:54,257 الجمهور: العدد الصحيح محدد ليكون عددًا كبيرًا من وحدات البت. 1062 00:45:54,257 --> 00:45:57,090 ديفيد ج. مالان: حسنًا، العدد الصحيح محدد ليكون عددًا كبيرًا من وحدات البت. 1063 00:45:57,090 --> 00:45:58,656 وبالفعل، هذا هو الحال. 1064 00:45:58,656 --> 00:46:00,030 Python ليست في الحقيقة بطيئة هكذا. 1065 00:46:00,030 --> 00:46:02,940 إن ذلك بسبب أننا نشغّل IDE القائمة على شبكة ويب وشبكة الإنترنت نفسها 1066 00:46:02,940 --> 00:46:03,900 بطيئة بعض الشيء. 1067 00:46:03,900 --> 00:46:06,899 ولذا ما يحدث هنا فقط هو أن شبكة الإنترنت بطيئة بهذا الشكل. 1068 00:46:06,899 --> 00:46:10,629 لكن يكفي أن نقول أن Python تعدّ ما هو أعلى، بكثير مما تعدّه C. 1069 00:46:10,629 --> 00:46:13,170 وهذه هي الطاقة التي تحصلون عليها فقط باستخدام أنواع بيانات أكبر. 1070 00:46:13,170 --> 00:46:16,470 كان يمكن أن نقوم بذلك في C. ونستخدم longs، على سبيل المثال. 1071 00:46:16,470 --> 00:46:20,269 لكن لاحظوا أنه باستخدام Python تحصلون على أشياء أكثر بشكل افتراضي خارج الصندوق. 1072 00:46:20,269 --> 00:46:22,310 دعونا نمضي قدمًا ونأخذ استراحة لمدة خمس دقائق. 1073 00:46:22,310 --> 00:46:24,476 وعندما نستأنف، سنقدم بعض الصيغ الأخرى 1074 00:46:24,476 --> 00:46:25,950 وسنحل بعض المشاكل الأخرى. 1075 00:46:25,950 --> 00:46:28,950 حسنًا، إذن دعونا نلقي نظرة على بعض الأمثلة الأخرى، 1076 00:46:28,950 --> 00:46:31,920 التي يمكن مقارنتها بما قمنا به في الأسبوع الأول ونلقي نظرة على بعض الأمثلة 1077 00:46:31,920 --> 00:46:34,440 من الأسبوع الثاني والثالث ونلقي نظرة بالفعل 1078 00:46:34,440 --> 00:46:37,770 ليس فقط على الصيغة، في النهاية، ولكن على بعض ميزات Python. 1079 00:46:37,770 --> 00:46:40,710 وبالطبع، نحتاج إلى القدرة على التعبير عن أنفسنا بشكل مشروط 1080 00:46:40,710 --> 00:46:42,480 أو منطقي باستخدام التحكم في التدفق. 1081 00:46:42,480 --> 00:46:44,340 ولذا دعوني أقترح برنامج سريع هنا 1082 00:46:44,340 --> 00:46:47,760 سنسميه conditions.py فقط، ليذكرنا بـ conditions.c 1083 00:46:47,760 --> 00:46:48,850 منذ مدة قصيرة. 1084 00:46:48,850 --> 00:46:52,560 دعوني أمضي قدمًا وأقوم باستيراد getInt من CS50 هذه المرة 1085 00:46:52,560 --> 00:46:56,530 وأحصل لنفسي على x آخر باستخدام getInt x من المستخدم. 1086 00:46:56,530 --> 00:47:00,262 ثم دعوني أمضي قدمًا وأطلب منه getInt y من المستخدم. 1087 00:47:00,262 --> 00:47:02,220 ومن ثم دعوني أمضي قُدمًا و أقارن بينهما. 1088 00:47:02,220 --> 00:47:04,830 وهكذا بحسب المقارنة التي قمنا بها هنا باستخدام Scratch منذ قليل، 1089 00:47:04,830 --> 00:47:08,220 يمكنني القول ببساطة إذا كان x أقل من y، ثم أمضي قدمًا 1090 00:47:08,220 --> 00:47:14,090 وأطبع، على سبيل المثال، أطبع x أقل من y، تمامًا كما فعلنا منذ أسابيع. 1091 00:47:14,090 --> 00:47:16,980 Elif إذا كان x أكبر من y، يمكننا المضي قدمًا 1092 00:47:16,980 --> 00:47:20,610 وطباعة x أكبر من y. 1093 00:47:20,610 --> 00:47:23,160 ومن ثم ما يزال لدينا الشرط الثالث، else، 1094 00:47:23,160 --> 00:47:26,310 تمامًا كما في C، حيث نطبع، على سبيل المثال، الاستنتاج المنطقي. 1095 00:47:26,310 --> 00:47:28,440 x يساوي y. 1096 00:47:28,440 --> 00:47:30,330 لذا للإشارة فقط إلى بعض الاختلافات، 1097 00:47:30,330 --> 00:47:32,400 المسافة البادئة مهمة جدًا الآن. 1098 00:47:32,400 --> 00:47:33,859 ويجب أن تكون منسقة. 1099 00:47:33,859 --> 00:47:35,400 لا يمكنكم الحصول على أربع مسافات وثلاث. 1100 00:47:35,400 --> 00:47:37,540 يجب أن تكون لديكم، على سبيل المثال، أربع مسافات على طول الطريق. 1101 00:47:37,540 --> 00:47:39,690 لاحظوا أن لدي النقطتين منسقتين هناك. 1102 00:47:39,690 --> 00:47:44,260 لكن لاحظوا أنني لا أحتاج إلى كلا القوسين، بعد الآن. 1103 00:47:44,260 --> 00:47:46,900 وباستخدام Python، توجد كلمة طنانة إلى حد ما، Pythonic. 1104 00:47:46,900 --> 00:47:48,930 هناك طريقة بايثونية للقيام بالأشياء. 1105 00:47:48,930 --> 00:47:53,230 يمكنكم الحصول على قوسين حول x، أقل من y، أو x أكبر من y، 1106 00:47:53,230 --> 00:47:56,602 تمامًا كما فى C. لكنها على الأرجح لا تضيف أي شيء بشكل منطقي. 1107 00:47:56,602 --> 00:47:58,560 وإذا لم تجعل تعليمتك البرمجية قابلة للقراءة بشكل أكبر، 1108 00:47:58,560 --> 00:48:00,990 فلا تجعلها فوضوية باستخدام أحرف إضافية. 1109 00:48:00,990 --> 00:48:02,820 ولذا هذه الآن قاعدة ثابتة عامة. 1110 00:48:02,820 --> 00:48:06,099 تقوم Python بتشذيب أكبر عندما يتعلق الأمر بالصيغة، فقط 1111 00:48:06,099 --> 00:48:08,890 تقدمها عندما تقوم بحل مشكلة بالفعل، وهي في هذه الحالة، 1112 00:48:08,890 --> 00:48:09,710 ليست موجودة بالفعل. 1113 00:48:09,710 --> 00:48:10,719 أجل؟ 1114 00:48:10,719 --> 00:48:12,760 الجمهور: سؤال سريع، السطور [INAUDIBLE]،، 1115 00:48:12,760 --> 00:48:15,551 هذه مجمعة معًا الآن، واحدًا تلو الآخر، واحدًا تلو الآخر 1116 00:48:15,551 --> 00:48:16,515 وواحدًا تلو الآخر. 1117 00:48:16,515 --> 00:48:18,640 إذا وضعتَ سطرًا إضافيًا بينهم، 1118 00:48:18,640 --> 00:48:19,960 هل سيكسر ذلك التعليمة البرمجية؟ 1119 00:48:19,960 --> 00:48:20,770 ديفيد ج. مالان: لا، لا على الإطلاق. 1120 00:48:20,770 --> 00:48:23,080 يمكنني أن أضع العديد من المسافات بشكل رأسي بقدر ما أريد. 1121 00:48:23,080 --> 00:48:25,210 أريد أن أضيف بعض التعليقات، بالطبع، يمكنني القيام بذلك. 1122 00:48:25,210 --> 00:48:27,760 ولماذا لا نقوم بذلك، في الحقيقة، لأن صيغة التعليق 1123 00:48:27,760 --> 00:48:29,134 للغة Python مختلفة قليلاً. 1124 00:48:29,134 --> 00:48:31,315 في C، لقد اعتدنا على وضع خط مائل خط مائل. 1125 00:48:31,315 --> 00:48:33,190 Python، إنها بالفعل مختصرة قليلاً. 1126 00:48:33,190 --> 00:48:34,510 يمكنكم فقط استخدام علامة تجزئة واحدة. 1127 00:48:34,510 --> 00:48:37,270 ويمكنكم قول احصل على x من المستخدم هنا. 1128 00:48:37,270 --> 00:48:39,860 يمكنكم قول احصل على y من المستخدم هنا. 1129 00:48:39,860 --> 00:48:42,557 ومن ثم يمكنني قول شيء ما مثل قارن x وy. 1130 00:48:42,557 --> 00:48:44,890 وإذا أردتُ هذا حقًا، فيمكنني وضع تعليقات هنا. 1131 00:48:44,890 --> 00:48:46,150 هذا حقًا رائع للغاية. 1132 00:48:46,150 --> 00:48:49,420 لكن سأحتفظ به بشكل مضغوط أكثر باستخدام ذلك المثال المعين. 1133 00:48:49,420 --> 00:48:54,740 حسنًا أي أسئلة عن الصيغة المشروطة أو ما قمنا به فقط هنا؟ 1134 00:48:54,740 --> 00:48:56,980 حسنًا، دعوني أعرض مثالاً آخر، 1135 00:48:56,980 --> 00:48:59,340 هذه المرة سأقوم ببعض المقارنات. 1136 00:48:59,340 --> 00:49:02,190 هذه المرة، دعوني أقوم بإنشاء ملف يُسمى answer.py، 1137 00:49:02,190 --> 00:49:05,700 وهو يذكرنا بالمثال السريع الذى قمنا به منذ أسابيع الذي يُسمى answer.c. 1138 00:49:05,700 --> 00:49:09,630 دعوني أمضي قدمًا ومن CS50 أقوم باستيراد getString. 1139 00:49:09,630 --> 00:49:12,210 وهذه المرة، دعوني أمضي قدمًا وأعلن عن 1140 00:49:12,210 --> 00:49:15,090 متغير، C. ودعوني أمضي قدمًا وأحصل على سلسلة من المستخدم-- 1141 00:49:15,090 --> 00:49:18,030 عذرًا-- أحصل على سلسلة من المستخدم لإجابته 1142 00:49:18,030 --> 00:49:19,770 عن أي سؤال هذا ما نهتم به. 1143 00:49:19,770 --> 00:49:22,890 ومن ثم إذا كانت الإجابة بنعم/لا، دعونا نتحقق من ذلك. 1144 00:49:22,890 --> 00:49:28,840 إذا كان c يساوي يساوي y أو c يساوي يساوي حرف y صغير، 1145 00:49:28,840 --> 00:49:32,280 ثم أمضى قدمًا وأقول، فقط من أجل الإثبات، 1146 00:49:32,280 --> 00:49:34,680 نعم، لأنه من المفترض أن يعني الشخص ذلك. 1147 00:49:34,680 --> 00:49:40,140 Elif c يساوي يساوي حرف n كبير أو c يساوي يساوي حرف n صغير، 1148 00:49:40,140 --> 00:49:43,320 ثم أمضى قدمًا وأطبع، على سبيل المثال، لا. 1149 00:49:43,320 --> 00:49:47,320 إذن برنامج قصير، لكن ماذا عن بعض الملاحظات السريعة؟ 1150 00:49:47,320 --> 00:49:51,180 حسنًا، ما هو المختلف بشكل واضح ضمن تلك السطور، 5 عبر 8، مقابل C، 1151 00:49:51,180 --> 00:49:53,090 منذ أسابيع؟ 1152 00:49:53,090 --> 00:49:53,666 أجل. 1153 00:49:53,666 --> 00:49:55,330 الجمهور: بالنسبة إلى أو يجب أن تقوم بـ-- 1154 00:49:55,330 --> 00:49:58,310 ديفيد ج. مالان: أجل، ليس اي من تلك الأشرطة الرأسية الغبية أو علامة العطف 1155 00:49:58,310 --> 00:49:58,830 علامة العطف. 1156 00:49:58,830 --> 00:50:02,430 لكن إذا أردتم القيام بشيء ما أو أو وهذا معًا، فقط قولوا و و 1157 00:50:02,430 --> 00:50:05,580 أو، مثل سكراتش فى الواقع، منذ بضعة أسابيع. 1158 00:50:05,580 --> 00:50:08,970 لاحظوا، أيضًا-- كيف نقارن بين السلاسل؟ 1159 00:50:08,970 --> 00:50:12,930 يتضح أن Python لا تحتوي على chars، في حد ذاتها. 1160 00:50:12,930 --> 00:50:14,960 تحتوي C على chars، أحرف منفردة. 1161 00:50:14,960 --> 00:50:16,380 تحتوي Python فقط على سلاسل. 1162 00:50:16,380 --> 00:50:19,107 تحتوي على سلاسل، وأعداد صحيحة، وقيم كسرية، وبعض الأشياء الرائعة، 1163 00:50:19,107 --> 00:50:20,190 لكن لا تحتوي على chars. 1164 00:50:20,190 --> 00:50:22,530 لهذا السبب أنا أستخدم السلسة بشكل متعمد. 1165 00:50:22,530 --> 00:50:28,130 لكن عندما نستخدم السلاسل فى C، كيف قمنا بمقارنة سلسلتين؟ 1166 00:50:28,130 --> 00:50:31,967 Str comp، حسنًا، بسبب مسألة مقارنة المؤشر المزعجة بأكملها. 1167 00:50:31,967 --> 00:50:33,800 حسنًا، يتضح الآن في Python إذا كنتم تريدون 1168 00:50:33,800 --> 00:50:37,280 مقارنة سلسلتين حرف بحرف بحرف، 1169 00:50:37,280 --> 00:50:38,570 سترجع علامتي يساوي يساوي. 1170 00:50:38,570 --> 00:50:43,050 وتقوم بما تتوقع أن تقوم به بالضبط، حتى لو كانت كلمة كاملة. 1171 00:50:43,050 --> 00:50:47,780 لذلك إذا كنت تحقق بالفعل من، على سبيل المثال، نعم أو نعم من الشخص، 1172 00:50:47,780 --> 00:50:50,630 ما يزال بإمكانك استخدام علامتي يساوي يساوي أيضًا، على الرغم من أنه 1173 00:50:50,630 --> 00:50:52,080 أكثر من حرف واحد الآن. 1174 00:50:52,080 --> 00:50:53,538 إذن هذه ميزة رائعة، أيضًا. 1175 00:50:53,538 --> 00:50:56,000 وهذا يجعل التعليمات البرمجية فقط قابلة للقراءة ويمكن كتابتها 1176 00:50:56,000 --> 00:50:58,430 بسهولة أكثر ومن دون أي تردد. 1177 00:50:58,430 --> 00:51:02,000 حسنًا، تذكرون الآن أننا في C قد أمضينا بعض الوقت، 1178 00:51:02,000 --> 00:51:05,120 وكذلك في سكراتش، حيث ألقينا نظرة على بعض الأمثلة الخاصة بالسعال، 1179 00:51:05,120 --> 00:51:06,050 من جميع الأشياء. 1180 00:51:06,050 --> 00:51:08,000 وفي الواقع، في Python وC-- 1181 00:51:08,000 --> 00:51:09,530 بدلاً من ذلك، في سكراتش وC-- 1182 00:51:09,530 --> 00:51:12,130 قمنا بمثال الصفر الذي يبدو إلى حد ما مثل هذا. 1183 00:51:12,130 --> 00:51:14,990 إذا كنتم ترغبون في محاكاة فكرة سكراتش سعال القط، 1184 00:51:14,990 --> 00:51:16,446 قد تقومون بذلك، بالطبع. 1185 00:51:16,446 --> 00:51:19,070 ومن ثم إذا كان سيسعل ثلاث مرات، فقد تقومون بذلك. 1186 00:51:19,070 --> 00:51:22,029 وقمنا بتشغيل هذا وظهر فقط سعال، سعال، سعال على الشاشة. 1187 00:51:22,029 --> 00:51:24,320 لن أحمل نفسي عناء تشغيله لأنه سيقوم بذلك فقط. 1188 00:51:24,320 --> 00:51:26,810 ولكن كان هذا تصميمًا سيئًا زعمنا القيام به منذ أسابيع. 1189 00:51:26,810 --> 00:51:28,700 ما هي خلاصة السبب في أن هذا تصميم سيء؟ 1190 00:51:28,700 --> 00:51:31,267 1191 00:51:31,267 --> 00:51:32,850 أعني، إنني حرفيًا قمتُ بنسخه ولصقه. 1192 00:51:32,850 --> 00:51:35,876 والاحتمالات هي إذا قمتَ بهذا في CS50 أو في البرمجة 1193 00:51:35,876 --> 00:51:38,000 بشكل عام أكثر، فمن المحتمل أنك ستكون كسولاً قليلاً 1194 00:51:38,000 --> 00:51:39,290 وهناك طريقة أفضل للقيام بذلك. 1195 00:51:39,290 --> 00:51:41,039 وهي طريقة قابلة للصيانة بشكل أكبر للقيام بذلك. 1196 00:51:41,039 --> 00:51:45,260 إذن بالطبع، قدّمنا منذ أسابيع، في كل من سكراتش وفي C، 1197 00:51:45,260 --> 00:51:49,610 القدرة في cough1، هذه المرة، على القيام بتكرار حلقي. 1198 00:51:49,610 --> 00:51:53,240 ويمكنني إجراء تكرار حلقي بشكل مختلف قليلاً في Python وفي C. لكن فيما يخص i 1199 00:51:53,240 --> 00:51:57,002 في النطاق 3، امضي قدمًا واطبع سعال. 1200 00:51:57,002 --> 00:51:59,210 وبالتالي فإن الصيغة للتكرار الحلقي مختلفة قليلاً. 1201 00:51:59,210 --> 00:52:01,084 لكنها مباشرة للغاية، على الرغم من ذلك، 1202 00:52:01,084 --> 00:52:04,340 بمجرد أن تتذكروا استخدام for، اسم المتغير، ثم 1203 00:52:04,340 --> 00:52:08,569 حرف الجر in، ومن ثم نطاق الكلمة داخل قوسين و-- 1204 00:52:08,569 --> 00:52:10,610 قوسين والقيمة التي تريدون الاهتمام بها. 1205 00:52:10,610 --> 00:52:16,240 لكن سنحت لنا فرصة، تذكرون، تجريد السعال في الواقع. 1206 00:52:16,240 --> 00:52:19,490 السعال، في الشكل النصي على الأقل، فقط القيام بطباعة شيء. 1207 00:52:19,490 --> 00:52:22,310 إذن قدّمنا في الإصدار الثاني منذ فترة، 1208 00:52:22,310 --> 00:52:25,340 النهج التالي في cough2. 1209 00:52:25,340 --> 00:52:28,857 وبدلاً من ذلك قمتُ بتعريف دالة تُسمى cough لتقوم بالسعال من أجلي. 1210 00:52:28,857 --> 00:52:30,440 ولم نرى هذا حتى الآن في Python. 1211 00:52:30,440 --> 00:52:33,350 إذن كيف تقومون بتعريف دالة في Python تُسمى cough؟ 1212 00:52:33,350 --> 00:52:36,680 وبعبارة أخرى، كيف تقومون بإنشاء قطعة لغز مخصصة خاصة بكم، 1213 00:52:36,680 --> 00:52:38,300 مثلما فعلنا في لغة سكراتش؟ 1214 00:52:38,300 --> 00:52:40,250 حسنًا تقومون بتعريفها باستخدام def. 1215 00:52:40,250 --> 00:52:42,390 ومن ثم تجعلونها تقوم بما تريدونه بالضبط 1216 00:52:42,390 --> 00:52:45,690 أن تقوم به فقط من خلال وضع مسافة بادئة بين سطور التعليمة البرمجية التي تنتمي إلى تلك الدالة. 1217 00:52:45,690 --> 00:52:47,270 لذلك لا توجد قيمة مرتجعة. 1218 00:52:47,270 --> 00:52:49,200 لا نحتاج إلى مدخل في هذه اللحظة. 1219 00:52:49,200 --> 00:52:50,510 لكن لدينا النقطتين. 1220 00:52:50,510 --> 00:52:51,680 ولدينا المسافة البادئة. 1221 00:52:51,680 --> 00:52:53,510 لا توجد أقواس متعرجة، ولا شيء آخر. 1222 00:52:53,510 --> 00:52:55,230 كيف يُمكنني الآن استخدام هذه الدالة؟ 1223 00:52:55,230 --> 00:52:59,480 حسنًا، هنا حيث توجد لدينا بضعة خيارات بشكل نمطي في البرنامج. 1224 00:52:59,480 --> 00:53:03,890 ستكون أبسط طريقة لاستدعاء هذه الدالة هي بسيطة تمامًا هكذا. 1225 00:53:03,890 --> 00:53:09,710 امضي قدمًا واكتب for i في النطاق 3، امضي قدمًا وcough. 1226 00:53:09,710 --> 00:53:11,240 ويبدو هذا غريبًا قليلاً. 1227 00:53:11,240 --> 00:53:12,777 يبدو، بالفعل، أمرًا سيئًا قليلاً. 1228 00:53:12,777 --> 00:53:13,860 لكن دعونا نرى إذا نجح الأمر. 1229 00:53:13,860 --> 00:53:17,780 إذن إذا مضيتُ قدمًا وقمتُ بتشغيل Python من coughtwo.py، 1230 00:53:17,780 --> 00:53:19,790 تبدو هكذا cough ،cough ،cough. 1231 00:53:19,790 --> 00:53:24,160 ولكن أقول هذا أمر غريب قليلاً لأن الشيء الذي 1232 00:53:24,160 --> 00:53:28,590 أقوم به مختلف للغاية الآن عن C؟ 1233 00:53:28,590 --> 00:53:29,980 لا توجد ماذا؟ 1234 00:53:29,980 --> 00:53:31,690 لا توجد دالة main. 1235 00:53:31,690 --> 00:53:34,742 فقط لدي تعليمة برمجية هنا على يسار الشاشة. 1236 00:53:34,742 --> 00:53:36,200 ومع ذلك، لدي دالة هنا. 1237 00:53:36,200 --> 00:53:37,667 وفي Python، هذا جيد. 1238 00:53:37,667 --> 00:53:40,000 لأنكم تستخدمون المترجم وتقرأون الملف 1239 00:53:40,000 --> 00:53:43,390 من الأعلى إلى الأسفل، من اليسار إلى اليمين، لا تحتاجون إلى دالة تُسمى main على وجه التحديد. 1240 00:53:43,390 --> 00:53:45,610 سيقوم فقط بتفسير جميع تعليمتكم البرمجية. 1241 00:53:45,610 --> 00:53:47,811 وعندما يرى تعريف الدالة، حسنًا. 1242 00:53:47,811 --> 00:53:49,060 سيقول، حسنًا، فهمت ذلك. 1243 00:53:49,060 --> 00:53:50,830 أعرف الآن ما الذي يعنيه الفعل يسعل. 1244 00:53:50,830 --> 00:53:53,890 وسأفعل هذا في أي وقت أرى فيه هذا بالأسفل. 1245 00:53:53,890 --> 00:53:56,120 لكننا سنواجه مشكلة. 1246 00:53:56,120 --> 00:53:58,870 وإذا، اتّبعتُ بالفعل حدسي الأول، 1247 00:53:58,870 --> 00:54:02,620 وهو وضع المنطق، الجزء الرئيسي من برنامجي في الأعلى 1248 00:54:02,620 --> 00:54:05,240 وأقوم بتعريف cough هنا بالأسفل، دعونا نرى ما يحدث. 1249 00:54:05,240 --> 00:54:06,160 دعوني أقوم بالتصغير. 1250 00:54:06,160 --> 00:54:08,800 دعوني أمضي قدمًا وأعيد تشغيل coughtwo.py. 1251 00:54:08,800 --> 00:54:11,410 والآن نبدأ برؤية أول رسائل الأخطاء. 1252 00:54:11,410 --> 00:54:14,890 وستبدو مشفرة فقط كما كانت منذ الوهلة الأولى كما كان clang 1253 00:54:14,890 --> 00:54:15,730 وmake. 1254 00:54:15,730 --> 00:54:19,640 أكد البقية أنه يمكن أن تساعد help50 برسائل الأخطاء في Python، أيضًا. 1255 00:54:19,640 --> 00:54:23,860 لكن دعونا نحاول فقط تحليل ما أفهمه. cough2.py، السطر الثاني 1256 00:54:23,860 --> 00:54:26,440 في الوحدة أيًا كان ذلك، خطأ اسم. 1257 00:54:26,440 --> 00:54:28,550 الاسم cough غير محدد. 1258 00:54:28,550 --> 00:54:29,830 إذن ماذا يقول حدسك هنا؟ 1259 00:54:29,830 --> 00:54:31,180 ما هذا حقًا-- 1260 00:54:31,180 --> 00:54:32,890 ما هو توضيح هذا الخطأ؟ 1261 00:54:32,890 --> 00:54:34,600 لأن السعال محدّد بوضوح-- 1262 00:54:34,600 --> 00:54:37,660 حرفيًا باستخدام فعل def المُحدّد-- 1263 00:54:37,660 --> 00:54:40,551 هناك على السطر الرابع الآن. 1264 00:54:40,551 --> 00:54:41,050 ماذا-- 1265 00:54:41,050 --> 00:54:41,982 الجمهور: أنت تستدعي cough قبل أن يتم تحديده. 1266 00:54:41,982 --> 00:54:44,523 ديفيد مالان: نعم، أحاول استدعاؤه قبل أن يتم تحديده. 1267 00:54:44,523 --> 00:54:46,707 تحاول Python أن تنقلني بشكل حرفي للغاية. 1268 00:54:46,707 --> 00:54:48,790 وستقوم بذلك من الأعلى إلى الأسفل، من اليسار إلى اليمين. 1269 00:54:48,790 --> 00:54:50,790 وإذا لم ترى شيء حتى الجزء السفلي 1270 00:54:50,790 --> 00:54:53,681 الذي من المفترض أن تقوم به في الأعلى، فلن ينجح الأمر فقط. 1271 00:54:53,681 --> 00:54:56,430 لذا هناك حل لهذا وأصبح هذا قبيحًا قليلاً. 1272 00:54:56,430 --> 00:54:58,140 لكنه حل عام أكثر. 1273 00:54:58,140 --> 00:55:01,890 يتضح أنه على الرغم من أن main غير مطلوبة في برنامج Python، 1274 00:55:01,890 --> 00:55:04,590 يقوم العديد من المبرمجين بإنشاء واحدة فقط على الرغم من ذلك 1275 00:55:04,590 --> 00:55:06,780 لمعالجة هذه المشكلة الخاصة. 1276 00:55:06,780 --> 00:55:09,150 وهم على وجه التحديد يفعلون شيئًا كهذا-- 1277 00:55:09,150 --> 00:55:13,290 def main-- ومن ثم أسفلها يزيحون كل شيء هناك. 1278 00:55:13,290 --> 00:55:18,390 ومن ثم يحتاجون إلى ميزة واحدة محددة لحل هذه المشكلة الآن. 1279 00:55:18,390 --> 00:55:21,960 لقد حددتُ الآن main وحددتُ cough، وهو من الناحية النظرية 1280 00:55:21,960 --> 00:55:24,540 يحل هذه المشكلة فقط كما فعل في C. لا توجد 1281 00:55:24,540 --> 00:55:26,280 فكرة النموذج الأولي في Python. 1282 00:55:26,280 --> 00:55:30,280 هذا ليس حل نسخ ولصق اسم الدالة أعلاه. 1283 00:55:30,280 --> 00:55:33,820 ولكن عندما أقوم بهذا الآن، حرفيًا لا يحدث أي شيء. 1284 00:55:33,820 --> 00:55:35,920 لكنني تخلصتُ من الخطأ. 1285 00:55:35,920 --> 00:55:38,264 لذا مجرد سبب لهذا، ربما. 1286 00:55:38,264 --> 00:55:40,430 خاصة إذا لم تقوموا ببرمجة Python من قبل، 1287 00:55:40,430 --> 00:55:44,675 لمَ قد لا يحدث شيء الآن؟ 1288 00:55:44,675 --> 00:55:45,799 الجمهور: عدم استدعاء main؟ 1289 00:55:45,799 --> 00:55:47,675 ديفيد مالان: أنا لا أستدعي main، نعم. 1290 00:55:47,675 --> 00:55:49,010 لذلك بينما في C-- 1291 00:55:49,010 --> 00:55:53,630 وبصراحة، في Java، C++، وبعض اللغات الأخرى-- تعد main أمرًا خاصًا. 1292 00:55:53,630 --> 00:55:57,590 يتم استدعاؤها بشكل افتراضي. في Python، لا تعد main أمرًا خاصًا. 1293 00:55:57,590 --> 00:56:00,960 لقد اخترتُ هذا الاسم main فقط لأن العديد من اللغات الأخرى تستخدمها، 1294 00:56:00,960 --> 00:56:02,840 لكن ليست لها أهمية خاصة. 1295 00:56:02,840 --> 00:56:05,970 إذا كنت ترغب في استدعاء main، يجب أن تقوم بذلك بنفسك. 1296 00:56:05,970 --> 00:56:08,090 ولذا هذا غريب قليلاً، في الحقيقة. 1297 00:56:08,090 --> 00:56:12,410 ولكن يمكنك حرفيًا فعل ذلك هنا لأنه سيتم تنفيذ تعليماتك البرمجية من الأعلى 1298 00:56:12,410 --> 00:56:13,610 إلى الأسفل، من اليسار إلى اليمين. 1299 00:56:13,610 --> 00:56:16,640 مع مرور الوقت يتم الوصول إلى السطر الزمني 10، يتم تحديد كل من main 1300 00:56:16,640 --> 00:56:19,100 وcough، مما يعني أنك على ما يرام. 1301 00:56:19,100 --> 00:56:23,630 لذا إذا انتقلتُ الآن إلى هنا وقمتُ بتشغيل Python من cough2، الآن نجح الأمر في الواقع. 1302 00:56:23,630 --> 00:56:27,200 الآن، كملاحظة جانبية، هذا ليس باثوني، إذا صح التعبير. 1303 00:56:27,200 --> 00:56:33,020 سيقوم معظم الأشخاص بذلك بالفعل إذا كان الاسم يساوي يساوي main، 1304 00:56:33,020 --> 00:56:34,910 ثم يقوموا بهذا. 1305 00:56:34,910 --> 00:56:38,180 هذا للأسباب ذات المستوى المنحفض دعوني لا أتطرق إلى هذا اليوم. 1306 00:56:38,180 --> 00:56:40,932 لكن خلاصة القول، إضافة هذا السطر الذي يبدو مشفرًا 1307 00:56:40,932 --> 00:56:42,890 يحل المشاكل الأخرى التي لن نتجاوزها 1308 00:56:42,890 --> 00:56:44,790 خلال هذا الأسبوع وربما الأسبوع المقبل. 1309 00:56:44,790 --> 00:56:46,710 إذن هذه هي الطريقة الشائعة للقيام بذلك. 1310 00:56:46,710 --> 00:56:49,730 ولكن إذا تجاهلتُ ذلك فقط، فإن تأثير هذه التعليمة البرمجية التي تبدو مشفرة 1311 00:56:49,730 --> 00:56:52,460 هو فقط أن تقوم باستدعاء main بنفسك من أسفل ملفك. 1312 00:56:52,460 --> 00:56:54,350 لذا عندما نبدأ بكتابة برامج مثير للاهتمام أكثر، 1313 00:56:54,350 --> 00:56:55,920 ستصبح هذه تقليدية أكثر فقط. 1314 00:56:55,920 --> 00:56:58,086 إذا كنتَ ترغب في البدء بكتابة دالات الكتابة وما إلى ذلك، 1315 00:56:58,086 --> 00:57:00,560 فالاحتمالات هي أنك ستستفيد من خلال كتابة دالة main 1316 00:57:00,560 --> 00:57:02,120 ووضع المزيد من التعليمات البرمجية هناك. 1317 00:57:02,120 --> 00:57:07,400 لنقم بمثال واحد أخير باستخدام cough الذي يميز الآن بالفعل 1318 00:57:07,400 --> 00:57:12,200 التعليمة البرمجية، تمامًا كما فعلنا منذ أسابيع في سكراتش وC. هذا سيكون cough3.py. 1319 00:57:12,200 --> 00:57:14,330 دعوني أبدأ كما فعلت فقط منذ قليل. 1320 00:57:14,330 --> 00:57:16,550 لكن لنفترض أنني أريد تحقيق هذا التأثير. 1321 00:57:16,550 --> 00:57:20,780 أريد الكمبيوتر أن يقم بالسعال ثلاث مرات عن طريق التمرير في مدخل. 1322 00:57:20,780 --> 00:57:23,900 أنا الآن أحتاج إلى تعديل سعال ليأخذ مدخل. 1323 00:57:23,900 --> 00:57:26,420 إذن في C، قلت شيئًا مثل int n. 1324 00:57:26,420 --> 00:57:29,300 ولكن لا يجب أن تحددوا أنواع البيانات في Python، 1325 00:57:29,300 --> 00:57:32,150 يجب فقط أن تحددوا اسم المعلمة أو اسم الوسيطة. 1326 00:57:32,150 --> 00:57:33,510 لذا هذا لطيف وبسيط. 1327 00:57:33,510 --> 00:57:36,680 والآن في الأسفل هنا، في سعال، حيث يجب أن أقول 1328 00:57:36,680 --> 00:57:41,270 for i في النطاق 3، قم بهذا. 1329 00:57:41,270 --> 00:57:42,440 لكن هذا ليس صحيحًا تمامًا. 1330 00:57:42,440 --> 00:57:44,701 ما هو الإصلاح الذي أريد القيام به هنا؟ 1331 00:57:44,701 --> 00:57:45,200 أجل. 1332 00:57:45,200 --> 00:57:46,420 الآن يمكنني فقط التمرير في n. 1333 00:57:46,420 --> 00:57:48,920 لذا النطاق هو مجرد دالة تأخذ الوسيطة التي قمتُ 1334 00:57:48,920 --> 00:57:51,150 بترميزها بشكل ثابت كثلاثة لسبب ما فقط. 1335 00:57:51,150 --> 00:57:53,420 ولكن يمكنك تعميمها باستخدام n، أيضًا. 1336 00:57:53,420 --> 00:57:56,450 و لذا الآن، مجددًا، في مناقشتنا للتجريد منذ أسابيع وأسابيع، 1337 00:57:56,450 --> 00:57:59,900 هل لدينا إصدار جيد من سعال إلى حد ما، 1338 00:57:59,900 --> 00:58:01,970 على الرغم من أنه يبدو مشفرًا أكثر. 1339 00:58:01,970 --> 00:58:04,220 ولكن خطوة بخطوة بخطوة وصلنا إلى المغزى من 1340 00:58:04,220 --> 00:58:07,100 وجود دالة main التي تأخذ التجريد، سعال. 1341 00:58:07,100 --> 00:58:08,420 قم بذلك عدة مرات. 1342 00:58:08,420 --> 00:58:11,370 الآن تفاصيل التنفيذ مخبأة في قطع اللغز المخصصة هذه، 1343 00:58:11,370 --> 00:58:11,990 إذا صح التعبير. 1344 00:58:11,990 --> 00:58:14,600 ويبدأ السطران في الأسفل للتو 1345 00:58:14,600 --> 00:58:16,280 بالتنفيذ الكامل للبرنامج. 1346 00:58:16,280 --> 00:58:20,742 لكن هذا هو الشيء الوحيد الذي يحدد Python حقًا. 1347 00:58:20,742 --> 00:58:21,714 أجل؟ 1348 00:58:21,714 --> 00:58:27,550 الجمهور: هل يمكننا استخدام دالة سعال على السطر 11 [INAUDIBLE]؟؟ 1349 00:58:27,550 --> 00:58:31,151 ديفيد مالان: هل يمكن استخدام دالة سعال على السطر 11؟ 1350 00:58:31,151 --> 00:58:31,650 نعم. 1351 00:58:31,650 --> 00:58:37,310 يمكنك بالتأكيد القيام بذلك، على سبيل المثال، والتخلص من main مجددًا. 1352 00:58:37,310 --> 00:58:38,490 إنها مجرد تقليد. 1353 00:58:38,490 --> 00:58:41,490 بمجرد أن تبدأ بكتابة برامج متطورة أكثر باستخدام دالات، 1354 00:58:41,490 --> 00:58:45,542 ربما يجب أن تقدم main فقط لتبقيها مرتبة. 1355 00:58:45,542 --> 00:58:49,330 الجمهور: باستخدام [INAUDIBLE]. 1356 00:58:49,330 --> 00:58:50,710 ديفيد مالان: يمكنك فعل ذلك. 1357 00:58:50,710 --> 00:58:53,410 ثم تبدأ في أن تكون غير باثوني. 1358 00:58:53,410 --> 00:58:59,320 على سبيل المثال، نعم، يمكنك أن تكتب cough3 ولكن سيطلب منك الأشخاص 1359 00:58:59,320 --> 00:59:01,450 لأن ذلك لن يتم بهذه الطريقة. 1360 00:59:01,450 --> 00:59:03,160 هذا ما تعنيه كلمة Pythonic. 1361 00:59:03,160 --> 00:59:04,996 نعم، أي أسئلة أخرى؟ 1362 00:59:04,996 --> 00:59:08,940 الجمهور: تحتاج إلى أن يأتي [INAUDIBLE] بعد for i 1363 00:59:08,940 --> 00:59:15,840 في نطاق n بحيث يعرف ما هو سعال؟ 1364 00:59:15,840 --> 00:59:17,090 ديفيد مالان: ليس في هذه الحالة. 1365 00:59:17,090 --> 00:59:22,462 لذا فالترتيب الآن مقبول لأن Python الأولى ترى هنا 1366 00:59:22,462 --> 00:59:23,420 تعريف main. 1367 00:59:23,420 --> 00:59:24,500 حسنا، فهمت. 1368 00:59:24,500 --> 00:59:27,380 ثم تقول، ها هو تعريف سعال، حسنًا ، فهمت. 1369 00:59:27,380 --> 00:59:30,020 لكنها لا تستدعي في الواقع هذه الدالات حتى الآن. 1370 00:59:30,020 --> 00:59:33,170 يتم طرح أخطاء Python فقط في ما يُسمى وقت التشغيل، 1371 00:59:33,170 --> 00:59:37,490 وقت تشغيل البرنامج، والذي يعني فقط عندما يتم استدعاء main 1372 00:59:37,490 --> 00:59:40,997 تقوم Python فعليًا بتنفيذ السطر 4 ومن ثم ترى، 1373 00:59:40,997 --> 00:59:42,830 أوه، أنا أحتاج إلى استدعاء دالة تُسمى سعال. 1374 00:59:42,830 --> 00:59:45,350 ولكن هذا جيد لأنها رأتها في وقت سابق عندما قرأت 1375 00:59:45,350 --> 00:59:47,340 لأول مرة الملف من الأعلى إلى الأسفل. 1376 00:59:47,340 --> 00:59:49,940 لذلك الأمر مهم عندما يتم استدعاء الدالات، 1377 00:59:49,940 --> 00:59:54,000 وليس مكان ظهورها، في حد ذاته، في الملف، الترتيب الذي يتم 1378 00:59:54,000 --> 00:59:54,660 استدعاؤها به. 1379 00:59:54,660 --> 00:59:57,300 أي أسئلة أخرى؟ 1380 00:59:57,300 --> 01:00:00,725 حسنًا، نعم؟ 1381 01:00:00,725 --> 01:00:04,190 الجمهور: أنا لا أعرف من أين تقوم [INAUDIBLE]. 1382 01:00:04,190 --> 01:00:07,094 كيف تحدد n كعدد صحيح؟ 1383 01:00:07,094 --> 01:00:09,010 ديفيد مالان: كيف أحدد n كعدد صحيح؟ 1384 01:00:09,010 --> 01:00:10,240 هذا هو الشيء اللطيف بشأن Python. 1385 01:00:10,240 --> 01:00:12,031 إذا كنت تريد متغير أو معلمة، فقط 1386 01:00:12,031 --> 01:00:14,950 فابدأ في استخدامها دون الإشارة إلى نوع بياناتها. 1387 01:00:14,950 --> 01:00:18,360 لذا وضعتُ n بين قوسين في هذه الدالة، ويعني، 1388 01:00:18,360 --> 01:00:21,960 مرحبًا، Python، دعي هذه الدالة تأخذ مدخل يُسمى n. 1389 01:00:21,960 --> 01:00:24,840 ويمكن أن يكون في الواقع أي نوع للبيانات-- عدد صحيح، أو قيمة كسرية، أو سلسلة، 1390 01:00:24,840 --> 01:00:26,010 أو حتى شيء آخر. 1391 01:00:26,010 --> 01:00:28,950 الأمر متروك لي لاستخدامها بشكل مسؤول كرقم 1392 01:00:28,950 --> 01:00:32,560 ولاستدعائها بشكل مسؤول استخدام رقم. 1393 01:00:32,560 --> 01:00:33,750 سؤال جيد. 1394 01:00:33,750 --> 01:00:34,388 أجل؟ 1395 01:00:34,388 --> 01:00:36,925 الجمهور: لذا من الممكن أن يعمل متغير على تغيير نوع؟ 1396 01:00:36,925 --> 01:00:39,050 ديفيد مالان: نعم، بالفعل، يمكن لمتغير 1397 01:00:39,050 --> 01:00:40,910 تغيير نوع، ملاحظة جيدة. 1398 01:00:40,910 --> 01:00:45,560 لذا نعم، ليست Python لغة مكتوبة قوية، إذا جاز التعبير. 1399 01:00:45,560 --> 01:00:48,050 لغة C مكتوبة قوية حيث إذا قمتُ بكتابة شيء int، 1400 01:00:48,050 --> 01:00:49,850 فإنه يبقى int إلى الأبد. 1401 01:00:49,850 --> 01:00:53,120 تمت كتابة Python بشكل غير دقيق، حيث يمكن أن يكون x عدد صحيح في البداية. 1402 01:00:53,120 --> 01:00:55,580 ولكن إذا كنتَ تريد حقًا تحويلها إلى سلسلة، يمكنك فعل ذلك. 1403 01:00:55,580 --> 01:01:00,140 لكن سيكون التقليد هناك، نعم، يمكنك القيام بذلك، لكن لا تقم بذلك. 1404 01:01:00,140 --> 01:01:02,780 إذن لدى Python، بصراحة، نوع من التعجرف 1405 01:01:02,780 --> 01:01:04,460 كونها لغة للبالغين إلى حد ما. 1406 01:01:04,460 --> 01:01:06,560 نعم، يمكنك القيام بذلك، ولكن لا تقم بذلك. 1407 01:01:06,560 --> 01:01:08,477 لماذا يجب أن نحميكم من أنفسكم؟ 1408 01:01:08,477 --> 01:01:11,476 ومن هذا المنطلق، تحتاج إلى أن تكون مسؤولاً أكثر قليلاً بشأنها. 1409 01:01:11,476 --> 01:01:13,310 لكن مجددًا، توجد وسيطات بكلا الطريقتين. 1410 01:01:13,310 --> 01:01:16,820 وهي تزيح الأخطاء المحتملة التي ستزيلها C من أجلك. 1411 01:01:16,820 --> 01:01:19,820 وهذا هو المكان حيث يبدأ البشر في الاختلاف حول المستجدات 1412 01:01:19,820 --> 01:01:23,390 والجوانب السلبية للغات، سواء يجب أن تكون اللغة قوية أو غير دقيقة 1413 01:01:23,390 --> 01:01:25,290 أو لم تتم كتابتها على الإطلاق. 1414 01:01:25,290 --> 01:01:26,670 ملاحظة جيدة. 1415 01:01:26,670 --> 01:01:29,330 لذا دعونا نلقي نظرة على نموذج كان شائعًا جدًا في C 1416 01:01:29,330 --> 01:01:31,280 عندما أردنا أن نقوم بشيء مرارًا وتكرارًا 1417 01:01:31,280 --> 01:01:34,370 لنرى كيف يتم ذلك بالفعل بشكل مختلف قليلاً في Python الآن. 1418 01:01:34,370 --> 01:01:37,880 دعوني أمضي قدمًا وأقوم بإنشاء ملف يُسمى positive.py 1419 01:01:37,880 --> 01:01:40,950 وأمضي قدمًا وأكتب برنامجًا بشكل سريع قليلاً هنا. 1420 01:01:40,950 --> 01:01:44,250 لذا من CS50، دعوني أمضي قدمًا وأقوم باستيراد getInt، 1421 01:01:44,250 --> 01:01:46,030 حتى يمكننا الحصول على أعداد صحيحة من المستخدم. 1422 01:01:46,030 --> 01:01:47,780 دعوني أمضي قدمًا وأُحدّد دالة main 1423 01:01:47,780 --> 01:01:53,940 التي ببساطة ستقوم بكتابة i، والذي سيكون المتغير الخاص بي، وتحصل على positive int، 1424 01:01:53,940 --> 01:01:56,180 وتطلب من المستخدم، كما قمنا بذلك منذ أسابيع، 1425 01:01:56,180 --> 01:01:58,880 وإذا كنتم تتذكرون، لعدد صحيح موجب. 1426 01:01:58,880 --> 01:02:02,240 ومن ثم تمضي قدمًا وتطبعه بشكل ملل جدًا. 1427 01:02:02,240 --> 01:02:03,860 هذا كل ما يقوم به هذا البرنامج. 1428 01:02:03,860 --> 01:02:06,110 ودعوني أمضي قدمًا وفقط من التذكر-- 1429 01:02:06,110 --> 01:02:08,930 على الرغم من أن نسخ ولصق هذه السلسلة التي تبدو مشفرة جيد جدًا، 1430 01:02:08,930 --> 01:02:13,590 سنكون مهملين فقط إذا لم نوضح لك كيف يقوم معظم الأشخاص بذلك. 1431 01:02:13,590 --> 01:02:15,770 لذلك إذا قمت بذلك، هذا برنامج كامل، 1432 01:02:15,770 --> 01:02:21,120 باستثناء أن ما هو الشيء غير الموجود حتى الآن؟ 1433 01:02:21,120 --> 01:02:24,265 من المحتمل أنه لا توجد Get positive int، تمامًا كما لم تكن موجودة في الأسبوع الأول، 1434 01:02:24,265 --> 01:02:25,890 لأنه يجب أن نخترعها بأنفسنا. 1435 01:02:25,890 --> 01:02:28,030 توجد Get int، ولكن لا توجد Get positive int. 1436 01:02:28,030 --> 01:02:30,113 وفقط من أجل إثبات ذلك، لنجرب هذا. 1437 01:02:30,113 --> 01:02:33,360 Python من positive.py، لاحظوا أن لدينا خطأ اسم غير محدد في 1438 01:02:33,360 --> 01:02:34,790 get positive int. 1439 01:02:34,790 --> 01:02:36,280 حسنًا، إذن يمكننا إصلاح ذلك. 1440 01:02:36,280 --> 01:02:38,460 يمكننا حرفيًا أن نحددها، أو def it. 1441 01:02:38,460 --> 01:02:40,920 لذا get positive int. 1442 01:02:40,920 --> 01:02:42,670 سيتطلب الأمر الطلب من المستخدم، 1443 01:02:42,670 --> 01:02:45,870 تمامًا كما فعلنا منذ أسابيع، السلسلة التي تريد عرضها له أو لها. 1444 01:02:45,870 --> 01:02:49,350 والآن دعوني أمضي قدمًا وأحصل على عدد صحيح موجب. 1445 01:02:49,350 --> 01:02:51,930 ما هو نوع بنية البرمجة التي استخدمناها 1446 01:02:51,930 --> 01:02:55,063 في C للقيام بشيء مرارًا وتكرارًا؟ 1447 01:02:55,063 --> 01:02:55,822 الجمهور: التكرار الحلقي. 1448 01:02:55,822 --> 01:02:58,030 ديفيد مالان: تكرار حلقي، بالتأكيد، ولكن على وجه التحديد، 1449 01:02:58,030 --> 01:03:00,700 للقيام بشيء ما مرة واحدة على الأقل ومن ثم ربما 1450 01:03:00,700 --> 01:03:02,614 مرارًا وتكرارًا إذا لم يتعاونوا؟ 1451 01:03:02,614 --> 01:03:03,280 الجمهور: While. 1452 01:03:03,280 --> 01:03:04,550 ديفيد مالان: لنكتب while. 1453 01:03:04,550 --> 01:03:06,730 لا نكتب while في Python. 1454 01:03:06,730 --> 01:03:09,750 لذا هذه الميزة المفيدة لمدخل المستخدم غير موجودة. 1455 01:03:09,750 --> 01:03:10,745 لذا هذا جيد. 1456 01:03:10,745 --> 01:03:12,370 نحتاج إلى حل هذا بشكل مختلف فقط. 1457 01:03:12,370 --> 01:03:15,190 وبصراحة، في C، يمكنك أن تحل هذه المشكلة بشكل مختلف. 1458 01:03:15,190 --> 01:03:16,239 لا تحتاج إلى كتابة while. 1459 01:03:16,239 --> 01:03:17,780 كان يمكننا أن نستبعد ذلك من أجلكم. 1460 01:03:17,780 --> 01:03:19,071 يمكن أن تستبعد C ذلك. 1461 01:03:19,071 --> 01:03:21,820 يمكنكم حل كل المشاكل التي ظهرت في الأسابيع الماضية 1462 01:03:21,820 --> 01:03:23,980 باستخدام for loop أو while loop. 1463 01:03:23,980 --> 01:03:26,140 كتابة while هي مجرد ميزة مفيدة ورائعة. 1464 01:03:26,140 --> 01:03:27,520 لكن يمكننا محاكاة ذلك. 1465 01:03:27,520 --> 01:03:30,070 والطريقة البايثونية للقيام بذلك هي على النحو التالي. 1466 01:03:30,070 --> 01:03:32,860 بإزاحة تكرار حلقي لا نهائي بشكل متعمد، لأنه من المحتمل 1467 01:03:32,860 --> 01:03:34,690 أنكم تريدون القيام بالتكرار الحلقي. 1468 01:03:34,690 --> 01:03:37,210 لكن سيكون المنطق هو، أعطني تكرار حلقي لا نهائي 1469 01:03:37,210 --> 01:03:40,390 وسأقوم بتقسيمه عندما أكون مستعدًا لتقسيمه. 1470 01:03:40,390 --> 01:03:41,740 سيكون هذا هو التقليد. 1471 01:03:41,740 --> 01:03:43,820 إذن، في حين أن ما يلي صحيح، قم بذلك. 1472 01:03:43,820 --> 01:03:46,190 أمضي قدمًا وأعلن عن متغير يُسمى n. 1473 01:03:46,190 --> 01:03:48,440 احصل على int من المستخدم وقم بتمريره في ذلك المُحث نفسه. 1474 01:03:48,440 --> 01:03:50,440 إذن get int، كتبنا-- طاقم العمل-- 1475 01:03:50,440 --> 01:03:52,750 المُحث هو كل ما كتبتُه هنا. 1476 01:03:52,750 --> 01:03:55,480 إذن قم فقط بالنسخ واللصق من إصدار C. 1477 01:03:55,480 --> 01:03:59,110 ثم تحت أي ظروف تجعلني أريد تقسيم هذا التكرار الحلقي اللا نهائي 1478 01:03:59,110 --> 01:04:01,902 إذا تم استدعاء الدالة لكتابة get positive int؟ 1479 01:04:01,902 --> 01:04:02,776 الجمهور: [INAUDIBLE] 1480 01:04:02,776 --> 01:04:04,780 ديفيد مالان: أجل، إذا كان n أكبر من 0، 1481 01:04:04,780 --> 01:04:08,110 ثم ما تزال لدي فرصة لتقسيم الكلمة الرئيسية، تمامًا كما فعلنا في C. 1482 01:04:08,110 --> 01:04:09,790 يمكنني تقسيم هذا التكرار الحلقي. 1483 01:04:09,790 --> 01:04:13,480 ومن ثم بمجرد أن أقوم بذلك، يمكنني المضي قدمًا واسترجاع n فقط. 1484 01:04:13,480 --> 01:04:16,060 أو من أجل هذا الأمر، يمكنني تكثيف هذه قليلاً. 1485 01:04:16,060 --> 01:04:19,570 يمكنني فقط استرجاع n على الفور وربطه فقط قليلاً. 1486 01:04:19,570 --> 01:04:21,100 لذا هناك طرق متعددة للقيام بذلك. 1487 01:04:21,100 --> 01:04:23,980 وإلا سيقوم فقط بتكرار حلقي وتكرار حلقي للأبد. 1488 01:04:23,980 --> 01:04:26,260 إذن دعوني أمضي قدمًا الآن وأقوم بتشغيل positive.py 1489 01:04:26,260 --> 01:04:32,920 من خلال Python، عدد صحيح موجب مثل -1، ربما -2، 0، حسنًا، 1. 1490 01:04:32,920 --> 01:04:34,450 والآن هي، في الواقع، تتعاون. 1491 01:04:34,450 --> 01:04:36,000 إذن هذا مجرد نموذج شائع. 1492 01:04:36,000 --> 01:04:38,980 هذا هو الشيء الذي يحدث عندما تتعلمون لغة جديدة وهي بصراحة 1493 01:04:38,980 --> 01:04:40,480 تميل إلى تعطيل الأشخاص في البداية. 1494 01:04:40,480 --> 01:04:42,760 تحتاجون إلى تعلم طريقة JavaScript للقيام بالأشياء. 1495 01:04:42,760 --> 01:04:44,840 تحتاجون إلى تعلم طريقة Python للقيام بالأشياء. 1496 01:04:44,840 --> 01:04:47,310 ولكن بعد ذلك ستبدأون في ملاحظة ما تسمى بأنماط التصميم هذه. 1497 01:04:47,310 --> 01:04:49,240 في أي وقت تريدون القيام بشيء في Python مرارًا وتكرارًا، 1498 01:04:49,240 --> 01:04:50,390 نعم، تريدون التكرار الحلقي. 1499 01:04:50,390 --> 01:04:54,130 ولكن إذا كنتم تريدون القيام بشيء بالتأكيد مرة واحدة وربما مرة أخرى؟ 1500 01:04:54,130 --> 01:04:56,440 ما زلتم تستخدمون التكرار الحلقي، ولكن بشكل متعمد 1501 01:04:56,440 --> 01:05:00,170 تستنتجون، عادة، تكرار حلقي لا نهائي، وتقومون بتقسيمه عندما تكونوا مستعدين. 1502 01:05:00,170 --> 01:05:01,630 إذن هو نهج شائع جدًا. 1503 01:05:01,630 --> 01:05:06,670 إذن لا يُترجم كل شيء حرفيًا من C ذهابًا وإيابًا. 1504 01:05:06,670 --> 01:05:10,630 أي أسئلة على هذا الجزء؟ 1505 01:05:10,630 --> 01:05:11,563 نعم، في الخلف؟ 1506 01:05:11,563 --> 01:05:15,427 الجمهور: هذا الشيء الذي فعلته للتو مع while for loop، 1507 01:05:15,427 --> 01:05:19,291 هل هذا [INAUDIBLE] يقوم بتهيئة متغير يُسمى [INAUDIBLE] 1508 01:05:19,291 --> 01:05:23,354 إلى عدد سالب ومن ثم يجعل عندما يكون n أقل من 0-- 1509 01:05:23,354 --> 01:05:24,770 ديفيد مالان: سؤال جيد حقًا. 1510 01:05:24,770 --> 01:05:27,380 هل يُفضل هذا النهج بدلاً من الإعلان، ربما هنا، 1511 01:05:27,380 --> 01:05:32,220 عن متغير يساوي قيمة ما معروفة، مثل صفر أو أي شيء، 1512 01:05:32,220 --> 01:05:33,770 ومن ثم يقوم بتحديثه؟ 1513 01:05:33,770 --> 01:05:36,830 الإجابة المختصرة هي، نعم، لأن نهجكم، في حين أنه صحيح، 1514 01:05:36,830 --> 01:05:40,170 فليس مصممًا بشكل جيد، يمكن القول لأنه ليس ضروريًا فقط. 1515 01:05:40,170 --> 01:05:43,259 وعلى طريقة Python، وهي حقًا طريقة مصممة بشكل جيد 1516 01:05:43,259 --> 01:05:45,050 للقيام بمعظم الأشياء التي ستكون قيد الاستخدام كسطور قليلة 1517 01:05:45,050 --> 01:05:47,780 قدر الإمكان طالما أنها ستظل قابلة للقراءة وللفهم، 1518 01:05:47,780 --> 01:05:50,780 ويمكنني القول أن ذلك هو ما سيحدث بمجرد أن تعتادوا على الصيغة. 1519 01:05:50,780 --> 01:05:56,030 ولكن هذا يثير نقطة شيقة عن موضوع واحد آخر في C. لقد اختفى Scope 1520 01:05:56,030 --> 01:05:59,480 من على الشاشة تمامًا، على الأقل كما رأيناه سابقًا. 1521 01:05:59,480 --> 01:06:02,570 كان Scope يشير إلى مكان متغير. 1522 01:06:02,570 --> 01:06:05,577 وقمنا بتعريفه بشكل أساسي وعرضي بين قوسين متعرجين، 1523 01:06:05,577 --> 01:06:07,160 الأقواس المتعرجة المفتوحة الحديثة أكثر. 1524 01:06:07,160 --> 01:06:10,790 حسنًا، لم تعد هناك أقواس متعرجة، إذن يتضح أن المتغيرات بشكل افتراضي 1525 01:06:10,790 --> 01:06:12,530 لديها دالة scope هنا. 1526 01:06:12,530 --> 01:06:17,600 إذن عندما تعلنوا عن n على السطر 9، يمكنكم استخدامه في Python على السطر 10. 1527 01:06:17,600 --> 01:06:18,350 وأتعلمون ماذا؟ 1528 01:06:18,350 --> 01:06:22,880 يمكنكم استخدامه حتى على السطر 12، على الرغم من إعلانه بداخل 1529 01:06:22,880 --> 01:06:24,870 التكرار الحلقي هذا بالأعلى. 1530 01:06:24,870 --> 01:06:27,170 إذن بمجرد أن تعلنوا عن متغير على هذا السطر، 1531 01:06:27,170 --> 01:06:30,654 يمكنكم استخدامه في أي مكان على سطر لاحق ضمن الدالة نفسها. 1532 01:06:30,654 --> 01:06:33,570 إذن بشكل منطقي، هذا أمر سيء قليلاً حيث يتاح لكم القيام بهذا. 1533 01:06:33,570 --> 01:06:35,570 ولكن من ناحية أخرى، إنه مناسب للغاية 1534 01:06:35,570 --> 01:06:37,570 لأنكم لن تضطروا إلى التعامل مع هذه الأشياء 1535 01:06:37,570 --> 01:06:40,130 مثل الإعلان عن المتغير بالأعلى هنا فقط لاستخدامه بالأسفل هنا. 1536 01:06:40,130 --> 01:06:42,980 إذن، هذا أمر واحد صغير لن تفكروا به. 1537 01:06:42,980 --> 01:06:46,250 حسنًا، دعونا نُلقي نظرة على بضعة أمثلة من الأسبوع الثاني 1538 01:06:46,250 --> 01:06:49,550 حيث قدّمنا فيه ​​مصفوفات وسلاسل بشكل عام أكثر 1539 01:06:49,550 --> 01:06:51,620 لرؤية ما تغير الآن، أيضًا. 1540 01:06:51,620 --> 01:06:56,330 ستتذكرون أنه في الأسبوع الثاني، ربما، تناولنا مثالاً حول كتابة الأحرف الكبيرة. 1541 01:06:56,330 --> 01:06:59,540 ودعوني أمضي قدمًا وألقي نظرة على الإصدار الثالث من ذلك، 1542 01:06:59,540 --> 01:07:01,580 وأقوم بالتكبير أيضًا، ولكن بالتحويل إلى Python. 1543 01:07:01,580 --> 01:07:04,190 كان الهدف في الحياة هو أخذ مدخل من المستخدم 1544 01:07:04,190 --> 01:07:06,800 وتكبير جميع أحرفه فقط هناك. 1545 01:07:06,800 --> 01:07:08,660 إذن إذا كنت أكتب جميع اسمي بأحرف صغيرة، 1546 01:07:08,660 --> 01:07:10,830 يجب أن يعود جميعه بأحرف كبيرة. 1547 01:07:10,830 --> 01:07:12,650 إذن من مكتبة CS50، دعوني أمضي قدمًا 1548 01:07:12,650 --> 01:07:16,310 وأقوم باستيراد getString بحيث يكون لدي بعض المدخلات من المستخدم. 1549 01:07:16,310 --> 01:07:20,660 ثم دعوني أمضي قدمًا وأحصل على سلسلة من المستخدم فقط، مثل اسمه. 1550 01:07:20,660 --> 01:07:24,530 ومن ثم أريد أن أمضي قدمًا وأكتبه بأحرف كبيرة. 1551 01:07:24,530 --> 01:07:27,470 إذن دعوني أمضي قدمًا وأفعل هذا. 1552 01:07:27,470 --> 01:07:29,090 وهذه ميزة رائعة. 1553 01:07:29,090 --> 01:07:33,680 في C كنت أفعل هذا لـ int i يساوي صفر وi أقل من strlen. 1554 01:07:33,680 --> 01:07:36,850 أعني، ربما تتذكرون نموذج التكرار على سلسلة. 1555 01:07:36,850 --> 01:07:38,660 لكن Python ممتعة أكثر فقط. 1556 01:07:38,660 --> 01:07:40,820 لـc في s-- 1557 01:07:40,820 --> 01:07:46,280 هذا سينتج تكرار حلقي عبر السلسلة s، مما يتيح لك الوصول إلى جميع الأحرف 1558 01:07:46,280 --> 01:07:49,040 في كل مرة، وتسمية ذلك المتغير c. 1559 01:07:49,040 --> 01:07:52,940 إذن ما الذي أريد القيام به، فقط كخطوة مبدئية، 1560 01:07:52,940 --> 01:07:56,820 خطوة صغيرة، إذا صح التعبير، دعونا فقط نطبع c، فقط لرؤية ما سيحدث. 1561 01:07:56,820 --> 01:08:01,280 دعوني أمضي قدمًا بالأسفل هنا وأقوم بكتابة Python بحرفين كبيرين. 1562 01:08:01,280 --> 01:08:03,590 دعوني أمضي قدمًا وأكتب اسمي بأحرف صغيرة. 1563 01:08:03,590 --> 01:08:06,260 حسنًا، ولماذا يتم عرضه بشكل عمودي 1564 01:08:06,260 --> 01:08:08,880 هكذا، حرف واحد في كل سطر؟ 1565 01:08:08,880 --> 01:08:10,440 نعم، تحصلون على السطر المجاني-- 1566 01:08:10,440 --> 01:08:11,997 سطر جديد مجاني هذه المرة. 1567 01:08:11,997 --> 01:08:13,580 إذن دعونا نرى كيف يمكنكم تعطيل ذلك. 1568 01:08:13,580 --> 01:08:15,300 إنه يبدو غبيًا، بصراحة. 1569 01:08:15,300 --> 01:08:20,069 لكن يمكنكم كتابة end يساوي علامة اقتباس علامة إنهاء الاقتباس، وبالتالي هذا يكشف عن ميزة جديدة 1570 01:08:20,069 --> 01:08:21,779 من Python ولا توجد في C. 1571 01:08:21,779 --> 01:08:26,417 يتضح أن Python تحتوي ليس فقط على الوسيطات الموضعية، كما تُسمى، 1572 01:08:26,417 --> 01:08:28,500 حيث تقومون فقط بالتمرير في الوسيطات بين الفواصل. 1573 01:08:28,500 --> 01:08:30,120 وهذا ما كنا نفعله في C. 1574 01:08:30,120 --> 01:08:33,630 لكن Python تحتوي أيضًا على الوسيطات المُسماة، حيث 1575 01:08:33,630 --> 01:08:35,939 يمكنكم تحديد اسم الوسيطة، 1576 01:08:35,939 --> 01:08:38,250 ثم علامة يساوي، ثم القيمة. 1577 01:08:38,250 --> 01:08:42,569 وقوة الوسيطات المُسماة، حتى وإن كان هذا مثال صغير، 1578 01:08:42,569 --> 01:08:46,154 تعني أنه يمكنكم أحيانًا التمرير في الوسيطات بأي ترتيب. 1579 01:08:46,154 --> 01:08:47,279 لا يجب أن تتذكروا. 1580 01:08:47,279 --> 01:08:49,529 لن تكونوا مضطرين لسحب دليل CS50 أو صفحات man 1581 01:08:49,529 --> 01:08:52,649 لتتذكروا ما هو ترتيب جميع هذه الوسيطات. 1582 01:08:52,649 --> 01:08:55,410 يمكنكم تمريرها في أي ترتيب، ولكن عبر تحديد 1583 01:08:55,410 --> 01:08:58,920 اسم الوسيطة، علامة يساوي، وقيمتها. 1584 01:08:58,920 --> 01:09:01,089 وفي Python 2، يمكنكم الحصول على وسيطات اختيارية. 1585 01:09:01,089 --> 01:09:02,880 من الواضح أنه، في جميع هذه الأمثلة حتى الآن، 1586 01:09:02,880 --> 01:09:06,180 لم يسبق لي كتابة كلمة end وعلامة يساوي حتى الآن. 1587 01:09:06,180 --> 01:09:09,899 لكن ما تدعمه Python هو القيم الافتراضية للوسيطات. 1588 01:09:09,899 --> 01:09:14,550 ولذا إذا نظرتُ في الوثائق الخاصة بلغة Python، فهذا يعادل-- 1589 01:09:14,550 --> 01:09:18,580 هذا التسلسل الذي يبدو مشفرًا-- هذا يعادل السلوك الافتراضي، 1590 01:09:18,580 --> 01:09:20,979 وهو عدم كتابة أيًا من ذلك على الإطلاق. 1591 01:09:20,979 --> 01:09:25,080 تشير end إلى، لدالة الطباعة، أنه يجب أن تُنهوا كل سطر 1592 01:09:25,080 --> 01:09:26,609 بذلك الحرف الافتراضي. 1593 01:09:26,609 --> 01:09:28,680 وبالتالي، إذا كنتم تريدون تجاوزه، 1594 01:09:28,680 --> 01:09:31,800 يمكنكم فقط تغييره إلى سلسلة فارغة، علامة اقتباس وعلامة إنهاء الاقتباس. 1595 01:09:31,800 --> 01:09:36,660 إذن إذا قمت الآن بتشغيل هذا مجددًا وقمت بتشغيله باستخدام اسمي، 1596 01:09:36,660 --> 01:09:39,000 الآن سأحصل عليه هكذا، حرف واحد في كل مرة. 1597 01:09:39,000 --> 01:09:42,149 ولكن يمكنكم كتابة أشياء غريبة، مثل ها ها ها ها ها ها-- 1598 01:09:42,149 --> 01:09:43,644 لن تفعلوا ذلك. 1599 01:09:43,644 --> 01:09:45,060 لا أعرف لماذا تماديت في ذلك. 1600 01:09:45,060 --> 01:09:48,984 ولكن أعني أنه يقوم بالأمر نفسه بالضبط 1601 01:09:48,984 --> 01:09:50,859 لأنكم فقط تقومون بتغيير نهاية السطر. 1602 01:09:50,859 --> 01:09:54,090 لذا لا تقوموا بذلك، ولكن قوموا بشيء آخر مثل هذا، بدلًا من ذلك. 1603 01:09:54,090 --> 01:09:57,330 إذن لنفترض أنني أريد الآن تكبير الحرف الأول. 1604 01:09:57,330 --> 01:10:02,910 يتضح أن السلاسل في Python قوية أكثر من السلاسل 1605 01:10:02,910 --> 01:10:05,190 في C. في C، لا توجد أي سلسلة. 1606 01:10:05,190 --> 01:10:06,160 كانت هذه كذبة. 1607 01:10:06,160 --> 01:10:09,750 إنها مجرد تسلسل من الأحرف كما يُشار إليها من خلال عنوان في الذاكرة. 1608 01:10:09,750 --> 01:10:12,270 في Python، السلسلة هي كائن فعلي. 1609 01:10:12,270 --> 01:10:13,410 إنها بنية البيانات. 1610 01:10:13,410 --> 01:10:16,470 وإذا كنتم تفكرون بشأن C، كانت لدينا بنيات حتى نهاية عرضنا 1611 01:10:16,470 --> 01:10:19,230 في C، عُقد وبنيات وبنيات student وما شابه ذلك. 1612 01:10:19,230 --> 01:10:22,027 تُشبه السلسلة في Python هذه الحاوية التي بداخلها 1613 01:10:22,027 --> 01:10:23,610 في مكان ما جميع هذه الأحرف. 1614 01:10:23,610 --> 01:10:27,540 ولكن يوجد في تلك الحاوية أو البنية أيضًا دالات تم إنشاؤها، 1615 01:10:27,540 --> 01:10:29,850 وميزات سلسلة يمكنكم فقط استدعاؤها. 1616 01:10:29,850 --> 01:10:33,120 إذن في C، قلنا شيئًا مثل toUpper 1617 01:10:33,120 --> 01:10:36,180 ومن ثم تمريرها كمدخل إلى دالة تُسمى toUpper 1618 01:10:36,180 --> 01:10:37,770 الحرف الذي نهتم به. 1619 01:10:37,770 --> 01:10:40,080 لكن تعكس Python المنطق إلى حد ما. 1620 01:10:40,080 --> 01:10:43,170 تأتي السلاسل باستخدام دالة تم إنشاؤها 1621 01:10:43,170 --> 01:10:47,260 تتيثح لكم العمل على الحرف المُعطى تلقائيًا. 1622 01:10:47,260 --> 01:10:50,160 إذن في Python، تعد الصيغة في الواقع هي الحرف نفسه. 1623 01:10:50,160 --> 01:10:52,530 استخدام تدوين النقطة لأنه بنية. 1624 01:10:52,530 --> 01:10:54,480 ومن ثم يمكنكم حرفيًا-- 1625 01:10:54,480 --> 01:10:55,080 عذرًا. 1626 01:10:55,080 --> 01:10:58,330 يمكنكم حرفيًا كتابة upper. 1627 01:10:58,330 --> 01:11:04,290 إذن فهذا يعني، ما تم إنشاؤه في نوع السلسلة في Python 1628 01:11:04,290 --> 01:11:07,942 هو مجموعة من الميزات، إحداها دالة تُسمى upper. 1629 01:11:07,942 --> 01:11:10,650 والصيغة التي تستدعوها بها هي اسم المتغير 1630 01:11:10,650 --> 01:11:14,865 أو اسم السلسلة نقطة ثم اسم الدالة قوس مفتوح، قوس مغلق. 1631 01:11:14,865 --> 01:11:16,240 والآن هذا هو النموذج فقط. 1632 01:11:16,240 --> 01:11:17,580 لا توجد مكتبة من نوع C. 1633 01:11:17,580 --> 01:11:19,470 لا توجد دالة toupper أو tolower. 1634 01:11:19,470 --> 01:11:22,020 تم إنشاء هذه الميزات الآن في السلاسل نفسها. 1635 01:11:22,020 --> 01:11:24,630 وهذا مثال عن التغليف، أو بشكل 1636 01:11:24,630 --> 01:11:26,700 عام أكثر، البرمجة التي تستهدف الكائن، شيء ما 1637 01:11:26,700 --> 01:11:29,460 ستكتشفوه إذا حصلتم على دورة مثل CS51 والتي 1638 01:11:29,460 --> 01:11:33,930 تُصمِم في أنواع البيانات نفسها جميع الدالات ذات الصلة. 1639 01:11:33,930 --> 01:11:37,420 ولا تُحيلها إلى مكتبة أخرى. 1640 01:11:37,420 --> 01:11:41,020 لذا إذا قمتُ بتنظيف هذا فقط من خلال تحريك المؤشر إلى السطر التالي، 1641 01:11:41,020 --> 01:11:45,750 آمل الآن أن تروا ديفيد مكتوبة كلها بأحرف كبيرة، نفس الفكرة 1642 01:11:45,750 --> 01:11:46,620 التي كانت من قبل. 1643 01:11:46,620 --> 01:11:48,220 ماذا عن طول هذه السلسلة؟ 1644 01:11:48,220 --> 01:11:50,370 هذا الأمر بسيط جدًا، ولكن إذا انتقلت إلى هنا، 1645 01:11:50,370 --> 01:11:54,106 دعوني أمضي قدمًا وأقوم بإنشاء ملف يُسمى strlen.py. 1646 01:11:54,106 --> 01:11:57,660 إذا أردتُ رؤية طول سلسلة ما، من CS50، قم باستيراد getString، 1647 01:11:57,660 --> 01:11:59,010 تمامًا كما فعلنا من قبل. 1648 01:11:59,010 --> 01:12:01,802 دعوني أمضي قدمًا وأحصل على سلسلة لنفسي، على سبيل المثال اسمي مجددًا. 1649 01:12:01,802 --> 01:12:04,760 ومن ثم هنا، إذا أردتُ طباعة طول السلسلة، في Python-- 1650 01:12:04,760 --> 01:12:06,732 في C، ستقولون strlen. 1651 01:12:06,732 --> 01:12:08,190 في Python، الأمر مختلف قليلاً. 1652 01:12:08,190 --> 01:12:10,780 في الواقع فقط تقولون len للطول. 1653 01:12:10,780 --> 01:12:13,830 إذن إذا مضيتُ قدمًا وقمتُ بتشغيل هذا من خلال strlen-- 1654 01:12:13,830 --> 01:12:15,960 strlen-- اكتب اسمي. 1655 01:12:15,960 --> 01:12:17,340 آمل بالفعل أن أرى خمسة. 1656 01:12:17,340 --> 01:12:20,640 ولا توجد فكرة أنكم تحتاجون إلى الاهتمام بالخط المائل العكسي صفر 1657 01:12:20,640 --> 01:12:23,410 من أجل إنهاء السلسلة. 1658 01:12:23,410 --> 01:12:25,119 أجل؟ 1659 01:12:25,119 --> 01:12:31,400 الجمهور: إذن upper هذا [INAUDIBLE] 1660 01:12:31,400 --> 01:12:32,900 ديفيد مالان: لا، في الواقع. 1661 01:12:32,900 --> 01:12:34,890 إذن هذه ملاحظة جيدة حقًا. 1662 01:12:34,890 --> 01:12:37,880 دعونا نرجع ونقوم بتحسين هذا في الواقع 1663 01:12:37,880 --> 01:12:42,380 بدلًا من مجرد ترجمته من ما كان عليه مثال المقارنة في C. دعوني 1664 01:12:42,380 --> 01:12:45,980 أمضي قدمًا هنا وأقول في الواقع، أتعلمون ماذا؟ 1665 01:12:45,980 --> 01:12:48,680 s يساوي upper s. 1666 01:12:48,680 --> 01:12:50,480 ومن ثم دعوني فقط أطبع s، ربما. 1667 01:12:50,480 --> 01:12:51,660 دعونا نرى ما سيحدث. 1668 01:12:51,660 --> 01:12:55,100 دعوني أرجع إلى هنا وأقوم بتشغيل Python من capitalize2. 1669 01:12:55,100 --> 01:12:57,230 Enter David. 1670 01:12:57,230 --> 01:12:58,730 وسيعمل على السلسلة بأكملها. 1671 01:12:58,730 --> 01:12:59,355 حدس جيد. 1672 01:12:59,355 --> 01:13:01,020 وبصراحة، لا أحتاج إلى القيام بذلك. 1673 01:13:01,020 --> 01:13:07,400 يمكنني فقط أن أقول upper هنا وأقوم بتشذيب هذا بالأسفل وأكتب 1674 01:13:07,400 --> 01:13:11,360 Python من capitalize2، وأكتب اسمي. 1675 01:13:11,360 --> 01:13:12,080 ما زال ذلك ينجح. 1676 01:13:12,080 --> 01:13:15,650 وإذا أردتُ حقًا أن أكون رائعًا، فأنا لا أحتاج إلى s على الإطلاق. 1677 01:13:15,650 --> 01:13:20,060 يمكنني أخذ هذه، والتخلص من ذلك، ووضع هذا هنا، وعلى الفور استدعاء 1678 01:13:20,060 --> 01:13:24,200 upper على مدخل المستخدم و أقوم بضم هذا إلى سطر واحد، ثم أكتب david، 1679 01:13:24,200 --> 01:13:25,200 وهذا، أيضًا، ينجح. 1680 01:13:25,200 --> 01:13:28,190 إذن فقط تحصلون على طرق للتعبير كثيرة جدًا جدًا. 1681 01:13:28,190 --> 01:13:29,030 سؤال جيد. 1682 01:13:29,030 --> 01:13:31,490 إذن كيف تعرفون حتى أن أشياء كهذه موجودة؟ 1683 01:13:31,490 --> 01:13:32,870 حسنًا، لمحة سريعة. 1684 01:13:32,870 --> 01:13:35,344 سيكون Google حقًا صديقكم في مثل هذه الحالات. 1685 01:13:35,344 --> 01:13:38,510 وستريدون أن تعرفوا في هذه المرحلة، أن هناك إصدارات مختلفة من Python. 1686 01:13:38,510 --> 01:13:40,460 يُعد العالم إلى حد ما مُتمسكًا وما يزال 1687 01:13:40,460 --> 01:13:43,930 يستخدم، الكثير من الأشخاص، الإصدار 2 من Python، وهو قديم منذ عدة سنوات 1688 01:13:43,930 --> 01:13:44,460 الآن. 1689 01:13:44,460 --> 01:13:45,489 نحن نستخدم الإصدار 3. 1690 01:13:45,489 --> 01:13:47,030 وهذا هو الطريق الذي يسير فيه العالم. 1691 01:13:47,030 --> 01:13:50,450 وبالفعل، فإن الإصدار Python 2 سيصبح مهجورًا أو موقوفًا تدريجيًا 1692 01:13:50,450 --> 01:13:52,040 في غضون عامين، من الناحية النظرية. 1693 01:13:52,040 --> 01:13:54,150 إذن عندما تجرون بحثًا في Google، يجب فقط أن تضعوا هذا في الاعتبار 1694 01:13:54,150 --> 01:13:57,230 حتي لا تشقوا طريقكم عن طريق الخطأ إلى البرامج التعليمية، والوثائق القديمة 1695 01:13:57,230 --> 01:13:57,920 و ما شابه ذلك. 1696 01:13:57,920 --> 01:14:03,380 إذن دعوني أمضي قدمًا وأبحث عن Python 3 string، أو str، وupper، 1697 01:14:03,380 --> 01:14:05,510 فقط لمعرفة إذا كان يمكنني الوصول إلى الوثائق. 1698 01:14:05,510 --> 01:14:07,790 هنا لديكم عدد من البرامج التعليمية. 1699 01:14:07,790 --> 01:14:11,300 ولكن إذا ركزنا هنا، ما الذي تريدون البحث عنه بشكل عام، 1700 01:14:11,300 --> 01:14:15,110 على الأقل عن الوثائق الرسمية، هو docs.python.org. 1701 01:14:15,110 --> 01:14:18,420 ترون في عنوان URL، إنه الإصدار 3، وهذا ما نريد الانتقال إليه. 1702 01:14:18,420 --> 01:14:21,120 إذن دعوني أمضي قدمًا وأنقر فوق هذا، مُشغلات السلسلة الشائعة. 1703 01:14:21,120 --> 01:14:22,550 وأُريد أن أنفي هذا-- 1704 01:14:22,550 --> 01:14:24,770 أعتقد، بشكل شخصي، أن وثائق Python 1705 01:14:24,770 --> 01:14:26,407 ليست سهلة الاستخدام جدًا بالنسبة إلى المبتدئ. 1706 01:14:26,407 --> 01:14:28,490 على سبيل المثال، إنها مكتوبة بشكل غامض إلى حد ما 1707 01:14:28,490 --> 01:14:30,800 يجب أن تتعمقوا جيدًا فيها لفهم أمور معينة. 1708 01:14:30,800 --> 01:14:31,372 هذا جيد. 1709 01:14:31,372 --> 01:14:33,080 ستعتادون عليها مع مرور الوقت. 1710 01:14:33,080 --> 01:14:34,996 ولكن إذا كنتم تشعرون بالزخم منها قليلًا، 1711 01:14:34,996 --> 01:14:39,050 يا إلهي، كل ما أُريد فقط أن أعرفه هو upper، الجميع يشعرون بهذا أيضًا. 1712 01:14:39,050 --> 01:14:42,350 إذن، control F أو Command F هو صديقكم، upper. 1713 01:14:42,350 --> 01:14:44,390 دعوني أمضي قدمًا وأبحث عن هذا. 1714 01:14:44,390 --> 01:14:47,400 وفي الواقع إنه غير موجود في هذه الصفحة، أليس كذلك؟ 1715 01:14:47,400 --> 01:14:50,430 سلسلة-- طرق السلسلة. 1716 01:14:50,430 --> 01:14:50,930 ها نحن ذا. 1717 01:14:50,930 --> 01:14:52,190 طرق السلسلة. 1718 01:14:52,190 --> 01:14:56,710 حسنًا، إذن أسفل طرق السلسلة، دعوني أمضي قدمًا وأبحث عن upper. 1719 01:14:56,710 --> 01:14:59,020 وبالأسفل هنا، في الواقع، توجد الوثائق. 1720 01:14:59,020 --> 01:15:02,490 إذن سيكون التقليد هو اسم نوع البيانات المطلوب-- 1721 01:15:02,490 --> 01:15:03,590 str للسلسلة-- 1722 01:15:03,590 --> 01:15:04,840 اسم الدالة هنا. 1723 01:15:04,840 --> 01:15:08,330 ستخبرك بين قوسين إذا كانت تأخذ أي وسيطات، لكنها لا تأخذ. 1724 01:15:08,330 --> 01:15:11,457 وهكذا تقوم بإرجاع نسخة من السلسلة مع جميع الأحرف المُصغرة 1725 01:15:11,457 --> 01:15:14,290 والتي تم تحويلها إلى أحرف كبيرة-- وهذا يعني فقط الأحرف الأبجدية 1726 01:15:14,290 --> 01:15:15,620 بشكل أساسي-- 1727 01:15:15,620 --> 01:15:17,870 ومن ثم بعض الوثائق الإضافية، وما شابه ذلك. 1728 01:15:17,870 --> 01:15:19,330 يُصبح الأمر في مستوى منخفض جدًا بسرعة. 1729 01:15:19,330 --> 01:15:21,160 تُعد هذه الوثائق معادلة لصفحات man. 1730 01:15:21,160 --> 01:15:23,380 ولا يوجد مرجع CS50 للغة Python. 1731 01:15:23,380 --> 01:15:25,630 كان ذلك فقط خاص بلغة C. إذن يجب أن تدركوا أنه توجد 1732 01:15:25,630 --> 01:15:27,052 هذه الوثائق المتاحة. 1733 01:15:27,052 --> 01:15:29,010 وستلاحظون وجود مجموعات من الدالات. 1734 01:15:29,010 --> 01:15:33,197 Strip هي في الواقع نوع من أنواع الدالات الشائعة، أو Strip L أو Strip R. 1735 01:15:33,197 --> 01:15:35,530 إذا كانت لديكم مسافة في بداية السطر أونهايته 1736 01:15:35,530 --> 01:15:39,160 لأن الشخص الموجود لديكم أصبح مهملاً قليلاً أو توجد سطور جديدة في ملف ما، 1737 01:15:39,160 --> 01:15:42,250 يمكنكم استدعاء strip على سلسلة والتخلص من المسافة على اليسار 1738 01:15:42,250 --> 01:15:43,715 واليمين لتنظيفه إلى حد ما. 1739 01:15:43,715 --> 01:15:46,090 وهذا مفيد للغاية لأشياء مثل تطبيقات علوم البيانات 1740 01:15:46,090 --> 01:15:48,756 وتحليل البيانات حيث تقومون فقط بتنظيف البيانات الفوضوية إلى حد ما. 1741 01:15:48,756 --> 01:15:51,710 إذن تم إنشاء العديد من الدالات مثل هذه من أجلكم. 1742 01:15:51,710 --> 01:15:55,060 حسنًا، إذن دعونا نُلقي نظرة على أمثلة أخرى قليلة تُذكرنا بالميزات 1743 01:15:55,060 --> 01:15:58,040 التي كانت لدينا في C، مثل هذه هنا. 1744 01:15:58,040 --> 01:15:59,950 لنفترض أنني أُريد أن أكتب برنامجًا يأخذ 1745 01:15:59,950 --> 01:16:02,545 وسيطات سطر الأوامر، التي تشبه إلى حد كبير تغيير الحجم، 1746 01:16:02,545 --> 01:16:04,045 والتي بدأنا بها قصة اليوم. 1747 01:16:04,045 --> 01:16:06,700 1748 01:16:06,700 --> 01:16:08,360 دعونا لا نستخدم مكتبة CS50. 1749 01:16:08,360 --> 01:16:09,340 لنقم بذلك. 1750 01:16:09,340 --> 01:16:13,540 إذا كنتم تريدون الوصول إلى argv، تذكرون أنها في C كانت تبدو مثل هذه-- int، 1751 01:16:13,540 --> 01:16:19,150 argc، سلسلة، argv. 1752 01:16:19,150 --> 01:16:20,830 كانت تبدو مثل هذه في C. 1753 01:16:20,830 --> 01:16:22,789 حسنًا، لسوء الحظ، إذا كنتم لا تستخدمون main، 1754 01:16:22,789 --> 01:16:25,330 سيكون أمرًا جيدًا إذا كان يمكنكم استخدام وسيطات سطر الأوامر. 1755 01:16:25,330 --> 01:16:27,070 ويمكنكم هذا بالفعل، ولكن يجب أن تقوموا باستيرادها. 1756 01:16:27,070 --> 01:16:29,230 إنها كمكتبة توفر لكم إمكانية الوصول. 1757 01:16:29,230 --> 01:16:33,730 من sys أو مكتبة النظام، يمكنكم استيراد argv في Python. 1758 01:16:33,730 --> 01:16:36,850 وهذا يمنحكم الوصول إلى وسيطات سطر الأوامر كميزة. 1759 01:16:36,850 --> 01:16:38,540 ثم يمكنكم قول شيء من هذا القبيل. 1760 01:16:38,540 --> 01:16:40,750 إذا كان طول argv-- 1761 01:16:40,750 --> 01:16:43,060 وهي مجرد مصفوفة، تذكرون، في C-- 1762 01:16:43,060 --> 01:16:47,260 يساوي يساوي 2، ثم امضوا قدمًا وقولوا مرحبًا. 1763 01:16:47,260 --> 01:16:52,030 دعوني أمضي قدمًا وأطبع ما قام المستخدم بكتابته أيًا كان، argv 1. 1764 01:16:52,030 --> 01:16:56,030 دعونا فقط بشكل افتراضي أيًا نقول مرحبًا بالعالم. 1765 01:16:56,030 --> 01:16:57,670 إذن باللغة الإنجليزية، ما الذي يحدث؟ 1766 01:16:57,670 --> 01:17:01,990 إذا كتب المستخدم وسيطة سطر الأوامر-- لنقل مرحبًا ذاك وذاك. 1767 01:17:01,990 --> 01:17:04,870 وأيضًا إذا لم يكتب الشخص وسيطة سطر أوامر واحدة بالضبط، 1768 01:17:04,870 --> 01:17:07,210 فقط لنقل، بشكل افتراضي، مرحبًا بالعالم. 1769 01:17:07,210 --> 01:17:08,170 لذا دعوني أقوم بحفظ هذا. 1770 01:17:08,170 --> 01:17:11,440 وأكتب Python من argv1، أو بالأحرى صفر. 1771 01:17:11,440 --> 01:17:12,200 Enter. 1772 01:17:12,200 --> 01:17:14,330 حسنًا، لم أكتب كلمة بعد الأمر. 1773 01:17:14,330 --> 01:17:18,440 الآن دعونا نفعل ذلك مجددًا وسأكتب اسم براين. 1774 01:17:18,440 --> 01:17:19,720 Enter، مرحبًا براين. 1775 01:17:19,720 --> 01:17:21,220 دعونا نفعل هذا مجددًا. 1776 01:17:21,220 --> 01:17:23,590 فيرونيكا، Enter. 1777 01:17:23,590 --> 01:17:27,700 الآن، هناك شيء ليس تمامًا نفسه كما في C. كم عدد الكلمات التي 1778 01:17:27,700 --> 01:17:30,770 كتبتُها للتو في المُحث؟ 1779 01:17:30,770 --> 01:17:31,810 3. 1780 01:17:31,810 --> 01:17:37,830 إذن سيقترح ذلك أن هذه هي argv0، وargv1، وargv2. 1781 01:17:37,830 --> 01:17:41,190 ومع ذلك، أقوم بطباعة argv1، وليس argv2. 1782 01:17:41,190 --> 01:17:43,470 إذن كيف أفكر في هذا؟ 1783 01:17:43,470 --> 01:17:47,430 التعليمة البرمجية صحيحة، ولكنها مختلفة عن C. 1784 01:17:47,430 --> 01:17:50,950 من الناحية الفنية ما الذي تقوم argv بتخزينه عند تشغيل أمر كهذا؟ 1785 01:17:50,950 --> 01:17:57,852 1786 01:17:57,852 --> 01:17:58,810 تذكرون، دعونا نسترجع ذلك. 1787 01:17:58,810 --> 01:18:02,055 في C، ما الذي قامت argv0 بتخزينه؟ 1788 01:18:02,055 --> 01:18:03,180 الجمهور: اسم الملف. 1789 01:18:03,180 --> 01:18:06,480 ديفيد مالان: اسم الملف أو اسم البرنامج الذي قمتَ بتشغيله للتو. 1790 01:18:06,480 --> 01:18:09,780 لاحظوا، على الرغم من أن البرنامج الذي قمتُ بتشغيله للتو يُسمى Python. 1791 01:18:09,780 --> 01:18:13,080 ولذا قد تعتقدون أن argv0 قد تحتوي على Python، 1792 01:18:13,080 --> 01:18:16,080 لكنها لا تحتوي على ذلك لأنه لاحظوا إذا قمتُ بطباعة argv1، 1793 01:18:16,080 --> 01:18:17,730 قد تعتقدون أنها 0، 1. 1794 01:18:17,730 --> 01:18:20,830 قد تعتقدون أنني قلتُ للتو مرحبًا argv0.py، لكنني لم أفعل. 1795 01:18:20,830 --> 01:18:24,720 من الواضح أن argv1 تطبع فيرونيكا أو براين. 1796 01:18:24,720 --> 01:18:27,379 إذن من المنطقي أن argv0 هي هذه، وهذا 1797 01:18:27,379 --> 01:18:28,920 يعني أن هذا، مثل، argv -1. 1798 01:18:28,920 --> 01:18:32,840 يتم استبعاد Python من وسيطة vector، كما يُطلق عليها. 1799 01:18:32,840 --> 01:18:35,800 لا تتضمن وسيطات سطر الأوامر اسم المُترجم. 1800 01:18:35,800 --> 01:18:39,720 ولكن بخلاف ذلك، هي تعمل بالضبط ما كانت تقوم به من قبل. 1801 01:18:39,720 --> 01:18:43,020 ولاحظوا، أيضًا، باستخدام علامة التبويب الجديدة هذه للبناء، 1802 01:18:43,020 --> 01:18:46,380 لاحظوا ما يمكنكم القيام به كلما أمكنكم الوصول إلى مصفوفة الأشياء. 1803 01:18:46,380 --> 01:18:52,569 إذا انتقلتُ إلى argv1.py و قمتُ باستيراد argv مجددًا، دعوني أمضي قدمًا الآن 1804 01:18:52,569 --> 01:18:53,610 وأقوم فقط-- أتعلمون ماذا؟ 1805 01:18:53,610 --> 01:18:57,990 For s في argv، وأمضي قدمًا وأطبع s. 1806 01:18:57,990 --> 01:18:59,220 هذا حقًا أمر موجز. 1807 01:18:59,220 --> 01:19:00,450 ما الذي سيفعله هذا؟ 1808 01:19:00,450 --> 01:19:04,500 دعوني أمضي قدمًا وأكتب Python من enter ،argv1. 1809 01:19:04,500 --> 01:19:06,490 ويقوم فقط بطباعة اسم الملف. 1810 01:19:06,490 --> 01:19:09,780 إذا مضيتُ قدمًا وقلتُ foo، bar ،baz، ثلاث كلمات عشوائية، 1811 01:19:09,780 --> 01:19:11,590 إنه يطبع كل تلك الكلمات. 1812 01:19:11,590 --> 01:19:14,310 إذن الشيء القوي في Python بصراحة هو هذا التكرار الحلقي. 1813 01:19:14,310 --> 01:19:17,190 لا يوجد int i، أقل من، زائد زائد، أي من ذلك. 1814 01:19:17,190 --> 01:19:19,380 تقولون فقط، أعطني متغير يُسمى s 1815 01:19:19,380 --> 01:19:22,950 وقم بتكرار الشيء بالكامل على اليمين، وهو ما يُفترض أنه، 1816 01:19:22,950 --> 01:19:25,020 في هذه الحالة، يكون مصفوفة. 1817 01:19:25,020 --> 01:19:26,790 يمكنكم أن تكونوا أقوى بكثير من ذلك. 1818 01:19:26,790 --> 01:19:29,080 إذا قمتُ-- كما حدث في C منذ أسابيع-- 1819 01:19:29,080 --> 01:19:32,550 بالنظر في الأحرف في هذه السلاسل-- دعوني أكتب argv2.py-- 1820 01:19:32,550 --> 01:19:38,026 لنفترض أن هذا التكرار لكل سلسلة في argv، 1821 01:19:38,026 --> 01:19:46,530 ومن ثم هنا التكرار كل حرف في s، يمكنني كتابة for c في s 1822 01:19:46,530 --> 01:19:49,330 ومن ثم طباعة الحرف. 1823 01:19:49,330 --> 01:19:53,820 إذن الآن عندما أقوم بتشغيل الأمر نفسه ولكن على argv2.py، 1824 01:19:53,820 --> 01:19:55,090 لاحظوا ما الذي سيحدث. 1825 01:19:55,090 --> 01:19:57,410 دعوني أرفع هذا قليلاً. 1826 01:19:57,410 --> 01:19:59,350 Enter. 1827 01:19:59,350 --> 01:20:03,010 يطبع كل حرف من كل كلمة واحدة كل مرة. 1828 01:20:03,010 --> 01:20:06,320 لكنه فعل ذلك هذه المرة بناء على استخدام هذين التكرارين الحلقيين. 1829 01:20:06,320 --> 01:20:07,330 إذن ماذا يعني هذا؟ 1830 01:20:07,330 --> 01:20:10,540 عندما تكون لديكم مصفوفة، كما أطلقنا عليها، 1831 01:20:10,540 --> 01:20:12,490 يمكنكم تكرار كل شيء في المصفوفة. 1832 01:20:12,490 --> 01:20:15,800 عندما تكون لديكم سلسلة، يمكنكم تكرار كل حرف في السلسلة. 1833 01:20:15,800 --> 01:20:17,716 وهنا حيث تصبح Python مرنة بشكل رائع 1834 01:20:17,716 --> 01:20:20,620 للقيام بذلك مرارًا وتكرارًا. 1835 01:20:20,620 --> 01:20:23,170 حسنًا، لنُلقي نظرة على-- 1836 01:20:23,170 --> 01:20:25,140 دعونا نرى-- سلاسل تمت مُقارنتها بالفعل. 1837 01:20:25,140 --> 01:20:26,510 قمنا بنسخ سلاسل. 1838 01:20:26,510 --> 01:20:29,110 دعونا نمضي قدمًا ونقوم بذلك في Python. 1839 01:20:29,110 --> 01:20:32,290 تذكرون أننا واجهنا حد أساسي في C، 1840 01:20:32,290 --> 01:20:35,560 ويبدو متعلقًا بالبرمجة، عندما كان لدينا مثال يُسمى تبديل 1841 01:20:35,560 --> 01:20:38,080 وno swap مجددًا عندما كنت فقط 1842 01:20:38,080 --> 01:20:40,240 أحاول تبديل قيمتين، x وy. 1843 01:20:40,240 --> 01:20:44,170 وتذكرون أنني قمتُ ضمنيًا بشيء مثل x هو 1 وy هو 2. 1844 01:20:44,170 --> 01:20:48,370 وكان الهدف من كل هذا ببساطة هو أن أقول أولاً، x هو كذا وكذا، 1845 01:20:48,370 --> 01:20:50,920 وy هو كذا وكذا. 1846 01:20:50,920 --> 01:20:53,350 دعوني أمضي قدمًا وأجعل ذلك سلسلة تنسيق. 1847 01:20:53,350 --> 01:20:55,360 ثم أردتُ طباعة هذا مجددًا. 1848 01:20:55,360 --> 01:20:58,570 لكن في مكان ما هنا، أردتُ تبديل x وy. 1849 01:20:58,570 --> 01:21:01,900 إذن، لنستخلص من استكشافنا لما يمكن أن تقوم به Python، 1850 01:21:01,900 --> 01:21:07,020 إذا أردتم تبديل متغيرين، x وy، فلا بأس، فقط افعلوا ذلك. 1851 01:21:07,020 --> 01:21:10,410 وهذا مثل لعبة shell السحرية التي تعمل فقط في Python. 1852 01:21:10,410 --> 01:21:13,260 الآن، من الناحية الفنية هذه تُسمى صفوف على اليسار. 1853 01:21:13,260 --> 01:21:15,010 إنه زوج من x فاصلة y. 1854 01:21:15,010 --> 01:21:16,320 إنه خط الطول فاصلة خط العرض. 1855 01:21:16,320 --> 01:21:20,640 إذن يوجد فعليًا نموذج عقلي كامن لما يحدث هنا. 1856 01:21:20,640 --> 01:21:22,590 ولكن في الواقع، فأنتم حرفيًا تقومون بتبديلها 1857 01:21:22,590 --> 01:21:24,340 ولا تحتاجون إلى المتغير المؤقت. 1858 01:21:24,340 --> 01:21:28,560 تهتم لغة Python بهذا من أجلكم. 1859 01:21:28,560 --> 01:21:30,670 حسنًا، دعونا نُلقي نظرة على ميزة قوية أكثر 1860 01:21:30,670 --> 01:21:33,930 ومع ذلك، هذه المرة في الواقع باستخدام ما تُسمى قائمة. 1861 01:21:33,930 --> 01:21:38,010 إذن منذ لحظة كنت استخدم argv0 ،1 ،2، كأمثلة. 1862 01:21:38,010 --> 01:21:40,096 وكنت أُطلق عليها مصفوفات. 1863 01:21:40,096 --> 01:21:41,220 إنها ليست مصفوفات بعد الآن. 1864 01:21:41,220 --> 01:21:43,080 لا تحتوي Python على مصفوفات. 1865 01:21:43,080 --> 01:21:44,640 تحتوي Python على قوائم. 1866 01:21:44,640 --> 01:21:46,595 وتُذكرنا القوائم بالقوائم المرتبطة. 1867 01:21:46,595 --> 01:21:47,470 وبالفعل، هي كذلك. 1868 01:21:47,470 --> 01:21:50,786 فيPython، لديكم قوائم قابلة لتغيير حجمها. 1869 01:21:50,786 --> 01:21:53,910 لا يجب أن تتخذوا قرارًا مسبقًا عن مدى كبر أو صغر حجمها. 1870 01:21:53,910 --> 01:21:57,330 ستكبر وتصغر من تلقاء نفسها تمامًا كما ستفعل قائمة مرتبطة، 1871 01:21:57,330 --> 01:21:59,760 ولكن لا يجب أن تكتبوا القائمة المرتبطة بأنفسكم. 1872 01:21:59,760 --> 01:22:00,456 أجل؟ 1873 01:22:00,456 --> 01:22:04,854 الجمهور: [INAUDIBLE] 1874 01:22:04,854 --> 01:22:05,603 ديفيد مالان: بالتأكيد. 1875 01:22:05,603 --> 01:22:10,434 الجمهور: [INAUDIBLE] 1876 01:22:10,434 --> 01:22:11,350 ديفيد مالان: أوه، بالتأكيد. 1877 01:22:11,350 --> 01:22:15,130 دعوني أفتح هذا الملف في argv1. 1878 01:22:15,130 --> 01:22:16,263 هذا هنا؟ 1879 01:22:16,263 --> 01:22:19,404 الجمهور: لقد كان مثل، [INAUDIBLE]. 1880 01:22:19,404 --> 01:22:20,695 ديفيد مالان: أوه، هذا هو هنا. 1881 01:22:20,695 --> 01:22:21,319 الجمهور: نعم. 1882 01:22:21,319 --> 01:22:23,430 [INAUDIBLE] قوس تدوين [INAUDIBLE].. 1883 01:22:23,430 --> 01:22:26,257 ديفيد مالان: نعم، يمكنك-- إذن argv، أطلقتُ عليها مصفوفة، 1884 01:22:26,257 --> 01:22:27,840 لكن كانت هذه كذبة بيضاء منذ لحظة. 1885 01:22:27,840 --> 01:22:29,770 إنها في الواقع قائمة، قائمة مرتبطة. 1886 01:22:29,770 --> 01:22:32,850 ولكن بينما لا تتيح أي قائمة مرتبطة في C لكم استخدام الأقواس المربعة، 1887 01:22:32,850 --> 01:22:34,600 يجب أن تستخدموا for loop أو while loop 1888 01:22:34,600 --> 01:22:38,230 لتكرار الشيء بأكمله للعثور علي ما تبحثون عنه، في Python، 1889 01:22:38,230 --> 01:22:41,200 إذا كان هناك شيء في قائمة، فيمكنكم فقط استخدام، حسنًا، الأقواس المربعة 1890 01:22:41,200 --> 01:22:42,700 للحصول على هذا العنصر المحدد. 1891 01:22:42,700 --> 01:22:45,930 الجمهور: أو أقول أنه يمكنك استخدام f مباشرة قبل-- 1892 01:22:45,930 --> 01:22:47,570 ديفيد مالان: أوه، كان من الممكن ذلك، نعم. 1893 01:22:47,570 --> 01:22:52,280 لم أستخدم F، فقط لأنه بصراحة يصبح قبيحًا في النهاية. 1894 01:22:52,280 --> 01:22:56,210 ولكن نعم، يمكنني أيضًا أن أفعل هذا لتحقيق التأثير نفسه بالضبط. 1895 01:22:56,210 --> 01:22:58,760 ولكن ستبدو فقط مشفرة. 1896 01:22:58,760 --> 01:23:03,970 حسنًا، دعونا نقدم بالفعل قائمة، وهي نفسها نوع بيانات في Python، 1897 01:23:03,970 --> 01:23:07,746 وكذلك في لغات مثل ++C وJava، 1898 01:23:07,746 --> 01:23:09,620 إذا كان لدى البعض منكم تلك الخلفية أيضًا. 1899 01:23:09,620 --> 01:23:13,100 إذن هنا، في list.py، دعوني أمضي قدمًا وأقوم بما يلي. 1900 01:23:13,100 --> 01:23:15,589 دعوني أولاً أستورد getInt من مكتبة CS50 1901 01:23:15,589 --> 01:23:17,380 بحيث يُمكننا الحصول على بعض الأعداد الصحيحة من المستخدم. 1902 01:23:17,380 --> 01:23:19,510 دعوني أعطي نفسي مصفوفة والمعروفة أيضًا بأنها 1903 01:23:19,510 --> 01:23:22,810 قائمة في Python الآن. 1904 01:23:22,810 --> 01:23:25,930 إذن في C لا يمكنكم حقًا التعبير عن هذه الفكرة تمامًا. 1905 01:23:25,930 --> 01:23:29,260 في Python، إذا كنتم تريدون متغير يُسمى أرقام 1906 01:23:29,260 --> 01:23:31,390 وتريدون تهيئته إلى قائمة فارغة، 1907 01:23:31,390 --> 01:23:33,490 فقط تقومون حرفيًا بفتح قوس، ثم قوس مغلق. 1908 01:23:33,490 --> 01:23:35,140 لا يوجد رقم بينهما. 1909 01:23:35,140 --> 01:23:37,090 وكما فعلنا من قبل، لاتوجد فاصلة منقوطة. 1910 01:23:37,090 --> 01:23:40,660 دعونا الآن نقوم بما يلي للأبد حتى أقوم بتقسيم هذا. 1911 01:23:40,660 --> 01:23:43,150 دعوني أمضي قدمًا وأحصل على رقم من المستخدم، 1912 01:23:43,150 --> 01:23:45,130 فقط من خلال سؤاله عن رقم. 1913 01:23:45,130 --> 01:23:49,605 ثم دعوني أقول، إذا لم يكن رقمًا، وأمضي قدمًا وأقوم بتقسيم هذا. 1914 01:23:49,605 --> 01:23:51,730 سيقوم هذا، كملاحظة جانبية، فقط بالسماح لي أن أخرج 1915 01:23:51,730 --> 01:23:55,400 من هذا عن طريق الضغط على Control D كما ناقشنا من قبل. 1916 01:23:55,400 --> 01:23:57,010 ولكن هذه ميزة واجهة المستخدم فقط. 1917 01:23:57,010 --> 01:23:58,750 إذن يُعد ذلك أمرًا رائعًا إلى حد ما. 1918 01:23:58,750 --> 01:24:02,920 لنفترض أنني أُريد تنفيذ فكرة التحقق 1919 01:24:02,920 --> 01:24:06,850 إذا كان الرقم الذي قد كتبه المستخدم موجودًا في القائمة بالفعل، وإذا كان كذلك، 1920 01:24:06,850 --> 01:24:07,394 فلا تضيفوه. 1921 01:24:07,394 --> 01:24:08,810 سأمضي قدمًا وأفعل هذا. 1922 01:24:08,810 --> 01:24:10,101 لكن أولاً، دعونا نفعل هذا-- 1923 01:24:10,101 --> 01:24:13,360 numbers.append number. 1924 01:24:13,360 --> 01:24:14,860 وهذه ميزة جديدة. 1925 01:24:14,860 --> 01:24:16,120 إذن ماذا أريد أن أفعل هنا؟ 1926 01:24:16,120 --> 01:24:17,770 for number في numbers-- 1927 01:24:17,770 --> 01:24:20,146 سأوضح هذا خلال ثانية-- 1928 01:24:20,146 --> 01:24:21,520 دعوني أمضي قدمًا وأطبع number. 1929 01:24:21,520 --> 01:24:23,910 إذن ما الذي يتطلع هذا البرنامج لفعله؟ 1930 01:24:23,910 --> 01:24:26,025 في الأعلى، سأستورد getInt. 1931 01:24:26,025 --> 01:24:29,170 في الأعلى أسفل ذلك، سأمنح نفسي فقط مصفوفة فارغة، 1932 01:24:29,170 --> 01:24:31,290 والتي تُسمى الآن قائمة، تُسمى أرقام. 1933 01:24:31,290 --> 01:24:33,360 ثم أفعل ما يلي للأبد. 1934 01:24:33,360 --> 01:24:35,280 أمضي قدمًا وأحصل على الرقم من المستخدم. 1935 01:24:35,280 --> 01:24:38,238 إذا لم يقم هو أو هي بالفعل بكتابة رقم، فقط قم بتقسيم هذا. 1936 01:24:38,238 --> 01:24:39,300 انتهى البرنامج من عمله. 1937 01:24:39,300 --> 01:24:40,770 لكن ها هي الميزة الجديدة. 1938 01:24:40,770 --> 01:24:44,170 كما هو الحال باستخدام السلاسل، فهي كائنات، إذا جاز التعبير. 1939 01:24:44,170 --> 01:24:46,830 إنها بنيات بيانات تحتوي على دالات مُدمجة. 1940 01:24:46,830 --> 01:24:49,500 إذن تحتوي القوائم على دالات مُدمجة. 1941 01:24:49,500 --> 01:24:52,470 هناك حرفيًا دالة داخل كل قائمة في Python 1942 01:24:52,470 --> 01:24:54,540 وتُسمى append وحرفيًا تقوم بذلك. 1943 01:24:54,540 --> 01:24:56,970 تستدعون append ثم تقوم هي بإلحاق أيًا كان مدخلها 1944 01:24:56,970 --> 01:24:59,670 إلى القائمة نفسها أيًا كانت. 1945 01:24:59,670 --> 01:25:03,720 إذن في C، قد تضطرون إلى استخدام realloc. 1946 01:25:03,720 --> 01:25:06,630 قد تضطرون إلى إضافة شيء إلى نهاية القائمة. 1947 01:25:06,630 --> 01:25:07,980 لكن لن يحدث أي من هذا بعد الآن. 1948 01:25:07,980 --> 01:25:10,410 فقط في مستوى عالٍ، تقولون قومي بإلحاق هذا إلى القائمة 1949 01:25:10,410 --> 01:25:12,690 ودعوا اللغة تهتم بهذا من أجلكم. 1950 01:25:12,690 --> 01:25:15,690 ثم هنا بالأسفل، تتم المحاذاة إلى اليسار حتي النهاية، 1951 01:25:15,690 --> 01:25:17,580 فقط تقول، for number في numbers. 1952 01:25:17,580 --> 01:25:21,880 مثلًا، قم بالتكرار على جميع الأرقام في القائمة وطباعة واحد في كل مرة. 1953 01:25:21,880 --> 01:25:22,720 إذن دعونا نجرب هذا. 1954 01:25:22,720 --> 01:25:25,530 دعوني أنتقل إلى هنا وأقوم بهذا-- 1955 01:25:25,530 --> 01:25:31,920 python list.py-- ودعوني أمضي قدمًا وأكتب رقمًا مثل 13، و42، و50. 1956 01:25:31,920 --> 01:25:34,950 وسأضغط على Control D، والذي يعني أن هذا كل شيء، لقد انتهيت. 1957 01:25:34,950 --> 01:25:36,450 وهناك نرى الأرقام الثلاثة. 1958 01:25:36,450 --> 01:25:38,100 هذا يبدو غبيًا قليلاً لأنه أتعلمون ماذا؟ 1959 01:25:38,100 --> 01:25:39,480 أعتقد أنني بحاجة إلى طباعة هنا. 1960 01:25:39,480 --> 01:25:40,800 دعونا نُصلح هذا. 1961 01:25:40,800 --> 01:25:42,200 دعوني أعيد تشغيل هذا. 1962 01:25:42,200 --> 01:25:45,510 13، و42، و50، Control D، ها نحن ذا. 1963 01:25:45,510 --> 01:25:46,710 واحد كل سطر. 1964 01:25:46,710 --> 01:25:50,400 ولكن بصراحة هذا البرنامج لديه خطأ نوعًا من، احتمالاً. 1965 01:25:50,400 --> 01:25:53,622 لنفترض أنني أريد أرقام فريدة، والآن لديّ ثلاثة من الرقم 13. 1966 01:25:53,622 --> 01:25:56,580 لكني وبشكل مثالي أريد نسخة واحدة فقط من كل رقم لأيّ سبب من الأسباب. 1967 01:25:56,580 --> 01:25:57,730 أريد الطابع الفريد. 1968 01:25:57,730 --> 01:26:00,570 حسنًا، لاحظوا مدى سهولة تعبيركم عن ذلك. 1969 01:26:00,570 --> 01:26:05,710 إذا كان هدفي هو فقط إضافة رقم إلى قائمة الأرقام بطريق مشروطة 1970 01:26:05,710 --> 01:26:08,940 إذا لم يكن هناك بالفعل، كيف يمكنكم القيام بذلك بلغة C؟ 1971 01:26:08,940 --> 01:26:11,730 لديكم مصفوفة تُسمى الأرقام وتريدون التحقق أولاً 1972 01:26:11,730 --> 01:26:13,390 من وجود رقم في هذه المصفوفة. 1973 01:26:13,390 --> 01:26:15,623 ماذا كنتم ستفعلون بالإنجليزية؟ 1974 01:26:15,623 --> 01:26:16,570 الجمهور: تكرار حلقي من النوع for. 1975 01:26:16,570 --> 01:26:17,240 ديفيد مالان: تكرار حلقي من النوع for، صحيح؟ 1976 01:26:17,240 --> 01:26:18,880 على الأرجح ستبدأون من اليسار، ثم تقومون بالتكرار على 1977 01:26:18,880 --> 01:26:21,850 المصفوفة بأكملها بحثًا عن الرقم ثم تستنتجون إن كان صحيحًا أم خاطئًا، 1978 01:26:21,850 --> 01:26:22,632 إنه هناك. 1979 01:26:22,632 --> 01:26:24,340 هذا ليس صعبًا لكنه مزعج قليلاً. 1980 01:26:24,340 --> 01:26:27,423 عليكم كتابة المزيد من التعليمات البرمجية، سطرين، أربعة أسطر لتكرار حلقي من النوع for. 1981 01:26:27,423 --> 01:26:30,130 في Python، فقط قولوا ما تقصدونه. 1982 01:26:30,130 --> 01:26:35,140 If number not in numbers, append it. 1983 01:26:35,140 --> 01:26:37,360 ويبدو مشابهًا للغة الإنجليزية بصورة كبيرة. 1984 01:26:37,360 --> 01:26:41,990 في نهاية المطاف، كتب شخصًا ما التكرار الحلقي for الذي يقوم بهذه العملية. 1985 01:26:41,990 --> 01:26:46,110 لكن يُمكننا نحن، المبرمجين الأكثر حداثة، الآن فقط القول، if number not in numbers، 1986 01:26:46,110 --> 01:26:46,930 append it. 1987 01:26:46,930 --> 01:26:48,870 إذن من المفترض أن يبدو هذا شبيهًا باللغة الإنجليزية. 1988 01:26:48,870 --> 01:26:50,540 إذن دعونا نجرب هذا الآن. 1989 01:26:50,540 --> 01:26:53,260 13، و13، و50، تم. 1990 01:26:53,260 --> 01:26:56,980 الآن أحصل فقط على نسخة واحدة من الرقم 13 لأنه يقوم بالتحقق من ذلك لأجلي. 1991 01:26:56,980 --> 01:26:58,750 حاليًا، لا يزال وقت التشغيل يُمثل مشكلة. 1992 01:26:58,750 --> 01:27:01,420 فكروا في هذا، نظريًا، مازلتم 1993 01:27:01,420 --> 01:27:04,510 تضيعون بعض الوقت بحثًا عن رقم لأن شخصًا ما كتب 1994 01:27:04,510 --> 01:27:05,990 تعليمة برمجية هي على الأرجح بحثًا خطيًا. 1995 01:27:05,990 --> 01:27:07,660 وربما تكون بحثًا ثنائيًا إذا تم ترتيبها. 1996 01:27:07,660 --> 01:27:08,830 لكن شخصًا ما كتب تلك التعليمة البرمجية. 1997 01:27:08,830 --> 01:27:10,996 لكن المغزى هو أنه، مع هذه اللغات عالية المستوى، 1998 01:27:10,996 --> 01:27:14,937 هذه اللغات الأكثر حداثة مثل Python، هذه ليست مشكلتنا، بالضرورة. 1999 01:27:14,937 --> 01:27:17,020 تُصبح فقط مشكلتنا إذا كان البرنامج 2000 01:27:17,020 --> 01:27:22,720 بطيئًا جدًا فقط لسببٍ ما، ونحن حقًا بحاجة للوصول إلى تعقيدات السبب. 2001 01:27:22,720 --> 01:27:25,210 حسناً، دعونا ننظر إلى ميزة أخيرة من حيث الصياغة 2002 01:27:25,210 --> 01:27:27,580 قبل أن نحاول هذا على مشكلة أعم. 2003 01:27:27,580 --> 01:27:30,550 دعوني أمضي قدمًا وأحفظ ملفًا باسم struct0.py، 2004 01:27:30,550 --> 01:27:33,780 والذي يُذكرنا بـ struct0.c منذ أسابيع قليلة. 2005 01:27:33,780 --> 01:27:37,820 دعوني أمضي قدمًا وأقوم باستيراد getString من مكتبة CS50. 2006 01:27:37,820 --> 01:27:41,770 دعوني أمضي قدمًا وأعطي نفسي مصفوفة هذه المرة تُسمى students وتكون فارغة، 2007 01:27:41,770 --> 01:27:43,330 أو قائمة تُسمى students. 2008 01:27:43,330 --> 01:27:46,340 ثم دعوني فقط أحصل على ثلاثة طلاب من أجل المناقشة. 2009 01:27:46,340 --> 01:27:50,170 إذن for i in range 3، مما يعني أنه يتكرر ثلاث مرات، 2010 01:27:50,170 --> 01:27:52,870 دعوني أمضي قدمًا وأسأل المستخدمين عن أسمائهم. 2011 01:27:52,870 --> 01:27:55,370 إذن getString، اسألهم عن أسمائهم. 2012 01:27:55,370 --> 01:27:57,370 ثم دعوني أمضي قدمًا وأسأل عن سكنهم 2013 01:27:57,370 --> 01:28:00,040 وأمضي قدمًا وأحصل على سلسلة للسكن. 2014 01:28:00,040 --> 01:28:01,540 ثم هذا كاف. 2015 01:28:01,540 --> 01:28:04,390 دعوني أمضي قدمًا وأقوم بإلحاق الطالب بقائمتي. 2016 01:28:04,390 --> 01:28:07,330 إذن students.append. 2017 01:28:07,330 --> 01:28:09,489 ولكن حقًا ليس لديّ بنية student حتى الآن. 2018 01:28:09,489 --> 01:28:11,530 الآن، هناك العديد من الطرق لحل هذا، ولكن دعوني 2019 01:28:11,530 --> 01:28:13,330 أقترح أبسط حل. 2020 01:28:13,330 --> 01:28:19,120 اتّضح أن في Python يُمكنكم إعلان جداول علامات التجزئة بطريقة رائعة وبسيطة. 2021 01:28:19,120 --> 01:28:21,680 يُعد جدول علامات التجزئة مجرد مجموعة من أزواج القيم الرئيسية. 2022 01:28:21,680 --> 01:28:25,600 ويُمكنني القول عند هذه المرحلة في مثالي أنه لديّ كلمات رئيسية وقيم. 2023 01:28:25,600 --> 01:28:29,330 لديّ اسم وهو كلمة رئيسية وقيمته، مثل ديفيد أو أيًّا كان، 2024 01:28:29,330 --> 01:28:33,430 كلمة رئيسية أخري تُسمى سكن، ثم قيمة وهي مثلاً Matthews 2025 01:28:33,430 --> 01:28:34,210 أو أيًّا كان. 2026 01:28:34,210 --> 01:28:35,500 إذن كلمات رئيسية وقيم. 2027 01:28:35,500 --> 01:28:38,710 لذلك سيكون لطيفًا نوعًا ما إذا تمكنت من إنشاء جدول علامة تجزئة-- 2028 01:28:38,710 --> 01:28:41,660 أو حتى حاولت، لهذا الأمر-- والذي يسمح لي بتخزين هذه البيانات. 2029 01:28:41,660 --> 01:28:44,260 حسنًا، اتّضح في Python، أنه يُمكنني القيام بذلك بالضبط. 2030 01:28:44,260 --> 01:28:47,110 يُمكنني أن أمضي قدمًا وأنشئ كائنًا يُسمى student 2031 01:28:47,110 --> 01:28:49,600 باستخدام رمز القوس المتعرج. 2032 01:28:49,600 --> 01:28:51,370 ويمكنكم حرفيًا فعل هذا. 2033 01:28:51,370 --> 01:28:53,530 سيكون الاسم كلمة رئيسية. 2034 01:28:53,530 --> 01:28:55,600 والآن ستأخذ هذه القيمة. 2035 01:28:55,600 --> 01:28:59,530 سيكون سكن كلمة رئيسية أخرى وستأخذ هذه القيمة. 2036 01:28:59,530 --> 01:29:02,500 إذن يُمكنني أن أُسمي هذا أي شيء أريده-- x وy 2037 01:29:02,500 --> 01:29:05,920 وأعطيهم القيم ديفيد وMatthews أو أيًّا كان ما سأقوم بكتابته. 2038 01:29:05,920 --> 01:29:09,310 ولكن إذا كنتم ترغبون في بنية بيانات مُعمَّمة للغاية 2039 01:29:09,310 --> 01:29:13,600 بحيث لا تكون مجرد قائمة قيم من من اليسار إلى اليمين، ولكن تحتوي على بيانات تعريف-- 2040 01:29:13,600 --> 01:29:16,330 كلمة رئيسية، أو إذا كنتم تفكرون في جدول بيانات، أو اسم عمود 2041 01:29:16,330 --> 01:29:20,260 يُسمى اسمًا وعمود آخر يُسمى سكنًا، وكلاهما لديه قيم-- 2042 01:29:20,260 --> 01:29:21,520 فقط استخدموا أقواسًا متعرجة. 2043 01:29:21,520 --> 01:29:24,502 ثم قوموا بوضع الكلمات الرئيسية بين علامات اقتباس ثم نقطتين. 2044 01:29:24,502 --> 01:29:26,960 ثم إذا كان لديكم كلمات رئيسية متعددة، فقوموا فقط بوضع فاصلة. 2045 01:29:26,960 --> 01:29:31,060 إذن إنه مشفر قليلاً، لكن يبدو هذا تماماً مثل حاوية، جدول علامة التجزئة، 2046 01:29:31,060 --> 01:29:33,590 يحتوي على كلمات وقيم. 2047 01:29:33,590 --> 01:29:36,640 الآن، في Python المجموعة الرابعة، عندما قُمتم بتنفيذ المدقق الإملائي، 2048 01:29:36,640 --> 01:29:40,060 في الواقع كنتم فقط تقولون نعم أو لا، هل الكلمة موجودة في القاموس؟ 2049 01:29:40,060 --> 01:29:42,460 لكن بالتأكيد كان بإمكانكم تخزين مزيد من المعلومات 2050 01:29:42,460 --> 01:29:43,960 بدلاً من القيم المنطقية فقط. 2051 01:29:43,960 --> 01:29:47,150 أنتم لستم بحاجة لفعل هذا كثيرًا. 2052 01:29:47,150 --> 01:29:48,610 إذن ما الذي يعنيه هذا لي؟ 2053 01:29:48,610 --> 01:29:50,920 في هذه المرحلة من الموضوع، لديّ كائن، 2054 01:29:50,920 --> 01:29:54,984 كما يُسمى في Python، والذي يُخزن هذه الكلمات الرئيسية وهذه القيم. 2055 01:29:54,984 --> 01:29:57,400 إذن إذا أردتُ لاحقًا التكرار عليهم، يُمكنني ذلك. 2056 01:29:57,400 --> 01:30:01,330 For student in-- أوه، عليكم إلحاقه-- 2057 01:30:01,330 --> 01:30:04,480 إذن student.append student. 2058 01:30:04,480 --> 01:30:06,320 دعونا نُضيف student إلى القائمة. 2059 01:30:06,320 --> 01:30:08,200 إذن for student in students، وهذا كيف 2060 01:30:08,200 --> 01:30:10,449 تقومون بالتكرار على جميع الأشياء في هذه القائمة. 2061 01:30:10,449 --> 01:30:16,270 دعوني أمضي قدمًا وأقول جملة مثل، أريد أن أقول فلان 2062 01:30:16,270 --> 01:30:18,340 في هذا السكن. 2063 01:30:18,340 --> 01:30:19,810 كيف يمكن التعبير عن ذلك؟ 2064 01:30:19,810 --> 01:30:22,540 حسنًا، فلان، أُريد الوصول إلى اسم الطالب. 2065 01:30:22,540 --> 01:30:25,390 والطريقة التي يُمكنني فعل هذا بها كما يلي. 2066 01:30:25,390 --> 01:30:30,850 يُكنني القول، دعوني أمضي قدمًا وأقول قوس متعرج student قوس 2067 01:30:30,850 --> 01:30:33,760 name قوس مُغلق. 2068 01:30:33,760 --> 01:30:36,170 ثم هنا، يٌمكنني أن أمضي قدمًا وأقول-- 2069 01:30:36,170 --> 01:30:38,710 عذرًا، دعوني أضع علامة اقتباس هنا-- 2070 01:30:38,710 --> 01:30:42,520 ثم هنا يُمكنني أن أقول student قوس ثم بين علامتي اقتباس dorm. 2071 01:30:42,520 --> 01:30:45,400 إذن في الحقيقة هذا أكثر مثالاً مُشفرًا قمنا به حتى الآن. 2072 01:30:45,400 --> 01:30:47,870 لكن دعونا نُقسّم هذا كسلسلة مُنسقة. 2073 01:30:47,870 --> 01:30:50,260 إذن إذا قُمت بتكبير هذا، ما الذي أفعله؟ 2074 01:30:50,260 --> 01:30:52,720 تعني الأقواس المتعرجة وحرف f تنسيق هذه السلسة فقط. 2075 01:30:52,720 --> 01:30:56,220 إذن يُمكنكم تجاهُل الأقواس المتعرجة كجزء من موضوعنا في وقت سابق. 2076 01:30:56,220 --> 01:30:58,390 student هو اسم المتغير في التكرار الحلقي for. 2077 01:30:58,390 --> 01:30:59,890 إذن هذا هو الطالب الحالي. 2078 01:30:59,890 --> 01:31:01,820 لكن الأقواس المربعة جديدة. 2079 01:31:01,820 --> 01:31:05,350 في لغة C، المرة الوحيدة التي استخدمنا فيها الأقواس المربعة كانت في أي سياق؟ 2080 01:31:05,350 --> 01:31:06,317 الجمهور: المصفوفات. 2081 01:31:06,317 --> 01:31:07,150 ديفيد ج. مالان: المصفوفات. 2082 01:31:07,150 --> 01:31:10,720 ومالذي كُنا نقوم بوضعه دائمًا في تلك الأقواس المربعة؟ 2083 01:31:10,720 --> 01:31:11,610 رقم. 2084 01:31:11,610 --> 01:31:12,990 نعم، إذن 0، و1، و2. 2085 01:31:12,990 --> 01:31:14,780 يُمكنكم فهرستها إلى مصفوفة. 2086 01:31:14,780 --> 01:31:16,990 الشيء الرائع بشأن الكائن-- 2087 01:31:16,990 --> 01:31:20,160 أو جدول علامة تجزئة بشكل أعمّ، كما نقوم بتعريفه الآن-- 2088 01:31:20,160 --> 01:31:25,660 هو أنه يُمكنكم الفهرسة إلى المتغير عبر استخدام كلمات، وليس أرقام. 2089 01:31:25,660 --> 01:31:29,110 إذن يُمكنكم التفكير في student كقائمة أو مصفوفة 2090 01:31:29,110 --> 01:31:30,987 ذات قيمتين-- name وdorm. 2091 01:31:30,987 --> 01:31:33,570 لكن من الجيد أن أكون قادرًا علي الإشارة إليهم ليس كصفر وواحد 2092 01:31:33,570 --> 01:31:36,720 أو رقم اعتباطي غبي، لكن ككلمات رئيسية-- 2093 01:31:36,720 --> 01:31:38,340 name وdorm. 2094 01:31:38,340 --> 01:31:41,370 إذن هذه الصيغة هنا، علي الرغم من أنها مُشفرة، تقول امضوا داخل كائن 2095 01:31:41,370 --> 01:31:44,970 student واحصلوا علي قيمة الكلمة الرئيسية التي تُسمى name. 2096 01:31:44,970 --> 01:31:47,830 وهذا ينطبق أيضًا على dorm. 2097 01:31:47,830 --> 01:31:50,550 إذن يسمح لكم الكائن في Python-- 2098 01:31:50,550 --> 01:31:54,120 أو بشكل أعم جدول علامة التجزئة-- بربط الكلمات الرئيسية بالقيم. 2099 01:31:54,120 --> 01:31:56,717 وهذه بكل بساطة الصيغة المستخدمة لذلك. 2100 01:31:56,717 --> 01:31:58,050 إذن دعوني أمضي قدمًا وأُشغل هذا. 2101 01:31:58,050 --> 01:32:01,410 Struct0.py-- اكتب اسمي. 2102 01:32:01,410 --> 01:32:03,660 لنقل ماثيوس. 2103 01:32:03,660 --> 01:32:07,080 دعونا نكتب، مثل، فيرونيكا، ويلد. 2104 01:32:07,080 --> 01:32:08,310 دعونا نكتب بريان. 2105 01:32:08,310 --> 01:32:09,424 بريان، أين كنت تعيش؟ 2106 01:32:09,424 --> 01:32:10,445 الجمهور: أي سنة؟ 2107 01:32:10,445 --> 01:32:11,570 ديفيد مالان: طالب فى السنة الأولى. 2108 01:32:11,570 --> 01:32:12,486 الجمهور: Pennypacker. 2109 01:32:12,486 --> 01:32:14,690 ديفيد مالان: Pennypacker, enter. 2110 01:32:14,690 --> 01:32:17,420 لم تكن هذه التفاصيل مهمة حقًا، لكننا الآن قد 2111 01:32:17,420 --> 01:32:19,050 عبرنا عن جميع تلك الجمل. 2112 01:32:19,050 --> 01:32:21,950 إذن باختصار الآن لم نر هذه تمامًا في لغة C، 2113 01:32:21,950 --> 01:32:25,340 لكننا رأينا لمحة عن هذه عندما نفذنا جدول التجزئة 2114 01:32:25,340 --> 01:32:30,590 الخاص بنا في لغة C حتى يمكننا في الواقع الوصول إلى الكلمات الأساسية والقيم بشكل اعتباطي. 2115 01:32:30,590 --> 01:32:35,080 إذن دعونا نقوم بـ-- في الواقع، دعوني أتوقف هنا لأتلقى أسئلتكم 2116 01:32:35,080 --> 01:32:39,140 قبل أن نُعيد لعبة ماريو. 2117 01:32:39,140 --> 01:32:39,780 حسنًا. 2118 01:32:39,780 --> 01:32:43,230 إذن دعونا الآن نقدم أمثلة ليس فقط من أجل التوضيح، 2119 01:32:43,230 --> 01:32:47,092 لكن لنعود بالذاكرة إلى صديقنا القديم الذي رأيناه بضع مرات 2120 01:32:47,092 --> 01:32:48,800 وننظر فقط على بعض اللقطات المختلفة. 2121 01:32:48,800 --> 01:32:50,954 إذن في لعبة Super Mario Bros، الركض من اليسار إلى اليمين 2122 01:32:50,954 --> 01:32:53,870 قد تتذكرون أو قد رأيتم أنه يوجد شيء كهذا في سماء اللعبة. 2123 01:32:53,870 --> 01:32:55,870 ويُفترض أن يركض ماريو تحتها ثم يقفز للأعلى 2124 01:32:55,870 --> 01:32:59,310 ثم يحصل على قطع نقدية أو أيًا كان بالقفز عاليًا وإصابة علامات الاستفهام تلك. 2125 01:32:59,310 --> 01:33:01,550 إذن تُعد هذه في الغالب طريقة مُستنبطة لقول، 2126 01:33:01,550 --> 01:33:03,300 لنفترض أننا نريد طباعة أربع علامات 2127 01:33:03,300 --> 01:33:06,291 استفهام على الشاشة تمامًا مثل لعبة Super Mario Bros، كيف يمكننا القيام بذلك؟ 2128 01:33:06,291 --> 01:33:08,790 ستبدو باللون الأبيض والأسود قليلاً، نصية قليلاً، 2129 01:33:08,790 --> 01:33:10,600 ولكن كيف يمكنني طباعة أربع علامات استفهام؟ 2130 01:33:10,600 --> 01:33:14,790 حسنًا، دعوني أنتقل هنا ودعوني أنشئ ملفًا باسم، 2131 01:33:14,790 --> 01:33:17,370 لنقل، Mario0.py. 2132 01:33:17,370 --> 01:33:18,330 وكيف يمكنني القيام بذلك؟ 2133 01:33:18,330 --> 01:33:22,180 ما هي الطريقة الأبسط للقيام بذلك، طباعة أربع علامات استفهام؟ 2134 01:33:22,180 --> 01:33:24,500 حسنًا، سمعت طباعة. 2135 01:33:24,500 --> 01:33:25,650 حسنًا، أربع علامات استفهام. 2136 01:33:25,650 --> 01:33:26,290 جيد جدًا. 2137 01:33:26,290 --> 01:33:28,740 إذن دعونا نمضي قدمًا ونشغل Mario0. 2138 01:33:28,740 --> 01:33:29,850 صحيح، هذا صائب. 2139 01:33:29,850 --> 01:33:31,200 إذن هذا ليس سيئًا. 2140 01:33:31,200 --> 01:33:32,770 إنها سلسلة واحدة، لم يبدُ أن هذا أمر مهم. 2141 01:33:32,770 --> 01:33:35,487 دعونا نقوم بفعلها باستخدام تكرار حلقي على الأقل، كما نفعل في كثير من الأحيان، 2142 01:33:35,487 --> 01:33:37,320 فقط لكي نُحسن التصميم، رغم أن هذا 2143 01:33:37,320 --> 01:33:39,450 يُعد مثالاً صغيرًا للغاية. 2144 01:33:39,450 --> 01:33:44,440 إذن Mario1.py، دعونا نمضي قدمًا ونطبع هذا باستخدام تكرار حلقي، على سبيل المثال. 2145 01:33:44,440 --> 01:33:45,670 إذن كيف أفعل ذلك؟ 2146 01:33:45,670 --> 01:33:49,900 كيف أطبع أربع علامات استفهام، ولكن واحدة في كل مرة؟ 2147 01:33:49,900 --> 01:33:56,570 For i in range four, print, question mark. 2148 01:33:56,570 --> 01:33:57,470 حفظ، حسنًا. 2149 01:33:57,470 --> 01:33:58,490 إذن Python, Mario. 2150 01:33:58,490 --> 01:34:01,616 هل يريد أحد منكم الصراخ لا، لا تفعل هذا؟ 2151 01:34:01,616 --> 01:34:02,390 حسنًا، شكرًا. 2152 01:34:02,390 --> 01:34:02,960 هذا رائع. 2153 01:34:02,960 --> 01:34:05,082 حسنًا،لمَ لا تريدون أن أفعل ذلك؟ 2154 01:34:05,082 --> 01:34:06,290 لأن جميعها عمودية. 2155 01:34:06,290 --> 01:34:08,210 إذن كان يمكننا إصلاح هذا الأمر الآن. 2156 01:34:08,210 --> 01:34:12,310 كيف أخبر الطباعة، لا تنهي سطورك بالسطر الجديد الافتراضي؟ 2157 01:34:12,310 --> 01:34:17,850 إذن ويساوي فقط علامة الاقتباس وإنهاء الاقتباس لتجاوز قيمة الخط المائل العكسي n الافتراضية. 2158 01:34:17,850 --> 01:34:18,949 إذن الآن يمكنني إعادة تشغيل هذا. 2159 01:34:18,949 --> 01:34:20,240 حسنًا، يبدو أمرًا خاطئًا قليلاً. 2160 01:34:20,240 --> 01:34:24,790 إذن كيف يمكنني إصلاح ذلك بحيث أضع سطرًا جديدًا فقط بعد آخر سطر؟ 2161 01:34:24,790 --> 01:34:25,760 الجمهور: [INAUDIBLE] 2162 01:34:25,760 --> 01:34:27,910 ديفيد مالان: نعم، بصراحة، أنا لا أطبع أي شيء فقط. 2163 01:34:27,910 --> 01:34:30,740 وهذا سيشتمل على تأثير طباعة سطر جديد مجانًا. 2164 01:34:30,740 --> 01:34:31,600 إذن دعونا نفعل هذا. 2165 01:34:31,600 --> 01:34:32,140 حسنًا. 2166 01:34:32,140 --> 01:34:33,990 الآن لدينا مثال جيد هناك. 2167 01:34:33,990 --> 01:34:36,490 حسنًا، إذن يتضح أننا طبعنا بالفعل على طول الطريق 2168 01:34:36,490 --> 01:34:40,840 مثالاً منفصلاً، بدا مثل هذا، وإن كانت هناك أربع كتل. 2169 01:34:40,840 --> 01:34:43,380 إذن لن نفعل-- دعونا نمضي قدمًا ونفعل ذلك بشكل رأسي، 2170 01:34:43,380 --> 01:34:45,734 ليس باستخدام علامات الاستفهام، ولكن باستخدام علامات التجزئة مثل الكتل. 2171 01:34:45,734 --> 01:34:47,650 إذن إذا أردنا طباعة علامات التجزئة الثلاث تلك، 2172 01:34:47,650 --> 01:34:53,140 دعوني أستحضر بعض الإلهام من هذه ودعونا نقول في Mario2.py، 2173 01:34:53,140 --> 01:34:58,780 دعوني أمضي قدمًا وأقول فقط for i في النطاق 3، 2174 01:34:58,780 --> 01:35:01,000 امضي قدمًا واطبع كتلة واحدة. 2175 01:35:01,000 --> 01:35:03,580 وكما كنتم تنصحون، فقط أفعل ذلك-- 2176 01:35:03,580 --> 01:35:06,220 أو لا، بدلاً من ذلك، دعونا نستخدم الافتراضي لطباعة 2177 01:35:06,220 --> 01:35:08,470 شريط عمودي مكون من ثلاث كتل. 2178 01:35:08,470 --> 01:35:10,240 إذن هذا هو Mario2.py. 2179 01:35:10,240 --> 01:35:12,790 والآن قمنا بشيء يذكرنا بذلك. 2180 01:35:12,790 --> 01:35:16,090 لكن الآن تصبح الأمور مثيرة للاهتمام قليلاً إذا انتقلنا إلى الأسفل. 2181 01:35:16,090 --> 01:35:17,800 ودعونا نركز على هذا المربع. 2182 01:35:17,800 --> 01:35:20,560 إذن ثلاثة بثلاثة، على سبيل المثال، لكننا لم نرى 2183 01:35:20,560 --> 01:35:22,160 شيئًا تمامًا كهذا. 2184 01:35:22,160 --> 01:35:24,610 إذن في مثالنا الأخير هنا، لنرى. 2185 01:35:24,610 --> 01:35:28,330 هل لدينا متطوع شجاع يأتي إلى الأعلى، لربط بعض هذه الأفكار 2186 01:35:28,330 --> 01:35:30,100 معًا؟ 2187 01:35:30,100 --> 01:35:31,350 هل هذه يد مرفوعة في الخلف؟ 2188 01:35:31,350 --> 01:35:33,510 تعالي إلى هنا. 2189 01:35:33,510 --> 01:35:39,390 إذن سيكون هذا Mario3.py، هدفه هو طباعة قالب، 2190 01:35:39,390 --> 01:35:40,740 قالب أكبر-- 2191 01:35:40,740 --> 01:35:43,304 إنه مثل ثلاثة بثلاثة-- مرحبًا مجددًا. 2192 01:35:43,304 --> 01:35:44,180 أندريا: مرحبًا. 2193 01:35:44,180 --> 01:35:45,120 ديفيد مالان: من أجل الجمهور، ما هو اسمك؟ 2194 01:35:45,120 --> 01:35:46,050 أندريا: أندريا. 2195 01:35:46,050 --> 01:35:47,040 ديفيد ج. مالان: أندريا، سررتُ بلقائك. 2196 01:35:47,040 --> 01:35:47,850 أندريا: سررتُ بلقائك. 2197 01:35:47,850 --> 01:35:49,641 ديفيد مالان: حسنًا، إذن الهدف المنشود 2198 01:35:49,641 --> 01:35:52,320 هو طباعة شبكة ثلاثة بثلاثة فقط من 2199 01:35:52,320 --> 01:35:54,990 علامات التجزئة للتذكرنا بهذه الكتل. 2200 01:35:54,990 --> 01:35:56,214 حسنًا، أنتِ المسؤولة. 2201 01:35:56,214 --> 01:35:57,636 أندريا: حسنًا. 2202 01:35:57,636 --> 01:35:59,762 هل يجب أن أقوم، مثلاً، بتكرار حلقي أو شيء من هذا القبيل؟ 2203 01:35:59,762 --> 01:36:01,428 دايفيد مالان: أيًّا كان ما يؤدي المهمة. 2204 01:36:01,428 --> 01:36:04,750 2205 01:36:04,750 --> 01:36:07,691 حسنًا، for. 2206 01:36:07,691 --> 01:36:08,190 حسنًا، جيد. 2207 01:36:08,190 --> 01:36:15,360 2208 01:36:15,360 --> 01:36:17,008 حسنًا، هذا أمر مثير للاهتمام. 2209 01:36:17,008 --> 01:36:23,710 2210 01:36:23,710 --> 01:36:27,933 حسنًا، طباعة، علامة الاقتباس وإنهاء الاقتباس، طباعة، نعم، حسنًا. 2211 01:36:27,933 --> 01:36:28,432 أندريا: حسنًا. 2212 01:36:28,432 --> 01:36:29,060 أوه، حسنًا. 2213 01:36:29,060 --> 01:36:30,060 دايفيد مالان: تفصيل الكلمة الرئيسية. 2214 01:36:30,060 --> 01:36:31,227 أندريا: ماذا كانت هذه، علامة تجزئة؟ 2215 01:36:31,227 --> 01:36:32,643 دايفيد مالان: علامة التجزئة جيدة، نعم. 2216 01:36:32,643 --> 01:36:33,510 أندريا: حسنًا. 2217 01:36:33,510 --> 01:36:34,600 ديفيد مالان: حسنًا. 2218 01:36:34,600 --> 01:36:40,320 وقبل القيام بهذا، هل يُريد الجميع منها أن تقوم بتشغيل هذا البرنامج 2219 01:36:40,320 --> 01:36:42,064 على أن يكون صحيحًا؟ 2220 01:36:42,064 --> 01:36:42,980 الجمهور: لا تقومي بهذا. 2221 01:36:42,980 --> 01:36:45,350 ديفيد مالان: لا، لماذا؟ 2222 01:36:45,350 --> 01:36:46,610 الشخص الذي صرح بالرفض، ماذا؟ 2223 01:36:46,610 --> 01:36:47,710 ما هو سبب رفضك؟ 2224 01:36:47,710 --> 01:36:50,894 الجمهور: N يساوي-- سيقوم بهذا [INAUDIBLE] 2225 01:36:50,894 --> 01:36:51,810 ديفيد مالان: جيد، حسنًا. 2226 01:36:51,810 --> 01:36:52,590 إذن قُمتَ بإصلاح ذلك. 2227 01:36:52,590 --> 01:36:53,160 جيد. 2228 01:36:53,160 --> 01:36:55,759 أي أسباب أخرى؟ 2229 01:36:55,759 --> 01:36:57,002 أجل؟ 2230 01:36:57,002 --> 01:37:01,704 الجمهور: [INAUDIBLE] 2231 01:37:01,704 --> 01:37:02,370 ديفيد مالان: حسنًا. 2232 01:37:02,370 --> 01:37:03,510 هل سيكون هذا بالأعلى والأسفل؟ 2233 01:37:03,510 --> 01:37:03,710 حسنًا، دعونا نرى. 2234 01:37:03,710 --> 01:37:05,690 هل يُمكنكِ إخبارنا لفظيًا-- هل يجب-- 2235 01:37:05,690 --> 01:37:09,460 2236 01:37:09,460 --> 01:37:12,315 هل يُمكنكِ إخبارنا ما الذي يقوم به البرنامج؟ 2237 01:37:12,315 --> 01:37:15,430 [LAUGHTER] 2238 01:37:15,430 --> 01:37:19,255 أندريا: for i في النطاق 3، إذن هذا سيحدث ثلاث مرات، ثم j 2239 01:37:19,255 --> 01:37:22,050 في النطاق 3، سيحدث الشيء التالي أيضًا ثلاث مرات. 2240 01:37:22,050 --> 01:37:23,400 إذن نطبع علامة تجزئة. 2241 01:37:23,400 --> 01:37:25,370 ثم علامة تجزئة أخرى وهكذا 2242 01:37:25,370 --> 01:37:28,930 لأن النهاية هي علامات الاقتباس. 2243 01:37:28,930 --> 01:37:29,740 دايفيد مالان: حسنًا. 2244 01:37:29,740 --> 01:37:35,480 أندريا: ثم يحدث هذا ثم نقوم بطباعة سطر جديد. 2245 01:37:35,480 --> 01:37:38,352 ثم سيقوم بتنفيذ ذلك ثلاث مرات. 2246 01:37:38,352 --> 01:37:39,310 ديفيد مالان: حسنًا. 2247 01:37:39,310 --> 01:37:40,060 ما هو رأيكم؟ 2248 01:37:40,060 --> 01:37:42,214 هل أنتم-- اقتنعت البطة. 2249 01:37:42,214 --> 01:37:44,380 حسنًا، لمَ لا تمضي قدمًا وتقومي بحفظ الملف. 2250 01:37:44,380 --> 01:37:45,160 دعونا نحاول. 2251 01:37:45,160 --> 01:37:48,130 لا ضرر في المحاولة، لذا صحيح أم خاطئ، دعونا نرى. 2252 01:37:48,130 --> 01:37:53,740 هذا يُدعى Mario3.py، وأعتقد أننا سنصفق لها إذا أمكننا. 2253 01:37:53,740 --> 01:37:55,770 عمل رائع للغاية. 2254 01:37:55,770 --> 01:37:56,560 حسنًا. 2255 01:37:56,560 --> 01:37:58,460 إذن دعونا-- وإذا كنتم تريدون واحدًا آخر. 2256 01:37:58,460 --> 01:38:00,670 إذن دعونا نلقي نظرة على مثال واحد أخير، 2257 01:38:00,670 --> 01:38:02,890 قادم من دائرة كاملة من حيث بدأنا. 2258 01:38:02,890 --> 01:38:04,330 ألقينا نظرة بالطبع على تغيير الحجم. 2259 01:38:04,330 --> 01:38:09,340 ودعونا نفتح ذلك، فقط لنرى كيف أكتب التعليمة البرمجية قليلاً 2260 01:38:09,340 --> 01:38:11,350 وأقوم بإنجاز هذا العمل بالفعل. 2261 01:38:11,350 --> 01:38:14,110 لذا في resize.py، من حيث بدأنا، 2262 01:38:14,110 --> 01:38:17,200 لاحظوا أن لدي سطور قليلة والتي آمل أن تكون مألوفة أكثر من ذلك قليلاً 2263 01:38:17,200 --> 01:38:17,700 الآن. 2264 01:38:17,700 --> 01:38:21,520 لكننا لم نقدم بالضبط كل هذه الميزات بأنفسنا. 2265 01:38:21,520 --> 01:38:24,850 لذا يتضح أن في السطر الأول والسطر الثاني لدينا 2266 01:38:24,850 --> 01:38:26,504 سطر واحد مألوف وسطر واحد غير مألوف. 2267 01:38:26,504 --> 01:38:29,170 يتيح لنا السطر الثاني الوصول إلى وسيطات سطر الأوامر فقط، والتي 2268 01:38:29,170 --> 01:38:30,910 نحتاج إليها لتغيير حجم الصورة النقطية. 2269 01:38:30,910 --> 01:38:34,070 تأتي القوة من السطر الأول. 2270 01:38:34,070 --> 01:38:36,720 يتضح أن هناك مكتبة في Python تُسمى pillow 2271 01:38:36,720 --> 01:38:39,470 والتي يمكنكم تثبيتها عن طريق كتابة أمر معين في النافذة الطرفية الخاصة بي. 2272 01:38:39,470 --> 01:38:41,430 لا تأتي بالضرورة مع جهاز Mac أو الكمبيوتر الشخصي الخاص بك. 2273 01:38:41,430 --> 01:38:43,679 يجب أن تقوم بتنزيلها وتثبيتها باستخدام أمر. 2274 01:38:43,679 --> 01:38:45,640 ثم إذا كنتَ تقرأ وثائقها، فستقول 2275 01:38:45,640 --> 01:38:48,640 من pil لصورة استيراد pillow. 2276 01:38:48,640 --> 01:38:50,200 الآن، هذه ليست صورة محددة. 2277 01:38:50,200 --> 01:38:52,870 هذا اسم مكتبة تُسمى مكتبة الصورة 2278 01:38:52,870 --> 01:38:56,740 التي تأتي مع هذا البرنامج الذي جعله شخص ما متوفرًا مجانًا. 2279 01:38:56,740 --> 01:39:00,420 لذا هي تقول فقط، أمنحني حق الوصول إلى المكتبة المتعلقة بالصورة. 2280 01:39:00,420 --> 01:39:03,970 ومما لا شك فيه، يمكن أن توجد أشياء متشابهة في C. لكننا بالطبع 2281 01:39:03,970 --> 01:39:06,190 قمنا بأشياء على مستوى منخفض جدًا. 2282 01:39:06,190 --> 01:39:10,150 حسنًا، إذا كان طول argv ليس 4، فسيخبر المستخدم بالاستخدام. 2283 01:39:10,150 --> 01:39:13,480 وهذا فقط إذا لم يتعاونوا عن طريق الكتابة كما يجب، هذا. 2284 01:39:13,480 --> 01:39:15,969 إن الأمر أكثر إطنابًا قليلاً الآن لأن لدينا Python 2285 01:39:15,969 --> 01:39:17,260 ولدينا ملحق الملف. 2286 01:39:17,260 --> 01:39:19,930 لكن يمكننا تنظيف ذلك من الناحية الفنية إذا أردنا ذلك حقًا. 2287 01:39:19,930 --> 01:39:23,290 السطور 7 و8 و9، لا يوجد شيء جديد هناك حقًا. 2288 01:39:23,290 --> 01:39:26,230 سأُعلن فقط عن ثلاثة متغيرات مكتوبة ضمنيًا. 2289 01:39:26,230 --> 01:39:28,510 لا داعي للقلق حول قول int أو سلسلة. 2290 01:39:28,510 --> 01:39:33,320 أصل إلى argv1 و2 و3، وهي 1 و2 و3. 2291 01:39:33,320 --> 01:39:35,920 ثم أقوم بشيء واحد السطر 7. 2292 01:39:35,920 --> 01:39:39,718 ما هو الشيء الذي يقوم به السطر 7 ويُعد مهمًا؟ 2293 01:39:39,718 --> 01:39:41,145 الجمهور: [INAUDIBLE] 2294 01:39:41,145 --> 01:39:43,770 ديفيد مالان: أقوم بتغيير الوسيطة من الناحية الفنية 2295 01:39:43,770 --> 01:39:46,520 سلسلة بشكل افتراضي-- لأنه بالفعل، كتبتُه أيدي الأشخاص 2296 01:39:46,520 --> 01:39:49,110 على لوحة المفاتيح-- وتم تحويله إلى رقم. 2297 01:39:49,110 --> 01:39:53,250 الآن، كملاحظة جانبية، إذا لم يقدم المستخدم رقمًا مثل 2 أو 10، 2298 01:39:53,250 --> 01:39:54,300 قد تنقسم هذه التعليمة البرمجية. 2299 01:39:54,300 --> 01:39:56,466 لنكن منصفين، يجب أن أتحقق حقًا من الخطأ 2300 01:39:56,466 --> 01:40:00,630 للتأكد إذا كان المستخدم قد كتب مرحبًا وليس 2 أو 10، 2301 01:40:00,630 --> 01:40:01,780 أريد العثور على هذا الخطأ. 2302 01:40:01,780 --> 01:40:02,988 لذا أنا مهمل قليلاً. 2303 01:40:02,988 --> 01:40:06,130 لكن كان من المفترض حقًا إظهار تعليمة برمجية موجزة. 2304 01:40:06,130 --> 01:40:09,730 لذا الآن لدينا infile وoutfile محددين بالضبط كما كان من قبل. 2305 01:40:09,730 --> 01:40:13,040 لذا لدينا فقط ثلاثة سطور متبقية وهي في الواقع تقوم بتنفيذ معظم السحر. 2306 01:40:13,040 --> 01:40:14,715 نعم. 2307 01:40:14,715 --> 01:40:22,650 الجمهور: [INAUDIBLE] 2308 01:40:22,650 --> 01:40:24,441 ديفيد مالان: انتظر، قل الجزء الأخير مرة أخرى. 2309 01:40:24,441 --> 01:40:26,600 الجمهور: [INAUDIBLE] 2310 01:40:26,600 --> 01:40:28,550 ديفيد مالان: نعم. 2311 01:40:28,550 --> 01:40:33,430 الجمهور: كان هناك تقريبًا [INAUDIBLE] 2312 01:40:33,430 --> 01:40:34,680 ديفيد مالان: ملاحظة جيدة. 2313 01:40:34,680 --> 01:40:38,700 إذن هذا ليس مجرد تحويل مدخلات المستخدم إلى قيمة ASCII معادلة 2314 01:40:38,700 --> 01:40:40,800 لأن هذا ليس ما نريده. 2315 01:40:40,800 --> 01:40:44,400 تم تحويل هذا int المُستخدَم هنا بالفعل 2316 01:40:44,400 --> 01:40:48,420 كما عبر A2I، وهي دالة ربما كنت تستخدمها منذ بضعة أسابيع، 2317 01:40:48,420 --> 01:40:50,460 انها مجرد تسمية موجزة أكثر قليلاً. 2318 01:40:50,460 --> 01:40:53,940 هناك دالة تستطيع من خلالها تحويل حرف أو سلسلة 2319 01:40:53,940 --> 01:40:55,201 إلى ما يعادلها من ASCII. 2320 01:40:55,201 --> 01:40:56,700 لكن ما يحدث هنا ليس هذا. 2321 01:40:56,700 --> 01:40:59,190 إنه يحول هذا إلى عدد صحيح بطريقة أكثر بديهية 2322 01:40:59,190 --> 01:41:01,811 دون استخدام دالة مسماة بطريقة مشفرة مثل a2i. 2323 01:41:01,811 --> 01:41:04,560 لذلك دعونا ننتقل إلى الأسفل أكثر قليلاً إلى هذه الأسطر القليلة الأخيرة 2324 01:41:04,560 --> 01:41:05,770 ونرى ما الذي يحدث. 2325 01:41:05,770 --> 01:41:08,220 ستعرف كيفية القيام ببعضهم فقط من خلال قراءة 2326 01:41:08,220 --> 01:41:09,870 الوثائق كما فعلنا تمامًا. 2327 01:41:09,870 --> 01:41:11,761 هذا يقول أعطني متغيرًا يُسمى صورة. 2328 01:41:11,761 --> 01:41:13,010 يمكن أن يطلق عليه أي شيء. 2329 01:41:13,010 --> 01:41:14,940 أنا أحاول فقط أن أكون متجانس داخل الملف. 2330 01:41:14,940 --> 01:41:17,100 هذا يقول، استخدم مكتبة الصور. 2331 01:41:17,100 --> 01:41:19,140 استخدم الدالة المفتوحة التي تأتي معها. 2332 01:41:19,140 --> 01:41:21,780 إذن الصورة هي نوع من البنية، والتي يوجد في داخلها 2333 01:41:21,780 --> 01:41:23,730 بعض الدالات المفيدة المتعلقة بالصور. 2334 01:41:23,730 --> 01:41:26,860 لذا أطلق وظيفتها المفتوحة على اسم الملف، 2335 01:41:26,860 --> 01:41:29,250 ثم امضِ قدمًا واستخرج ارتفاعه وعرضه. 2336 01:41:29,250 --> 01:41:32,100 لذا يتضح أن هذا صفًا آخر، إذا صح التعبير. 2337 01:41:32,100 --> 01:41:35,110 تشبه الصفوف، مرة أخرى، x فاصلة y، خط الطول فاصلة خط العرض. 2338 01:41:35,110 --> 01:41:37,560 ستعرف فقط أنها صفوف من خلال الوثائق. 2339 01:41:37,560 --> 01:41:42,150 لذا عندما أقول ارتفاع فاصلة، فإن هذا يأخذ ما يعد تقنيًا قائمة 2340 01:41:42,150 --> 01:41:43,675 من الحجم اثنين-- أو حقًا، صف-- 2341 01:41:43,675 --> 01:41:46,050 ويستخرج لي فقط العرض والطول. 2342 01:41:46,050 --> 01:41:48,362 لكن دعوني لا ألقي بالاً لهذه الصيغة المعينة. 2343 01:41:48,362 --> 01:41:50,070 المتبقي من هذا يقول ما يلي. 2344 01:41:50,070 --> 01:41:52,450 أعطني متغيرًا جديدًا يُسمى الصورة. 2345 01:41:52,450 --> 01:41:56,250 قم باستدعاء دالة تغيير حجم صورة المدخلات، وهي دالة أخرى 2346 01:41:56,250 --> 01:41:59,610 مضمنة فيه، تمامًا مثل open، وقم بتغييرها 2347 01:41:59,610 --> 01:42:03,750 بهذا الطول وهذا الارتفاع-- العرض الأصلي ضرب n، 2348 01:42:03,750 --> 01:42:05,520 الارتفاع الأصلي ضرب n. 2349 01:42:05,520 --> 01:42:08,850 لا يوجد تلاعب بالحشو، هذا كله مسئولية المكتبة. 2350 01:42:08,850 --> 01:42:11,160 تعامل أشخاص آخرون مع هذا الأمر لنا. 2351 01:42:11,160 --> 01:42:13,290 وهذا السطر الأخير، ربما هذا ليس مفاجئًا، 2352 01:42:13,290 --> 01:42:16,660 يحفظ صورة المخرج إلى اسم الملف هذا. 2353 01:42:16,660 --> 01:42:18,862 إذن في، تقريبًا، 15 سطرًا من التعليمات البرمجية وأقل 2354 01:42:18,862 --> 01:42:20,820 إذا تخلصنا من بعض المسافات، يمكنك 2355 01:42:20,820 --> 01:42:22,410 تنفيذ تغيير الحجم بالكامل. 2356 01:42:22,410 --> 01:42:24,490 لكن لنركز حقًا على منطق المشكلة، 2357 01:42:24,490 --> 01:42:26,130 أرغب في أخذ مدخل من المستخدم. 2358 01:42:26,130 --> 01:42:27,600 أريد تكبيره باستخدام عامل n. 2359 01:42:27,600 --> 01:42:28,740 وأريد حفظ الملف. 2360 01:42:28,740 --> 01:42:30,040 هذا ما يهمك. 2361 01:42:30,040 --> 01:42:33,270 أنت لا تهتم بالضرورة بالدخول في تعقيدات ما كان يجب عليك 2362 01:42:33,270 --> 01:42:36,870 القيام به عندما قمت به في C. 2363 01:42:36,870 --> 01:42:39,300 لذا لنقم بمثال واحد أخير هنا. 2364 01:42:39,300 --> 01:42:42,780 ستتذكر من مجموعة المشاكل الرابعة أنك قمت بتطبيق مدقق التهجئة الخاص بك. 2365 01:42:42,780 --> 01:42:45,790 والاحتمالات هي أنك قمت بتجربة أو جدول علامة تجزئة أو ما شابه ذلك. 2366 01:42:45,790 --> 01:42:48,120 ويتضح أن هذا ليس تافهًا، بالتأكيد في C. 2367 01:42:48,120 --> 01:42:51,100 وهو غير تافه بالتأكيد لأول مرة في أي لغة. 2368 01:42:51,100 --> 01:42:53,880 لكن دعوني أغتنم الفرصة وأقوم بذلك الآن في Python. 2369 01:42:53,880 --> 01:42:57,330 اسمحوا لي بالانتقال إلى source 6 حيث لديّ مثال على مدقق إملائي. 2370 01:42:57,330 --> 01:43:00,840 ولاحظوا أن في هذا المجلد اليوم أحضرت بعض الملفات معي. 2371 01:43:00,840 --> 01:43:03,030 لذا أحضرت نسخة من القواميس 2372 01:43:03,030 --> 01:43:06,750 من المجموعة الرابعة p، نسخة من ملفات النص، مثل أرض اللا لاند وما شابه 2373 01:43:06,750 --> 01:43:07,690 ذلك في النص. 2374 01:43:07,690 --> 01:43:11,280 ثم أحضرت ملفين-- dictionary.py وspeller.py-- 2375 01:43:11,280 --> 01:43:14,940 ويُعد الأخير تنفيذًا لـ speller.c بلغة Python. 2376 01:43:14,940 --> 01:43:17,940 ولن أقوم بسحب ذلك لأننا كتبنا ذلك بالكامل 2377 01:43:17,940 --> 01:43:18,600 من أجلكم. 2378 01:43:18,600 --> 01:43:22,770 لكن دعوني أمضي قدمًا وأكتب، على سبيل المثال، فقط قاموسي الخاص. 2379 01:43:22,770 --> 01:43:28,680 إذن dictionary.py هو التناظر لـ dictionary.c. 2380 01:43:28,680 --> 01:43:31,106 ودعونا نمضي قدمًا ونقوم بإعداد هذا. 2381 01:43:31,106 --> 01:43:33,480 دعوني أمضي قدمًا وأُنشئ هذا الملف في مجلد منفصل 2382 01:43:33,480 --> 01:43:36,150 للوقت الراهن، لذا dictionary.py. 2383 01:43:36,150 --> 01:43:38,184 ويوجد القليل من الدالات في dictionary.c 2384 01:43:38,184 --> 01:43:40,350 والذي ربما ينبغي علينا تفادي تنفيذه. 2385 01:43:40,350 --> 01:43:41,772 ما هي تلك الدالات؟ 2386 01:43:41,772 --> 01:43:43,380 الجمهور: Load. 2387 01:43:43,380 --> 01:43:45,090 ديفيد مالان: كان Load واحدًا، وهو يأخذ 2388 01:43:45,090 --> 01:43:46,990 اسم ملف أو قاموس. 2389 01:43:46,990 --> 01:43:47,850 لذا دعونا نفعل هذا. 2390 01:43:47,850 --> 01:43:48,930 وسأقول فقط to do. 2391 01:43:48,930 --> 01:43:49,680 عد إلى ذلك. 2392 01:43:49,680 --> 01:43:52,020 ما هي الدالات الأخرى التي كانت موجودة في dictionary.c؟ 2393 01:43:52,020 --> 01:43:53,580 Check، إذن def check. 2394 01:43:53,580 --> 01:43:56,280 وماذا يستغرق check كمدخل؟ 2395 01:43:56,280 --> 01:43:56,820 كلمة، نعم. 2396 01:43:56,820 --> 01:43:59,320 لذلك سنعود إلى هذا وفقط نعود إلى to do هذه. 2397 01:43:59,320 --> 01:44:00,523 ما هي الدالات الأخرى؟ 2398 01:44:00,523 --> 01:44:01,370 الجمهور: Size. 2399 01:44:01,370 --> 01:44:04,201 ديفيد مالان: Size كان واحدًا، لذا def size. 2400 01:44:04,201 --> 01:44:07,200 هذا لم يأخذ مدخلاً، لكنه أعاد فقط حجم البنية. 2401 01:44:07,200 --> 01:44:07,950 إذن سنعود إلى ذلك. 2402 01:44:07,950 --> 01:44:08,712 وأخيرًا؟ 2403 01:44:08,712 --> 01:44:09,420 الجمهور: Unload. 2404 01:44:09,420 --> 01:44:10,545 ديفيد مالان: حسنًا، إذن unload. 2405 01:44:10,545 --> 01:44:13,310 حسنًا، هذا هو إصدار Python من التعليمات البرمجية الخاص بالتوزيع 2406 01:44:13,310 --> 01:44:15,170 للمدقق الإملائي لملف القاموس الخاص بك. 2407 01:44:15,170 --> 01:44:17,670 لذا لا يأخذ unload أيضًا وسيطًا. 2408 01:44:17,670 --> 01:44:19,820 لذا هذا شيء علينا القيام به، أيضًا. 2409 01:44:19,820 --> 01:44:22,400 إذن ما هو مضمون إنشاء مدقق إملائي؟ 2410 01:44:22,400 --> 01:44:25,730 أنت تقوم بتحميل كلمات في دالة load من ملف القاموس. 2411 01:44:25,730 --> 01:44:27,980 والهدف هو تحميل تلك الكلمات بطريقة ما في الذاكرة. 2412 01:44:27,980 --> 01:44:30,950 كان لديك قرار تصميم لمجموعة p في C، 2413 01:44:30,950 --> 01:44:32,840 حيث يمكنك أن تصنع جدول علامة تجزئة أو محاولة 2414 01:44:32,840 --> 01:44:34,790 أو حتى قائمة مرتبطة أو حتى مصفوفة. 2415 01:44:34,790 --> 01:44:37,580 لكن الاحتمالات هي أن أول هؤلاء الاثنين هو الأكثر كفاءة. 2416 01:44:37,580 --> 01:44:40,550 لذا يتضح أنه في Python، لديك القدرة 2417 01:44:40,550 --> 01:44:43,640 لتخزين كلمات بسهولة في أي عدد من بنيات البيانات. 2418 01:44:43,640 --> 01:44:46,640 ليس لديك فقط ints وfloats وstrings، 2419 01:44:46,640 --> 01:44:49,250 ولكن لديك بوضوح قوائم، كما رأينا. 2420 01:44:49,250 --> 01:44:52,511 نحن ندعوها كائنات أو علامات تجزئة، أو جداول علامات التجزئة. 2421 01:44:52,511 --> 01:44:54,260 وهناك أشياء غيرها، أيضًا، تُدعى حتى 2422 01:44:54,260 --> 01:44:57,650 مجموعات، حيث أن المجموعة هي مجرد مجموعة من الكلمات 2423 01:44:57,650 --> 01:45:00,350 والتي ستكون قابلة للبحث بسهولة. 2424 01:45:00,350 --> 01:45:01,247 أتعلمون ماذا؟ 2425 01:45:01,247 --> 01:45:03,080 إذا كنت أريد في النهاية تحميل بعض الكلمات، اسمحوا 2426 01:45:03,080 --> 01:45:05,600 لي بإعطاء نفسي متغير عالمي يُدعى كلمات 2427 01:45:05,600 --> 01:45:08,250 وتهيئته إلى مجموعة فارغة. 2428 01:45:08,250 --> 01:45:11,330 إذن لدي متغير عالمي يُسمى كلمات ولا شيء فيه حتى الآن. 2429 01:45:11,330 --> 01:45:13,160 لكنه مجموعة من الكلمات. 2430 01:45:13,160 --> 01:45:15,660 كيف يمكنني تحميل كلمات في هذا القاموس؟ 2431 01:45:15,660 --> 01:45:17,540 حسنًا، دعونا نمضي قدمًا ونقوم بتنفيذ التحميل هنا. 2432 01:45:17,540 --> 01:45:20,240 لذا اسمحوا لي بالمضي قدمًا وإعلان متغير يُسمى file وافتح 2433 01:45:20,240 --> 01:45:24,230 هذا القاموس في وضع القراءة، تمامًا، كما هو الحال في C. 2434 01:45:24,230 --> 01:45:26,540 ثم كيف يمكنني دمج السطور في ملف؟ 2435 01:45:26,540 --> 01:45:27,510 لم نرَ ذلك. 2436 01:45:27,510 --> 01:45:30,530 لكنني أعرف كيفية تكرار السلاسل في مصفوفة 2437 01:45:30,530 --> 01:45:31,840 والأرقام في سلسلة. 2438 01:45:31,840 --> 01:45:35,720 اسمحوا لي باتباع غريزتي for line in file. 2439 01:45:35,720 --> 01:45:38,240 في الواقع، هذا سيفعل بالضبط ما تريده أن يفعل. 2440 01:45:38,240 --> 01:45:44,750 ثم اسمحوا لي بالمضي قدمًا وإضافة السطر التالي إلى بنية بيانات الكلمات الخاصة بي. 2441 01:45:44,750 --> 01:45:46,965 ثم دعوني أغلق الملف. 2442 01:45:46,965 --> 01:45:49,340 ثم اسمحوا لي أن أقول return true لأن كل شيء على ما يرام. 2443 01:45:49,340 --> 01:45:50,780 تم. 2444 01:45:50,780 --> 01:45:53,690 حسنًا، أنا أختصر بعض الأمور، من الناحية الفنية. 2445 01:45:53,690 --> 01:45:55,670 واسمحوا لي باستخدام تلك الدالة التي ألمحت إليها في وقت سابق. 2446 01:45:55,670 --> 01:45:58,584 اسمحوا لي بالمضي قدمًا واستدعاء r strip وstrip off 2447 01:45:58,584 --> 01:46:00,500 السطر الجديد لأنه في الملف، تقنيًا، 2448 01:46:00,500 --> 01:46:03,460 عندما تقرأ في هذه الكلمات، ينتهي كل سطر بخط مائل عكسي صفر. 2449 01:46:03,460 --> 01:46:04,620 هذا الآن جزء من الكلمة. 2450 01:46:04,620 --> 01:46:07,120 لذا تصحيح طفيف هنا أنني سأتخلص من السطر. 2451 01:46:07,120 --> 01:46:08,210 لكن هذا كل شيء بشأن load. 2452 01:46:08,210 --> 01:46:13,040 كيف يمكنني الآن معرفة ما إذا كانت كلمة معينة في هذه المجموعة؟ 2453 01:46:13,040 --> 01:46:18,510 حسنًا، يمكنني فقط القول، if word in words return true. 2454 01:46:18,510 --> 01:46:21,120 Else, return false. 2455 01:46:21,120 --> 01:46:22,950 تم التحقق. 2456 01:46:22,950 --> 01:46:26,590 كيف أعيد حجم بنية البيانات هذه؟ 2457 01:46:26,590 --> 01:46:30,450 ماذا عن مجرد إعادة طول تلك البنية، والكلمات، ثم 2458 01:46:30,450 --> 01:46:30,990 unload-- 2459 01:46:30,990 --> 01:46:33,082 سحقًا، يقوم Python بكل هذا من أجلي-- 2460 01:46:33,082 --> 01:46:35,818 تم. 2461 01:46:35,818 --> 01:46:37,120 دعوني أُقلص هذا. 2462 01:46:37,120 --> 01:46:37,870 وأتعلمون ماذا؟ 2463 01:46:37,870 --> 01:46:39,010 هذا أكثر إطنابًا قليلاً. 2464 01:46:39,010 --> 01:46:40,720 أنا لا أحتاج بالفعل للقيام بـ if else هذه. 2465 01:46:40,720 --> 01:46:44,691 يمكنني فقط إعادة كلمة في كلمات وهذا سيعيد تعبيرًا منطقيًا لي. 2466 01:46:44,691 --> 01:46:46,940 وبصراحة، إذا كنت أرغب في كتابتها بأحرف صغيرة، هذا سهل. 2467 01:46:46,940 --> 01:46:48,648 أستطيع فقط فعل هذا والاعتناء بذلك. 2468 01:46:48,648 --> 01:46:49,984 الآن إنه أفضل. 2469 01:46:49,984 --> 01:46:51,415 هذة المجموعة الرابعة p. 2470 01:46:51,415 --> 01:46:54,760 2471 01:46:54,760 --> 01:46:56,440 هل أنتم متحمسون؟ 2472 01:46:56,440 --> 01:46:57,790 هل تتمنون أننا قمنا بهذا في C؟ 2473 01:46:57,790 --> 01:46:59,830 إذن ما هو الهدف الأساسي من كل هذا، 2474 01:46:59,830 --> 01:47:03,760 لأن الهدف ليس خلق نوعًا من الهموم الثقيلة والتساؤلات الآن. 2475 01:47:03,760 --> 01:47:07,210 لكن الهدف الأساسي من تقديم C خلال هذه الأسابيع القليلة الماضية هو، 2476 01:47:07,210 --> 01:47:09,339 أولاً، لا شيء من هذا الآن تأخذه على نحو مسلم به. 2477 01:47:09,339 --> 01:47:12,130 أعني، قد تتوق إلى تنفيذ هذا في Python. 2478 01:47:12,130 --> 01:47:13,840 وربما كان عليك قراءة بعض الوثائق 2479 01:47:13,840 --> 01:47:15,310 واكتشاف صيغ مختلفة. 2480 01:47:15,310 --> 01:47:16,660 لكن يا إلهي. 2481 01:47:16,660 --> 01:47:20,082 لقد قللنا مما يأخذ على الأرجح الكثير من ساعاتك إلى ثوانٍ فقط 2482 01:47:20,082 --> 01:47:22,040 بمجرد كونك أكثر اطلاعًا على اللغة. 2483 01:47:22,040 --> 01:47:23,950 لكن أيضًا، بالنسبة إلى أول موضوع لدينا اليوم، 2484 01:47:23,950 --> 01:47:27,350 بمجرد حصولك على اللغة الصحيحة والأداة المناسبة لهذه المهمة. 2485 01:47:27,350 --> 01:47:30,200 الآن، لا يعني هذا أن هذا مثالي، لأنه في الواقع، 2486 01:47:30,200 --> 01:47:31,690 دعونا نمضي قدمًا ونقوم ببعض الاختبارات. 2487 01:47:31,690 --> 01:47:34,360 دعوني أنتقل إلى النافذة الطرفية الخاصة بي هنا. 2488 01:47:34,360 --> 01:47:38,320 وفي الواقع أحضرت الحل الخاص بي في مجلد C الخاص بي هنا. 2489 01:47:38,320 --> 01:47:38,980 لنرَ. 2490 01:47:38,980 --> 01:47:43,852 لدي التعليمات البرمجية الخاصة بي للمدقق الإملائي الذي تم تنفيذه في C هنا. 2491 01:47:43,852 --> 01:47:45,310 ودعوني أمضي قدمًا وأجرى اختبارًا. 2492 01:47:45,310 --> 01:47:49,120 دعوني أمضي قدمًا وأشغل المدقق الإملائي على، لنقل، النص شكسبير. 2493 01:47:49,120 --> 01:47:50,230 هذا مدخل كبير جدًا. 2494 01:47:50,230 --> 01:47:51,670 دعونا نمضي قدمًا وننقر فوق Enter. 2495 01:47:51,670 --> 01:47:53,230 وها هو المدقق الإملائي الخاص بي يعمل. 2496 01:47:53,230 --> 01:47:54,604 ويتم إخرج كل الكلمات. 2497 01:47:54,604 --> 01:47:58,780 وكان الوقت الإجمالي لتشغيل المدقق الإملائي في C، لنقل، 0.9 ثانية. 2498 01:47:58,780 --> 01:48:00,210 هذا جيد في الواقع. 2499 01:48:00,210 --> 01:48:03,910 في نافذة ثانية، دعوني أذهب لأعلى هنا في نافذة طرفية أخرى. 2500 01:48:03,910 --> 01:48:08,890 ودعوني أدخل في التعليمات البرمجية لهذا اليوم وإلى مجلد المدقق الإملائي حيث لدي 2501 01:48:08,890 --> 01:48:12,640 إصدار Python سأشغله كالتالي-- speller.py-- 2502 01:48:12,640 --> 01:48:15,250 دعوني أمضي قدمًا وأقوم بتشغيله على شكسبير. 2503 01:48:15,250 --> 01:48:16,970 إذن لم ننظر إلى speller.py. 2504 01:48:16,970 --> 01:48:20,671 لكنه في الأساس سطر لسطر، منفذ، ترجمة، من C إلى Python. 2505 01:48:20,671 --> 01:48:22,420 لكنه مرحب بك للنظر في ذلك عبر الإنترنت. 2506 01:48:22,420 --> 01:48:25,670 وتستخدم ملف dictionary.py الخاص بي. 2507 01:48:25,670 --> 01:48:27,040 دعوني أمضي قُدمًا وأشغل ذلك. 2508 01:48:27,040 --> 01:48:28,780 إنها تعمل خلال جميع الكلمات. 2509 01:48:28,780 --> 01:48:33,230 في الأعلى Python، في الأسفل C. ها نحن ذا. 2510 01:48:33,230 --> 01:48:36,130 ها نحن ذا. 2511 01:48:36,130 --> 01:48:38,705 ها نحن ذا. 2512 01:48:38,705 --> 01:48:41,580 الآن، هذا مضلل بعض الشيء لأنه مجددًا، الإنترنت هو الوسيلة. 2513 01:48:41,580 --> 01:48:46,020 نستخدام IDE يعتمد على شبكة الإنترنت، وذلك مضحك أنه يظهر مرات عديدة. 2514 01:48:46,020 --> 01:48:48,727 وسترى أنها ليست 10، 20 ثانية، مهما كان طول هذا الوقت. 2515 01:48:48,727 --> 01:48:50,310 هذا مجرد بطء في الإنترنت. 2516 01:48:50,310 --> 01:48:53,190 وكل ما نقوم بتوقيته هو دالاتك في C وPython. 2517 01:48:53,190 --> 01:48:55,950 لكن ما هي الفروق بين Python وC؟ 2518 01:48:55,950 --> 01:48:58,880 2519 01:48:58,880 --> 01:49:01,824 المدخلات نفسها. 2520 01:49:01,824 --> 01:49:02,490 ماذا ترى؟ 2521 01:49:02,490 --> 01:49:03,690 أجل؟ 2522 01:49:03,690 --> 01:49:05,491 الجمهور: كونها أكثر إيجازًا [INAUDIBLE]. 2523 01:49:05,491 --> 01:49:07,240 ديفيد مالان: نعم، لن أقول الإيجاز. 2524 01:49:07,240 --> 01:49:08,200 إنها أكثر جمالية. 2525 01:49:08,200 --> 01:49:09,284 إنها أكثر-- 2526 01:49:09,284 --> 01:49:10,850 الجمهور: [INAUDIBLE] تحديدًا. 2527 01:49:10,850 --> 01:49:12,600 ديفيد مالان: حسنًا، ليس حتى هذا، على ما أعتقد. 2528 01:49:12,600 --> 01:49:13,479 هذه الإجابات صحيحة. 2529 01:49:13,479 --> 01:49:14,520 كلاهما صحيح. 2530 01:49:14,520 --> 01:49:18,030 جميع الأرقام الهامة في الأعلى متطابقة. 2531 01:49:18,030 --> 01:49:21,680 ولكن ما هو المختلف بطريقة واضحة، على الرغم من ذلك؟ 2532 01:49:21,680 --> 01:49:22,760 إنها أبطأ. 2533 01:49:22,760 --> 01:49:24,710 إذن، تبدو Python أبطأ، صحيح؟ 2534 01:49:24,710 --> 01:49:27,150 يستغرق الأمر إجماليًا-- إذا نظرنا فقط إلى رقمين-- 2535 01:49:27,150 --> 01:49:30,230 1.55 ثانية في Python، إذا تجاهلت سرعة الإنترنت 2536 01:49:30,230 --> 01:49:32,820 وألقِ نظرة على أداء التعليمات البرمجية، مقابل 0.9. 2537 01:49:32,820 --> 01:49:37,970 إذن إنها أبطأ مرتين من C. ما هو الفارق هناك؟ 2538 01:49:37,970 --> 01:49:42,180 حسنًا، نعم، استغرق الأمر مني، ماذا، 10، 20، 30 ثانية لكتابة التعليمات البرمجية. 2539 01:49:42,180 --> 01:49:44,080 لكنها تستغرق مني ضعف الوقت لتشغيلها. 2540 01:49:44,080 --> 01:49:45,320 الآن، هذا ليس بالأمر الجلل، بالطبع، عندما نتحدث 2541 01:49:45,320 --> 01:49:46,904 عن بضعة ثواني هنا وهناك. 2542 01:49:46,904 --> 01:49:49,820 ولكن إذا كانت هذه مجموعة بيانات كبيرة تقوم بتحليلها لبعض المشاريع 2543 01:49:49,820 --> 01:49:54,587 أو للعمل أو لأي نوع من مشاريع التحليل والبيانات أكبر بكثير 2544 01:49:54,587 --> 01:49:57,170 من هذا-- خاصة في المجال الطبي أو ما شابه-- 2545 01:49:57,170 --> 01:49:58,628 ربما لا تريد استخدام Python. 2546 01:49:58,628 --> 01:50:01,980 بالتأكيد، يمكنك إخراج التعليمات البرمجية في دقائق معدودة، ربما بضع ساعات. 2547 01:50:01,980 --> 01:50:05,900 لكن بمجرد تشغيلها، اللعنة، تكون أبطأ من استخدام شيء مثل C. 2548 01:50:05,900 --> 01:50:08,214 في حين أنه في C، قد يأخذ الأمر مزيدًا من الوقت مقدمًا. 2549 01:50:08,214 --> 01:50:10,130 وقد لا ترتاح مع C بعد الآن 2550 01:50:10,130 --> 01:50:12,620 لذا ستستغرق وقتًا أطول لأنك يجب أن تعيد تعلم 2551 01:50:12,620 --> 01:50:13,400 اللغة. 2552 01:50:13,400 --> 01:50:16,250 لكن عند تشغيلها، رائع، فإنها تعمل مرتين أسرع. 2553 01:50:16,250 --> 01:50:18,110 لذا، من المحتمل، أنك تحتاج ذاكرة وصول عشوائي أقل، 2554 01:50:18,110 --> 01:50:21,530 أجهزة أقل أو أجهزة أقل تكلفة لأنه يمكنك الوصول إلى المزيد بأجهزة أفضل. 2555 01:50:21,530 --> 01:50:24,560 إذن مجددًا، هذا الموضوع الذي نواصل رؤيته في بنيات البيانات والخوارزميات 2556 01:50:24,560 --> 01:50:25,340 هو نوع من المقايضات. 2557 01:50:25,340 --> 01:50:28,760 مثل، وقت المطور هو مورد ومن الرائع أنني 2558 01:50:28,760 --> 01:50:31,520 والآن أنتم سنكون قادرين على كتابة التعليمات البرمجية بسرعة أكبر بكثير. 2559 01:50:31,520 --> 01:50:33,424 لكن عليك دفع الثمن بمكان ما. 2560 01:50:33,424 --> 01:50:35,090 ومن الواضح أن هناك ثمنًا مع Python. 2561 01:50:35,090 --> 01:50:37,610 وليس بسبب أن Python تم تنفيذها بشكل سيئ. 2562 01:50:37,610 --> 01:50:40,490 ولكن ما هو الفرق الأساسي بين نموذج 2563 01:50:40,490 --> 01:50:44,862 البرمجة في C مقابل Python كما رأيناها اليوم؟ 2564 01:50:44,862 --> 01:50:45,570 ما هو الفرق؟ 2565 01:50:45,570 --> 01:50:46,329 أجل؟ 2566 01:50:46,329 --> 01:50:52,816 الجمهور: [INAUDIBLE] سطر بسطر، بينما C، بشكل أساسي-- 2567 01:50:52,816 --> 01:50:57,037 [INAUDIBLE] تحسين تشغيله، فإنه سيتم تشغيل [INAUDIBLE].. 2568 01:50:57,037 --> 01:50:57,870 ديفيد مالان: بالفعل. 2569 01:50:57,870 --> 01:50:58,550 ودعوني أقلبه. 2570 01:50:58,550 --> 01:51:00,760 لذا، باستخدام C، تقوم بالتجميع إلى الأصفار والآحاد. 2571 01:51:00,760 --> 01:51:02,270 وهذا المجمع ذكي جدًا. 2572 01:51:02,270 --> 01:51:03,710 وسيحرك الأمور في الذاكرة. 2573 01:51:03,710 --> 01:51:06,543 سيتحدث لغة الكمبيوتر الأصلية من الأصفار والآحاد. 2574 01:51:06,543 --> 01:51:10,477 في الواقع، تقرأ Python التعليمات البرمجية الخاصة بك، على النقيض، سطر بسطر، من الأعلى إلى الأسفل، 2575 01:51:10,477 --> 01:51:11,060 من اليسار إلى اليمين. 2576 01:51:11,060 --> 01:51:14,226 وعلى الرغم من أنه من الناحية التقنية تحت الغطاء يوجد خطوة تجميع، 2577 01:51:14,226 --> 01:51:16,390 ومع ذلك هناك بعض التجاوزات المضمنة. 2578 01:51:16,390 --> 01:51:18,860 مجرد حقيقة أننا لم نعد نشغّل clang ومن ثم 2579 01:51:18,860 --> 01:51:22,520 نحصل على 0 و1 أو نشغّل make ونحصل على أصفار وآحاد، هذا أمر عظيم. 2580 01:51:22,520 --> 01:51:24,187 لكن علينا دفع الثمن بمكان ما. 2581 01:51:24,187 --> 01:51:25,520 إذن هذا سيكون موضوعيًا. 2582 01:51:25,520 --> 01:51:28,520 مثل، ليس هناك كأسًا مقدسة بين اللغات أو الأدوات أو التقنيات. 2583 01:51:28,520 --> 01:51:31,340 سيكون هناك مقايضات بين راحتك، أو معرفتك 2584 01:51:31,340 --> 01:51:33,990 أو تذكرك للغة، أو مدى سهولة استخدامها، 2585 01:51:33,990 --> 01:51:37,730 و مدى سهولة كتابتها، ومدى كفاءتك في 2586 01:51:37,730 --> 01:51:39,050 تشغيلها على الشاشة. 2587 01:51:39,050 --> 01:51:42,560 ومع C، نأمل الآن-- أننا لن نكتب أي تعليمات برمجية أكثر متعلقة بـ C-- 2588 01:51:42,560 --> 01:51:45,950 لديكم تقدير في Python عند إنشاء علامة تجزئة-- 2589 01:51:45,950 --> 01:51:47,450 أو قائمة، بدلاً من ذلك-- 2590 01:51:47,450 --> 01:51:50,840 أو إذا قمتم بإنشاء مجموعة أو جدول علامة تجزئة أو ما شابه ذلك، ما يمكنك الوصول إليه حقًا 2591 01:51:50,840 --> 01:51:53,650 هو تنفيذ شخص آخر للمجموعة 2592 01:51:53,650 --> 01:51:57,450 الرابعة p والمجموعة الثالثة p والمجموعة الثانية p والمجموعة الأولى p، في شكل ما، 2593 01:51:57,450 --> 01:52:01,310 ولكن الآن يتم عرضهم لك في لغة أكثر قوة وحداثة. 2594 01:52:01,310 --> 01:52:02,810 إذن دعونا ننتهي هنا رسميًا اليوم. 2595 01:52:02,810 --> 01:52:07,296 وفي الأسبوع المقبل، سنقوم بالشيء ذاته، ولكن في سياق برمجة الويب.