جدول الضرب صف واحد


في الصورة ، ترى جدول الضرب المعتاد ، الذي أعتقد أنه مألوف للجميع.
لا يوجد شيء خاص حول هذا الموضوع ، إلا أن الخوارزمية بأكملها لإنشائها مضغوطة إلى سلسلة Python قياسية واحدة تتكون من 79 حرفًا (انظر PEP8 ). من يهتم ، مرحبا بكم في القط.

بادئ ذي بدء ، يجدر الإجابة على السؤال الذي طرح بين الكثيرين ، "لماذا هذا؟" لقد تضافرت كل هذه العوامل من عاملين ، أولاً ، بناءً على توصية عاجلة من شخص جيد ، أجريت دراسة معمقة لبيثون ، وثانياً ، أحب فكرة الديموزين . كانت النتيجة رغبة في كتابة (بصوت عالٍ للغاية) شيء صغير جدًا (مثالي في سطر واحد) ، ولكن بصريًا ، باستخدام ميزات ترميز Python لكل هذا. قررت عرض جدول الضرب.

تجدر الإشارة إلى أنني أكتب في Python3.7. لن تعمل الإصدارات الأقل من 3.6 نظرًا لعدم وجود دعم لخطوط الأسطر ، ونتيجة لذلك ، سيتجاوز طول نص البرنامج النصي 79 حرفًا.

كيف تحولت ثمانية خطوط إلى واحد


بادئ ذي بدء ، كتبت رمزًا يعرض جدول الضرب ، ولا أهتم مطلقًا بالاكتناز:



إدراج
def MultiTabl(): tabl = '' for y in range(1,11): for x in range(1,11): tabl += f'{x*y}\t' tabl += f'\n' return tabl 


يمكنك إنشاء قيم الجدول باستخدام المولدات ، وترك الحلقات لتفريغ القوائم. وكان عيب هذا النهج عدد أكبر من الخطوط:



إدراج
 def MultiTabl(): nums = [[x*y for x in range(1,11)] for y in range(1,11)] tabl = '' for line in nums: for item in line: tabl += f'{item}\t' tabl += f'\n' return tabl 


يمكنك أيضًا إعطاء المولد ترتيبًا لعلامات التبويب ('\ t') باستخدام الخطوط f:

 nums = [[f'{x*y}\t' for x in range(1,11)] for y in range(1,11)] 

إذا تم لصق القائمة المستخرجة في الدورة الأولى في سلسلة باستخدام طريقة join join () باستخدام التخصيص المتوازي للمتغيرات ووضع الدورة على سطر واحد ، فسيتم تقليل حجم الرمز بشكل كبير:



إدراج
 def MultiTabl(): nums, tabl = [[f'{x*y}\t' for x in range(1,11)] for y in range(1,11)], '' for line in nums: tabl += ''.join(line) + '\n' return tabl 


وإذا أضفت الصلة () و '\ n' إلى المولد:

 def MultiTabl(): nums, tabl = [''.join([f'{x*y}\t' for x in range(1,11)])+'\n' for y in range(1,11)], '' for line in nums: tabl += line return tabl 

الآن لدينا قائمة من السلاسل الموجودة تحت تصرفنا ، ويمكن أيضًا لصقها باستخدام join () ، وبالتالي التخلص من الحلقات:
 def MultiTabl(): tabl = ''.join([''.join([f'{x*y}\t' for x in range(1,11)])+'\n' for y in range(1,11)]) return tabl 

حسنًا ، الخيار الموعود في سطر واحد (بالطبع ، لا يمكنك التخلص من الطباعة)

 print( ''.join([''.join([f'{x*y}\t' for x in range(1,11)])+'\n' for y in range(1,11)]) ) 

بالطبع ، سيقول Python gurus "ما هذا؟" ، لكن تجدر الإشارة إلى أن هذا النهج ليس واضحًا للمبتدئين.

يجب أن لا تأخذ هذا التأليف على محمل الجد ، لقد كتبته كإحماء قبل مقالة كبيرة ، سيكون أمراً رائعاً إذا أتت بابتسامة ، وعظيمة إذا استفادت.

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


All Articles