Sebagai contoh, apabila memasukkan fungsi nombor 702 harus kembali 4904, kerana kuasa dua 7 ialah 49, kuasa dua 0 ialah 0 dan kuasa dua bagi 2 ialah 4. Jika fungsi menerima sifar ia mesti mengembalikan 0.
Cabaran asas latihan ini adalah untuk melalui digit integer demi digit dan mengembalikan hasil sebagai integer lain.
Seperti segala-galanya dalam pengaturcaraan, adalah mungkin untuk menyelesaikan latihan ini dalam banyak cara. Mula-mula, mari selesaikannya menggunakan sifat manipulasi nombor dalam Python, kemudian saya akan menerangkan cara lain yang lebih maju?.
def square_digits(num): if num == 0: return 0 result = "" while num > 0: num_sqr = (num % 10) ** 2 num = num // 10 result = str(num_sqr) + result return int(result)
Dalam kod ini, kami mula-mula menilai sama ada 0 diterima untuk mengembalikan 0, seperti yang ditunjukkan dalam penyata. Kemudian, kami memulakan pembolehubah hasil sebagai rentetan kosong, buat gelung sementara dengan syarat num > 0. Kami mentakrifkan pembolehubah num_sqr, iaitu kuasa dua bagi setiap digit yang diterima. Dengan nombor % 10 kita memperoleh digit terakhir nombor yang diterima dan kemudian kuasa duakannya dengan **2.
Menggunakan num % 10 ialah kaedah biasa untuk mengekstrak digit terakhir nombor.
Ungkapan num = num // 10 menghapuskan digit terakhir nombor, memajukan setiap digit.
Cara lain untuk menyelesaikannya ialah menukar nombor itu kepada rentetan dan gelung melalui rentetan ini dengan gelung for:
def square_digits(num): result = "" for digit in str(num): result += str(int(digit)**2) return int(result)
Kod ini lebih optimum, ia mempunyai lebih sedikit baris dan traversal difahami dengan baik, di samping fakta bahawa ia tidak perlu untuk menilai jika ia menerima 0. Dalam Python adalah mungkin untuk melintasi aksara rentetan dengan aksara dengan gelung untuk. Kami menggunakan fungsi ini untuk menggelungkan nombor yang diterima, menukarnya dengan str(num) kepada rentetan. Kami mencipta hasil pembolehubah sebagai rentetan kosong, yang mana satu aksara akan digabungkan iaitu hasil daripada digit yang ditukar kepada integer dan dinaikkan kepada 2, semuanya ditukar kepada rentetan. Kemudian, kami mengembalikan hasil yang ditukar kepada integer.
*Cara yang lebih maju dan "elegan" * menggunakan Penjana Pemahaman dan motodo .join. Saya membentangkan kod kepada anda terlebih dahulu dan kami akan membahagikannya dengan menerangkan istilah ini.
def square_digits(num): return int(''.join(str(int(digit)**2) for digit in str(num)))
Kod pertama ini tidak begitu boleh dibaca jika anda tidak mengetahui konsepnya
yang membentuknya.
Ungkapan str(int(digit)**2) untuk digit dalam str(num) ialah _generator _(Ungkapan Generator) yang berulang pada setiap digit dalam perwakilan rentetan nombor nombor.
Untuk setiap digit, ia menukarnya kepada integer (int(digit)), menduakannya (**2), dan kemudian menukarnya kembali kepada rentetan (str(...)). Kemudian, dengan ''.join(...), anda mengambil urutan (dalam kes ini, penjana) dan menggabungkan semua elemen ke dalam satu rentetan. Di sini, semua digit persegi digabungkan menjadi satu rentetan tanpa sebarang pemisah (kerana rentetan antara petikan tunggal adalah kosong '').
Seperti yang kita lihat, cara yang berbeza untuk menyelesaikan latihan menunjukkan tahap pengetahuan dalam bahasa. Semua penyelesaian adalah betul jika mereka lulus ujian, tetapi ada yang lebih cekap dan boleh dibaca daripada yang lain. Pilihan pendekatan bergantung pada konteks dan perkara yang diutamakan dalam setiap kes:
Kebolehbacaan: Adalah penting apabila pembangun lain akan membaca dan mengekalkan kod anda. Kod yang jelas dan mudah difahami mengurangkan kemungkinan ralat dan menjadikannya lebih mudah untuk diselenggara. ?
Kecekapan: Penting apabila bekerja dengan volum data yang besar atau dalam aplikasi yang prestasinya kritikal. Kod yang lebih dioptimumkan boleh membuat perbezaan besar dalam kelajuan dan penggunaan sumber. ?
Kesederhanaan: Untuk kes di mana keutamaan adalah untuk menyelesaikan masalah dengan cepat dan terus, seperti dalam prototaip atau latihan didaktik. Kesederhanaan sering menjadikan penyahpepijatan dan ujian kod lebih mudah. ?
Apabila membangun, adalah penting untuk mencari keseimbangan antara pertimbangan ini, menyesuaikan penyelesaian kepada keperluan khusus projek atau tugas.
Atas ialah kandungan terperinci Latihan logik dan pengaturcaraan (penyelesaian): Pendekatan dan Pengoptimuman. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!