Jika Anda ingin membuat kotak ajaib, periksa artikel ini, kode python di bagian bawah – Cara membuat kotak ajaib
Kotak ajaib adalah susunan bilangan dari 1 sampai N^2 (N-kuadrat) dalam matriks NxN, dengan setiap bilangan muncul tepat satu kali, dan jumlah entri dari setiap baris, sembarang . Sesuatu seperti ini.
Tugas kode python adalah mendapatkan persegi dengan dimensi apa saja dan menentukan apakah itu persegi ajaib atau bukan. Ini adalah masukan yang mungkin.
Lapangan Ajaib
Piton1
2
3
4
5
cetak(magic_square([[1,2,3], [4,5,6], [7,8,9]]))
cetak(magic_square([[4,9,2], [3,5,7], [8,1,6]]))
cetak(magic_square([[7,12,1,14], [2,13,8,11], [16,3,10,5], [9,6,15,4]]))
cetak(magic_square([[23, 28, 21], [22, 24, 26], [27, 20, 25]]))
cetak(magic_square([[16, 23, 17], [78, 32, 21], [17, 16, 15]]))
Bagaimana hasilnya ditentukan?
Dalam kasus saya, saya membuat daftar dan menambahkan jumlah semua garis vertikal dan horizontal. Lalu saya menambahkan dua diagonal. Pada akhirnya, saya memeriksa apakah semua nilai dalam daftar itu sama. Jika mereka sama, ini berarti bujur sangkar itu ajaib. Ini adalah nilai dari daftar dan hasilnya
Kami sebelumnya melihat pengindeksan vektor 1 dimensi. Kami juga dapat mengindeks array yang lebih rumit seperti matriks. Dalam contoh ini kita akan membuat kotak ajaib, kotak ajaib adalah larik persegi di mana jumlah setiap kolom, baris, diagonal dan anti-diagonal adalah sama.
Untuk melakukan ini, kita perlu menggunakan fungsi perpustakaan pihak ketiga magic_square. Kami akan mengimpornya sebagai ms. Jika Anda belum menginstal perpustakaan ini, gunakan
Piton
Membuat Kotak Ajaib
Setelah kami memiliki pustaka ini, kami dapat mengimpor prasyarat NumPy sebagai np dan pustaka magic_square sebagai ms
Piton
[[17 24 1 8 15]
[23 5 7 14 16]
[ 4 6 13 20 22]
[10 12 19 21 3]
[11 18 25 2 9]]
Mari kita lihat dulu dimensi matriks menggunakan bentuk fungsi
Piton
(5, 5)
_Ini mengembalikan jumlah baris dan jumlah kolom masing-masing. Karena merupakan persegi, keduanya memiliki nilai yang sama yaitu 5. Ingat kita menggunakan pengindeksan urutan 0, yang berarti kita mulai dari elemen ke-0 dan naik ke tetapi tidak menyertakan batas atas 5 ini, sehingga elemen maksimum adalah elemen ke-4. Kita bisa melihat ini ketika kita membuka variabel s di explorer variabel
Mengindeks Elemen Tunggal
Untuk memilih satu elemen misalnya elemen s pada baris 0 dan kolom 0 kita dapat menggunakan tanda kurung siku untuk mengindeks menjadi s. Pembatas koma digunakan untuk memisahkan elemen baris dari elemen kolom
Piton
17
Kita bisa mencoba juga untuk baris 1 dan kolom 3
Piton
14
Piton
12
_Seperti yang kita lihat saat mengindeks dengan vektor, juga dimungkinkan untuk mengindeks menggunakan elemen negatif. Untuk ketiga nilai di atas mereka juga dapat ditentukan sebagai
Piton
17
Piton
14
Piton
12
_Pengindeksan Banyak Nilai
Dimungkinkan juga untuk memilih beberapa elemen. Misalnya jika kita menginginkan elemen di baris ke-1 dan kolom ke-2 dan elemen di baris ke-3 dan kolom ke-4, kita akan menggunakan. Perhatikan bahwa elemen baris diapit tanda kurung siku menggunakan koma sebagai pembatas. Elemen dalam kolom juga diapit oleh tanda kurung siku menggunakan koma sebagai pembatas. Dan keduanya diapit di luar tanda kurung siku, sekali lagi dengan pembatas di antara keduanya
Piton
[7 3]
_Dimungkinkan juga untuk membuat pilihan menggunakan titik dua. Katakanlah kita ingin baris 1 sampai 3 (ingat dengan pengindeksan urutan 0 kita pergi ke batas atas 3 ini tetapi tidak memasukkannya), jadi ini adalah baris 1 dan baris 2 dan kita ingin keduanya berada di kolom 1 yang bisa kita gunakan
Piton
[5 6]
_Titik dua juga dapat digunakan untuk memilih baris atau kolom penuh. Mari kita ambil baris pertama misalnya
Piton
(5, 5)
_0Mengindeks Baris, Kolom, dan Diagonal
Dalam kotak ajaib, semua baris, kolom, dan diagonal memiliki nilai yang sama. Untuk kotak ajaib, periksa ini menggunakan pengindeksan baris atau kolom, fungsi penjumlahan, fungsi diag, dan fungsi fliplr. Saya menyarankan Anda untuk mencoba yang ini sebelum membaca di bawah untuk latihan
Mari kita mulai dengan lima baris
Piton
(5, 5)
_1Piton
(5, 5)
_2Piton
(5, 5)
_3Piton
(5, 5)
_4Piton
(5, 5)
_5Sejauh ini bagus, 5 baris semuanya memiliki jumlah 65, sekarang mari kita ulangi dengan 5 kolom
Piton
(5, 5)
_6Piton
(5, 5)
_7Piton
(5, 5)
_8Piton
(5, 5)
_9Piton
17
0Sejauh ini bagusnya lagi, semua kolom juga berjumlah 65
Untuk diagonal kita bisa menggunakan fungsi diag
Piton
17
1Sekali lagi sama dengan 65. Untuk antidiagonal, kita perlu membalikkan matriks ke kiri ke kanan.
Piton
Membuka sfliplr di explorer variabel dan membandingkannya dengan yang di atas
Kita melihat bahwa diagonal baru adalah antidiagonal sebelumnya, jadi kita dapat menggunakan fungsi diag
Piton
17
2Kita sekarang melihat jumlah dari anti-diagonal juga sama dengan 65 artinya persegi ajaib yang dibuat memang persegi ajaib
Skrip Lengkap
Untuk kenyamanan saya akan meletakkan semua kode untuk menentukan panjang kotak ajaib ini dalam satu file skrip