Latihan logik dan pengaturcaraan (penyelesaian): Pendekatan dan Pengoptimuman

王林
Lepaskan: 2024-08-21 06:09:10
asal
374 orang telah melayarinya

Ejercicios de logica y programacion (oluciones): Enfoques y Optimización

Memandangkan latihan ini: (dari codewars.com)

Buat fungsi yang mengembalikan kuasa dua setiap digit nombor.

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)
Salin selepas log masuk

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)
Salin selepas log masuk

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.

  • Menggabungkan rentetan dalam gelung mungkin kurang cekap prestasi untuk bilangan yang sangat besar, tetapi boleh diterima dengan sempurna untuk kebanyakan kes penggunaan.

*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)))
Salin selepas log masuk

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!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!