Rumah >pembangunan bahagian belakang >Tutorial Python >Posting pertama 4
jawatan ini mengandungi teka -teki! Mari kita memecahkan kod dan selesaikan misteri.
Pengekodan dan penyahkodan: Kod bermula dengan penyahkodan BASE64.
<code class="language-python">encoded = 'SSBhbSBuZXcgaGVyZSwgYW5kIGxvb2tpbmcgZm9yd2FyZCB0byBwb3N0aW5n' decoded = base64.b64decode(encoded).decode('utf-8') </code>ini menghasilkan
yang mengandungi rentetan "Saya baru di sini, dan tidak sabar untuk menyiarkan". decoded
Generasi indeks: Proses penjanaan indeks kompleks mengikuti menggunakan dan itertools.chain
. functools.reduce
<code class="language-python">indices = chain.from_iterable( [reduce(lambda x, y: x + y, [[i] for i in range(len(decoded))][::j]) for j in range(1, 2)] )</code>Bahagian ini rumit. Fungsi
dengan reduce
pada dasarnya adalah senarai penjumlahan. Pemahaman senarai lambda x, y: x y
mencipta senarai senarai, di mana setiap senarai dalaman mengandungi satu indeks. Penghirisan [[i] for i in range(len(decoded))]
dengan [::j]
antara 1 hingga 1 (kerana j
) bermaksud ia hanya meleleh sekali, dengan berkesan memilih semua indeks. Oleh itu, range(1, 2)
menjadi penjana yang menghasilkan semua indeks dari 0 hingga indices
. len(decoded) - 1
Unscrambling: Kod kemudian menggunakan indeks ini untuk melepaskan rentetan . Terdapat ralat kecil dalam kod asal; Keadaan decoded
tidak lengkap. Dengan mengandaikan ia dimaksudkan untuk menjadi if i
: if i < len(decoded)
<code class="language-python">unscrambled = ''.join(decoded[i] for i in indices if i < len(decoded))</code>Baris ini membina semula rentetan asal, jadi
akan menjadi "Saya baru di sini, dan tidak sabar untuk menyiarkan". unscrambled
Tugasan Variabel: baris seterusnya menarik.
<code class="language-python">vars()[decoded[:3]] = unscrambled</code>ini secara dinamik mencipta pembolehubah yang dinamakan "Saya" dan menyerahkan rentetan yang tidak tercemar kepadanya.
Percetakan: Akhirnya, kod mencetak rentetan berulang kali menggunakan dan cycle
. reduce
<code class="language-python">(lambda x: print(x))(reduce(lambda a, b: a + b, cycle([decoded])))</code>ini akan mencetak "Saya baru di sini, dan tidak sabar untuk menyiarkan" berulang kali (mungkin sehingga terganggu).
Penyelesaian:
Penyelesaian teka -teki bukanlah satu jawapan tetapi pemahaman bagaimana kod berfungsi. Teras "Mesej Rahsia" sudah ada dalam rentetan yang dikodkan: "Saya baru di sini, dan tidak sabar untuk menyiarkan". Kerumitan kod adalah gangguan, yang direka untuk menghilangkan mesej mudah ini. Pembolehubah yang dibuat secara dinamik "Saya" menambah lapisan tipu muslihat, tetapi ia tidak mengubah mesej utama.Atas ialah kandungan terperinci Posting pertama 4. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!