Proyek yang rapi, Steve. Itu banyak kode. Apakah Anda memiliki pertanyaan tentang bagian tertentu darinya? . Ini terkadang disebut "kode mainan"; . ) Show
Terima kasih telah meletakkan kode Anda di antara backticks. Coba tambahkan 0 ke set backticks pertama, seperti ini``` python ``` Saya pikir Anda akan menyukai hasilnya EDIT. Saya melihat bahwa pertanyaan Anda dipagari oleh backticks dan harus dibebaskan steve sullivan_ Sebuah contoh selalu SANGAT jauh untuk menunjukkan situasinya. Anda ingin kartu-kartu itu berdampingan, bukan? . Sepintas lalu, sepertinya aplikasi 2 dua dimensi. Saat ini saya tidak punya waktu untuk menyusun ide mendetail, tetapi ini terlihat seperti tantangan yang akan dinikmati Steve D'Aprano–dan mungkin akan muncul dengan sesuatu yang brilian. Mari kita lihat siapa yang mengambilnya… _IDE 1. Anda mungkin dapat menggunakan karakter escape baris sebelumnya untuk mengontrol kursor dan memindahkan "kursor" keluaran 3 mundur ke atas kartu. Posting StackEchange tentangnya ada DI SINIAnda masih harus melompat ke kanan melewati kartu yang sudah diberikan, tentu saja Contoh
Ini akan membosankan dan sama sekali tidak Pythonic. Susunan 2 jauh lebih menarikHai Steve, Terima kasih telah memposting kode Anda, tetapi Anda membuang sekitar 150 baris kode yang tidak relevan dengan pertanyaan Anda Anda mencoba mencetak sesuatu seperti ini _tetapi kedua kartu dicetak di bawah satu sama lain. Benar? Mari kita potong ini menjadi contoh dasar _Anda ingin mencetak dua kartu bersebelahan
bukannya satu di atas satu sama lain. Anda dapat menambahkan barang-barang mewah nanti Salah satu caranya adalah dengan menggunakan kode escape ANSI untuk memindahkan posisi kursor. Anda bisa melihat sebagai contoh. Bukan berarti kode pelarian ANSI mungkin tidak didukung di Windows Cara lain adalah dengan perpustakaan seperti Colorama Cara ketiga adalah menggunakan pustaka kutukan, tetapi itu hanya untuk Linux/Unix Tetapi cara paling dasar yang akan bekerja pada sistem apa pun bukanlah mencetak kartu Anda satu per satu, tetapi merakit seluruh tangan sebelum mencetaknya. Jadi, alih-alih memanggil _3 untuk setiap baris di setiap kartu secara terpisah, bangun seluruh tangan sekaligus, lalu cetak lotnya
Banyak cara berbeda untuk menangani ini. Ingatlah bahwa rahasianya adalah merakit string yang mewakili seluruh tangan terlebih dahulu, lalu mencetaknya, bukan satu kartu pada satu waktu.
Sudah beberapa dekade sejak saya mengendarai atau menerbangkan kursor konsol (lebih dari 4) tetapi ternyata lebih mudah dari yang saya kira. Urutan kode 6 memungkinkan Anda menentukan Garis dan Kolom. Berikut adalah beberapa kode kontrol kursor yang akan membantu Anda membuat hasil yang Anda cari. Sebagai perbaikan kode lebih lanjut sesudahnya, saya sangat merekomendasikan pendekatan daftar untuk membangun "tangan" dan kemudian merendernya melalui serangkaian pernyataan 3 (sebaiknya satu 3 dilingkarkan)DARI halaman ini. Gerakan Kursor
Saya hanya menguji kode ' _9' untuk posting pertama saya, tetapi itu sama dengan yang ada di daftar di atasPERINGATAN. Saya menjalankan cuplikan kode di bawah ini dalam VS Code dan tampaknya berfungsi dengan baik. NAMUN, Python 3. 8 konsol juru bahasa tidak mengenali kode kontrol kursor. Menjalankan ~. Program py di konsol CMD juga tidak berfungsi. Selama Anda hanya berencana untuk menjalankannya di lingkungan yang dapat menginterpretasikan kode, Anda akan baik-baik saja. Skenario ini jelas bukan untuk rilis umum dan tergantung pada niat penggunaan Anda. Kode kontrol akan bermasalah dalam skenario lintas platform, untuk sedikitnya, tetapi mereka baik-baik saja – dan menyenangkan – untuk dimainkan di VS Code TIP. Jika Anda mengosongkan layar sebelum merender setiap tangan, Anda selalu dapat mulai merender tangan pada [0,0] (kiri atas). Ini mungkin terlihat bersih dan profesional tetapi akan, yang lebih penting, menyelamatkan Anda dari beberapa sakit kepala besar dengan perhitungan mati dari posisi kursor sewenang-wenang (posisi kursor "saat ini" pada titik tertentu dalam program Ini cuplikan contoh
Inilah solusi yang berfungsi untuk sejumlah kartu di tangan. Saya mengubah skor maksimal ' _0' menjadi ' 1' untuk memungkinkan tangan yang lebih besar daripada yang mungkin dimiliki siapa pun dan tetap di bawah 21. Seluruh hasil edit ada dalam metode 2Alih-alih mengulangi kartu dan merendernya satu per satu, kami mengulang melalui kartu dan merender seluruh garis tangan demi baris 0 1Sekarang setelah masalah terdekat Anda teratasi, berikut adalah beberapa hal yang perlu dipikirkan untuk menyederhanakan dan meningkatkan kode Anda—masing-masing tidak hanya relevan secara langsung dengan apa yang telah Anda tulis, tetapi menggambarkan teknik bagus yang akan diterapkan ke berbagai macam pemrograman yang Anda lakukan Gunakan nama variabel yang membantuJika Anda ingin orang lain (atau Anda, dalam beberapa hari, minggu atau bulan) dapat memahami kode Anda, sangat membantu untuk memiliki nama variabel yang ringkas namun deskriptif. 3 atau 4 umumnya digunakan dalam Python dan sebagian besar bahasa pemrograman untuk indeks loop, angka yang bertambah satu kali setiap iterasi loop, jadi menggunakannya untuk mewakili kartu adalah samar dan berpotensi membingungkan. Sebagai gantinya, berikan nama yang lebih tepat, seperti, yah, 5 _2Juga, dalam Python, konvensi standar adalah menggunakan 6 untuk nama variabel (dan atribut, metode dan fungsi) daripada 7, sementara 8 dicadangkan untuk kelas (seperti yang telah Anda lakukan)Hindari banyak penyelesaian print()Meskipun Anda dapat menggunakan dengan 3 dengan 0 seperti yang Anda lakukan, ini mengarah ke kode yang lebih bertele-tele dan kurang efisien, karena Anda harus memanggil 3 banyak dan melacak jeda baris secara manual, yang mudah dikacaukan. Saya sarankan Anda membuat hidup Anda lebih mudah dengan mengutak-atik desain Anda untuk menambahkan setiap baris ke daftar baris dan kemudian menggunakan 2 dan mencetak semuanya sekaligus _3Manfaatkan pemahamanSekarang setelah kita membuat daftar sebelum mencetaknya, kita dapat menggunakan pemahaman daftar untuk membuat baris individual kita secara bergantian, yang lebih bersih, lebih pendek, dan lebih efisien daripada menggunakan 3 loop. Pemahaman daftar berfungsi seperti ini _4Jadi misalnya untuk membangun garis dengan nilai kartu, bukan _5kita bisa _6Gunakan def show_card(n): print("[ %d ]" % n) print("[ H ]") 4 dan def show_card(n): print("[ %d ]" % n) print("[ H ]") 5 dengan benarsteve sullivan_7 Anda harus menghindari pemanggilan atribut dan metode dunder (yang memiliki Double UNDERscores di sekitar namanya, seperti 6) secara langsung, dan sebagai gantinya gunakan fungsi generik yang sesuai dengannya (dalam hal ini, fungsi 5 bawaan. Jadi sebagai gantinya (dengan penamaan variabel Pythonic), lakukan saja _8Tapi tunggu, masih ada lagi. Untuk kelas khusus Anda sendiri seperti _8, Anda dapat menerapkan metode dunder yang sesuai sehingga fungsi standar berfungsi seperti yang diharapkan. Jadi, alih-alih _9Anda dapat melakukan _0Kemudian, Anda dan pengguna Anda tidak perlu mengingat metode khusus apa yang bertanggung jawab atas panjang dek dan memanggilnya, Anda cukup memanggil 5 biasa _1Salah satu bonus dari pendekatan ini adalah memeriksa apakah dek kosong lebih mudah; _2Anda hanya bisa melakukannya _3SIDENOTE. Perluas untuk melihatIni terutama bersinar ketika berhadapan dengan banyak objek dari tipe berbeda yang masing-masing memiliki panjang, jadi alih-alih melakukan (LBYL) _4atau (EAFP) _5Anda bisa melakukannya _6Kembalikan buku untuk status dan hindari angka ajaibDalam kode Anda di atas, alih-alih mengembalikan salah satu dari dua nilai bilangan bulat arbitrer yang berbeda untuk memberi sinyal apakah skornya lebih dari 21 saat menekan atau menangani dan memeriksa nilai persisnya sebagai angka ajaib, _7Cukup kembalikan dan periksa boolean secara langsung—lebih sederhana, lebih jelas, dan lebih kuat _8Hindari duplikat bust yang memeriksa setiap gerakanNamun, masih ada masalah — saat ini, setiap gerakan yang dapat mengubah skor pemain ( 0, 1, dll) memeriksa kegagalan, yang menyebabkan banyak kode duplikat dan potensi kesalahan. Bagaimana jika Anda juga ingin menambahkan lebih banyak gerakan dari Blackjack asli, seperti Double Down atau Split? . Alih-alih, pindahkan pemeriksaan itu ke metodenya sendiri, atau lakukan langsung di pemanggilGunakan properti untuk selalu memperbarui skor AndaNamun masih ada duplikasi di sini, dan potensi bug yang lebih buruk—metode ini masih harus memanggil 2 untuk memperbarui skor saat ini. Jika Anda lupa di suatu tempat, atau mencoba mengakses skor secara langsung saat sedang diperbarui, Anda memiliki bug yang senyap dan seringkali sulit dilacak. Ini juga berarti menduplikasi data dalam daftar 3 Anda, yang merupakan resep untuk masalah karena keduanya bisa tidak sinkron, yang merupakan magnet bug besar lainnyaAlih-alih, Anda ingin skor Anda diperbarui secara dinamis setiap kali diakses berdasarkan data di kartu, untuk memastikannya selalu diperbarui. Tapi bagaimana melakukannya? . Tapi sangat nyaman untuk dapat mengaksesnya dengan atribut, karena itu hanya data saja… Nah, dengan Python, Anda bisa mendapatkan yang terbaik dari kedua dunia menggunakan properti. Untuk membuatnya, Anda menggunakan dekorator 6, lalu setiap kali Anda mengakses atribut, nilainya dihitung secara dinamis. Dan yang terbaik, inti apa pun yang saat ini mengakses 5 tidak perlu diubah. Kami baru saja menghapus _4 dari mana-mana, dan mengganti atribut 5 dengan properti 5 _9Sekarang, tidak perlu memiliki atau menelepon 2 lagi;
Bagaimana Anda mencetak dua baris dengan Python?"\n" dapat digunakan untuk karakter baris baru, atau jika Anda mencetak hal yang sama berkali-kali maka perulangan for harus digunakan .
Apa itu print ('\ n ') di Python?Fungsi Python print() menerima data python seperti int dan string, dan mencetak nilai tersebut ke standar keluar . Untuk mengatakan bahwa standar keluar adalah "teks" di sini berarti serangkaian baris, di mana setiap baris adalah serangkaian karakter dengan karakter baris baru '\n' yang menandai akhir setiap baris.
Bagaimana Anda mencetak banyak baris dengan satu cetakan dengan Python?Anda tidak dapat membagi pernyataan menjadi beberapa baris dengan Python dengan menekan Enter. Alih-alih, gunakan garis miring terbalik ( \ ) untuk menunjukkan bahwa pernyataan dilanjutkan ke baris berikutnya . Dalam skrip versi revisi, spasi kosong dan garis bawah menunjukkan bahwa pernyataan yang dimulai pada baris 1 dilanjutkan pada baris 2. |