Tabel perkalian baris tunggal


Dalam gambar Anda melihat tabel perkalian biasa, yang, saya pikir, sudah biasa bagi semua orang.
Tidak ada yang istimewa tentang itu, kecuali bahwa seluruh algoritma untuk membangunnya dikompresi menjadi satu string Python standar 79 karakter (lihat PEP8 ). Siapa peduli, selamat datang ke kucing.

Untuk mulai dengan, ada baiknya menjawab pertanyaan yang muncul di antara banyak orang, "Mengapa ini?". Semuanya datang bersama dari dua faktor, pertama, berdasarkan rekomendasi kuat dari satu orang baik, saya mengambil studi mendalam tentang Python, dan kedua, saya suka konsep demoscene . Hasilnya adalah keinginan untuk menulis (tentu saja dengan terlalu keras mengatakan) sesuatu yang sangat kecil (idealnya dalam satu baris), tetapi visual, menggunakan fitur pengkodean Python untuk semua ini. Saya memutuskan untuk menampilkan tabel perkalian.

Perlu dicatat bahwa saya menulis di Python3.7. Versi di bawah 3.6 tidak akan berfungsi karena kurangnya dukungan untuk f-line, dan sebagai hasilnya, skrip yang bekerja akan melebihi 79 karakter.

Bagaimana delapan garis berubah menjadi satu


Untuk mulai dengan, saya menulis kode yang menampilkan tabel perkalian, sama sekali tidak peduli tentang kekompakan:



Daftar
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 


Anda bisa menghasilkan nilai tabel menggunakan generator, dan membiarkan loop untuk membongkar daftar. Kerugian dari pendekatan ini adalah jumlah baris yang lebih besar:



Daftar
 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 


Anda juga dapat memberi generator pengaturan Tab ('\ t') menggunakan f-line:

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

Jika daftar yang diekstrak dalam siklus pertama direkatkan ke dalam string menggunakan metode string join (), menggunakan penugasan paralel variabel dan menempatkan siklus pada satu baris, ukuran kode akan berkurang secara signifikan:



Daftar
 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 


Dan jika Anda menambahkan join () dan '\ n' ke generator:

 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 

Sekarang kita memiliki daftar string yang kita miliki, dan itu juga dapat dilem menggunakan join (), sehingga menghilangkan loop:
 def MultiTabl(): tabl = ''.join([''.join([f'{x*y}\t' for x in range(1,11)])+'\n' for y in range(1,11)]) return tabl 

Ya, opsi yang dijanjikan dalam satu baris (tentu saja, Anda tidak dapat menghilangkan hasil cetak)

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

Tentu saja, guru Python akan berkata, "Apa itu?", Tetapi perlu dicatat bahwa pendekatan ini tidak jelas bagi pemula.

Anda tidak harus menganggap karya ini terlalu serius, saya menulisnya sebagai pemanasan sebelum artikel besar, akan lebih bagus jika membawa senyum, dan hanya bagus jika bermanfaat.

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


All Articles