بيثون أم لا بيثون

سأتحدث عن المشكلات التي واجهتها عند اختيار Python3 كلغة أولى.
لم أدرس البرمجة في الجامعة.
أنا لا أريد أن أبدأ holywar.

في عام 2016 ، نصحت Google بتعلم Python3 إذا لزم الأمر:

1. من السهل أن تبدأ اللغة.
2. لغة للتعلم الآلي.
3. لغة للألعاب 2D بسيطة.

1. شاهدت المحاضرة الأولى لدورة Harvard CS50 على موقع JavaRush على الويب وأدركت أنني لا أريد:

#include <stdio.h> int main(int argc, const char *argv[]) { printf("Hello world\n"); return 0; } 

عندما يمكنك القيام بذلك:

 print('Monty Python') 

جافا سكريبت خائفة من ثلاثة أنظمة: JS / HTML / CSS.

2. ألهم التعلم الآلي جميع المقالات والأمثلة لتشبه السايبربانك والخيال العلمي.

3. هل يمكنني برمجة الألعاب؟ سوبر!

لقد استوردت ذلك ، وأنا أقدر فلسفة بيثون ، وبدأت في قراءة كتاب مايكل داوسون ، برمجة بيثون. بعد ثلاثة أسابيع من "Hello World!" كتبت نسخة من لعبة Life مع واجهة المستخدم الرسومية . لقد وقعت في غرام بيثون ، وعندما بدأت الصعوبات ، اعتقدت أنني لا أعرف ما يكفي وأكتب خوارزميات سيئة.

سرعة

كنت tkinter ووجهت المستطيلات لإنشاء الخلايا.
حقل 800x640. حجم الخلية هو 10x10.

 class Square(object): def __init__(self, canvas, x, y, size, main): self.canvas = canvas self.cel = self.canvas.create_rectangle(x, y, x + size, y + size, fill='#EEEEEE') self.main = main self.color_change = True self.canvas.tag_bind(self.cel, '<ButtonPress-1>', self.paint) 



هذا الحقل الصغير لم يكن لديه وقت لملئه بالكامل. تم تحديث حوالي 600 خلية بسرعة ، ولكن بمجرد خفض حجم الخلية إلى 4 ، انخفض معدل التغير في حالة الخلايا واستجابة الواجهة.

أزلت فئة Square وبدأت في رسم وحدات البكسل من الصورة. تعمل الواجهة بشكل جيد ، ولكن بعد 200 خلية تم تحديث كل شيء ببطء شديد. لقد وجدت مشكلة في الخوارزمية. ارسم خلية من 4 بكسل أبطأ من 1 بكسل.

 def fill_black(self, x, y, color): for i in range((-self.cell // 2) - 1, (self.cell // 2) - 1): for j in range((-self.cell // 2) - 1, (self.cell // 2) - 1): xx = (x + i) % self.can_width yy = (y + j) % self.can_height self.cell_matrix.put(color, (xx, yy)) 

بعد التصحيحات ، حصلت على 600 خلية بالسرعة العادية وشخصيات صغيرة جدًا على الشاشة. تمكنت من رفع السرعة إلى 900 خلية عندما توقفت عن التحقق من الصورة "للبكسل الأسود" وبدأت في تخزين حالة النظام في المصفوفة.

 def fill_black(self, coords, color, virt_color): x, y = coords self.virt_mat[x][y] = virt_color self.cell_matrix.put(color, (x, y)) 

لقد قمت بتثبيت pygame ، وترحيل الخوارزمية وحصلت على 9000 خلية بمعدل 4 إطارات في الثانية. لكن الألعاب تعمل بشكل أسرع ، وليس هناك نقاط على الشاشة فقط.
بدأت أشك في أنها مسألة لغوية.
حاولت سيثون. نظام يتكون من 30000 خلية حصل على 4 إطارات في الثانية.



لم أكن أريد C ، لكني حصلت على C.

كيفية حزمة لقابلية لجهاز كمبيوتر آخر؟

تعاملت مع هذا باستخدام py2app ، ولكن ما زلت لم أفهم كيف يعمل.

المكتبة القياسية والوحدات الخارجية

لم أتمكن من تقييم هذا. لقد قمت دائمًا بتثبيت شيء آخر ، وفي بعض الأحيان ، لم ترغب الوحدات في العمل مع بعضها البعض. كان لدي ثلاثة أحزمة لتغليف التطبيقات المنفصلة مع tkinter ، وسادة + tkinter و pygame. لقد بحثت في مجلد حزم الموقع ولم أكن أعرف ما الذي يعتمد عليه ولماذا يكمن هناك. أنا لم أكتب وحداتي. كنت أبحث جاهزة.

بشكل عام ، مررت بهذا وأردت البساطة.
لغة يمكن رؤيتها.

اخترت لوا. لسبب ما ، اخترت لغة أخرى مع بناء جملة غير مألوف :-)

سرعة

أنا جعلت الحياة على لوا + Love2d. أنا فقط استخدم وظائف اللغة والمحرك.

 function Life:draw() love.graphics.setCanvas(self.canvas) love.graphics.clear() for y=1,self.rows do for x=1,self.cols do if self.cells[y][x]==1 then love.graphics.setColor(self.color) love.graphics.points(x-1,y-1) end end end love.graphics.setCanvas() love.graphics.setColor(set.WHITE) love.graphics.draw(self.canvas,self.x,self.y) end 

مع 111735 خلية حية ، يعمل النظام بسرعة 18 إطارًا في الثانية.



كيفية حزمة لقابلية لجهاز كمبيوتر آخر؟

كتبت البرامج النصية على Lua + Love2d لحزم التطبيقات لنظام التشغيل MacOS و Windows. نعم ، هناك تعليمات على الموقع ، ولكن الآن بالنسبة لي هذه العملية ليست "سحرية" كما هو الحال مع py2app.

مكتبة قياسية صغيرة

فاتني وظائف Python المعتادة: الخريطة ، التصفية ، التقليل ، المدى ، واضطررت إلى إنشاء مكتبة عملية. لا توجد فصول في لوا ، لكنني قرأت كيفية إضافتها إلى اللغة وفهمت بشكل أفضل كيف تعمل الفصول في بيثون. فقط مع لوا أحب الإغلاق والمولدات.

عندما جربت جميع وظائف المكتبة القياسية وثلث الوظائف من الوحدات النمطية للتفاعل مع اللغة C ، كان لدي فكرة عامة عن اللغة. هذا شعور طيب للغاية. يبدو أن لوا مكان جيد للبدء ، لكن اللغة ليست شائعة.

إذا تمكنت من إعادة تحديد اللغة الأولى ، فسأبدأ باستخدام JavaScript.
لماذا؟

1. اللغة تعمل في المتصفحات.
2. شعبية.
3. التعرف على الويب.
4. JavaScript + pixi.js واللعبة ستعمل بدون مشاكل.

وبيثون ، كنت أدرس مع خوارزميات التعلم الآلي.

Source: https://habr.com/ru/post/ar478928/


All Articles