في الصورة ، ترى جدول الضرب المعتاد ، الذي أعتقد أنه مألوف للجميع.
لا يوجد شيء خاص حول هذا الموضوع ، إلا أن الخوارزمية بأكملها
لإنشائها مضغوطة إلى سلسلة 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 "ما هذا؟" ، لكن تجدر الإشارة إلى أن هذا النهج ليس واضحًا للمبتدئين.
يجب أن لا تأخذ هذا التأليف على محمل الجد ، لقد كتبته كإحماء قبل مقالة كبيرة ، سيكون أمراً رائعاً إذا أتت بابتسامة ، وعظيمة إذا استفادت.