9 Keterampilan pemrograman Python yang membedakan pemula dari yang berpengalaman

Terjemahan artikel disiapkan sebelum dimulainya kursus Pengembang Python .




Python adalah bahasa yang fantastis. Sintaksnya sangat sederhana sehingga Anda bahkan tidak perlu mencari titik koma tambahan dalam kode Anda. Saya bahkan akan mengatakan bahwa Python adalah salah satu bahasa terbaik untuk pemula.

Anda mulai dengan satu set perpustakaan yang luas dan menambahkan lebih banyak dan lebih banyak lagi ketika Anda mendapatkan pengalaman dalam pemrograman.

Setelah beberapa saat, Anda mungkin merasa terjebak ketika ternyata Anda menulis terlalu banyak kode untuk satu operasi sederhana. Sebenarnya, ini tidak seburuk yang Anda kira. Memahami logika dari apa yang Anda kerjakan jauh lebih penting daripada jumlah garis. Kode pendek lebih baik, tetapi jika logikanya rusak, kode Anda tidak akan berfungsi sebagaimana dimaksud. Tetapi dengan pengalaman dan pendekatan kreatif untuk bekerja, kode Anda akan menjadi lebih pendek dan lebih baik.

Pemula atau berpengalaman?


Jadi, apa yang membedakan seorang pemula dari seorang programmer berpengalaman ketika datang ke pemrograman dengan Python?

Dalam artikel ini, saya ingin fokus pada masalah-masalah berikut:

  • Pemecahan masalah dan seni mengajukan pertanyaan
  • Memahami mengapa kode berfungsi (atau tidak)
  • Bekerja dengan string
  • Bekerja dengan daftar
  • Menggunakan loop
  • Menggunakan fungsi (dan terminologi yang tepat)
  • Pemrograman berorientasi objek
  • Menghormati PEP

Pemecahan masalah dan seni mengajukan pertanyaan


Sebagai seorang programmer, saya akan mengatakan bahwa jika Anda tidak memiliki cukup pengalaman dalam memecahkan masalah, akan sulit bagi Anda untuk mulai menulis kode yang sangat baik. Jika Anda memiliki masalah dengan pemecahan masalah, mungkin tidak mudah bagi Anda untuk menemukan solusi terbaik untuk masalah Anda. Pemrograman tidak hanya menulis kode. Keterampilan pemecahan masalah adalah keterampilan yang Anda butuhkan untuk merangkak keluar dari kategori pemula.

Mengajukan pertanyaan tentang pemrograman juga sangat penting. Jika Anda hanya meminta seseorang untuk menyelesaikan masalah untuk Anda, tanpa mencoba apa pun, Anda melakukan hal yang salah. Ini tidak mudah, tetapi jika Anda tidak mencoba memecahkan masalah sendiri, Anda tidak akan mendapat manfaat dari solusi orang lain untuk masalah Anda.

Jika Anda ingin tahu bagaimana saya merumuskan pertanyaan pemrograman, berikut adalah artikel terpisah tentangnya.

Masalah xy


"Aku harus mendapatkan tiga karakter terakhir dalam sebuah string."
"Tidak, itu tidak perlu! Anda perlu mendapatkan ekstensi file. "

Masalah XY adalah hal yang sangat lucu. Anda memiliki masalah X, dan ketika Anda menghubungi dukungan, Anda bertanya tentang masalah Y, solusinya, seperti yang Anda pikirkan, akan menyelesaikan masalah X. [1]

Kasus yang dijelaskan di atas menggambarkan situasi ini dengan baik. Jika Anda ingin mendapatkan ekstensi file, maka Anda dapat mengasumsikan bahwa Anda memerlukan 3 karakter terakhir dari baris tersebut.

Seperti apa bentuknya:

def extract_ext(filename):
    return filename[-3:]
print (extract_ext('photo_of_sasquatch.png'))
>>> png

Sempurna! Nah, sekarang coba dengan. Seorang photo_of_lochness.jpeg
pengguna bisa bertanya tentang ekstensi dari awal. Masalah Y adalah tiga karakter terakhir. Masalah X adalah ekstensi.

def extract_ext(filename):
    return filename.split('.')[-1]
print (extract_ext('photo_of_sasquatch.png'))
print (extract_ext('photo_of_lochness.jpeg'))
>>> png
>>> jpeg

Itu saja!

Anda juga dapat menggunakan perpustakaan standar os.path.splitext().
Anda dapat membiasakan diri dengan itu di sini .

Memahami mengapa kode berfungsi (atau tidak)


Ketika Anda baru, Anda dapat menggiling sepotong kode kecil selama beberapa hari. Dan ketika kode ini tiba-tiba mulai bekerja, Anda akan merasa lega dan beralih ke bagian selanjutnya. Dan ini adalah hal terburuk yang dapat Anda lakukan. Diam-diam menerima bahwa kode itu hanya berfungsi dan tidak memahami mengapa itu bekerja mungkin bahkan lebih berbahaya daripada tidak memahami mengapa kode itu tidak berfungsi pada prinsipnya.

Tidak memahami mengapa kode Anda tidak berfungsi terjadi setiap saat. Ketika Anda menghilangkan semua kesalahan dan akhirnya mencari tahu mengapa solusinya tidak bekerja, sangat penting untuk memikirkan mengapa itu tidak berhasil dan apa yang akhirnya membuat kode bekerja dengan benar. Anda akan membawa pengetahuan ini melalui semua program Anda.

Misalnya, jika Anda memiliki kesalahan indentasi dari awal baris dalam kode dengan beberapa blok, Anda bisa mulai memindahkan blok secara acak, dan kemudian terbentuk ketika program akhirnya dimulai.
Ingatlah bahwa di sebagian besar IDE, Anda dapat menutup loop dan jika ada . Sehingga Anda dapat dengan mudah melihat unit mana yang cocok untuk Anda dan mana yang tidak.


ATOM dengan lipatan if-else dibangun di sebelah kanan.

Cara keren lain untuk melihat secara visual bagaimana kode Anda bekerja adalah www.pythontutor.com , di mana Anda dapat melihat apa yang terjadi dalam program Anda baris demi baris.


Eksekusi kode dalam pythontutors

Bekerja dengan string


Bagian saat ini tidak sepenuhnya tentang garis. Ini lebih lanjut tentang menggali ke dalam perpustakaan Python yang hebat. Dalam Python, kita belajar sejak awal bahwa string dapat dianggap sebagai daftar karakter. Anda dapat mengakses karakter dalam string dengan indeks.

word = 'supergreat'
print (f'{word[0]}') 
>>> s
print (f'{word[0:5]}')
>>> super

Pikiran yang ingin tahu belajar tentang apa yang ditawarkannya str(), tetapi Anda dapat terus menulis tanpa melihat dokumentasi str(). Untuk memanggil dokumentasi fungsi, Anda dapat menulis help(str)atau dir(str). Ketika Anda melakukan ini, Anda dapat menemukan metode yang keberadaannya bahkan tidak dicurigai. Anda mungkin telah melihat dokumentasi dan Anda tahu bahwa string memiliki metode endswith(), misalnya, dan Anda dapat menerapkannya di suatu tempat.



Berikut adalah contoh kode yang melakukan hal yang sama dalam dua cara berbeda. Opsi pertama digunakan split, yang baru-baru ini kita bicarakan. Dan yang kedua - endswith()yang dapat Anda temukan di dokumentasi.

Kebanyakan programmer tidak akan pernah membaca semua dokumentasi dan mempelajari semuanya. Bagian penting dari pekerjaan seorang programmer adalah mengetahui di mana mencari informasi tentang bagaimana menyelesaikan suatu masalah.

Bekerja dengan daftar


Daftar adalah hal yang hebat dan serbaguna.
Sebagai contoh, di sini kita mencampur nilai integer dan string:

my_list = ['a' , 'b' , 'n' , 'x' , 1 , 2 , 3, 'a' , 'n' , 'b']
for item in my_list:
    print (f'current item: {item}, Type: {type(item)}')



Lihat bagaimana kami mencampurnya. Jika kami mencoba mengurutkan daftar, kami mendapatkan kesalahan.

print (my_list.sort())



Bagaimana jika kita perlu memisahkan huruf dari angka? Cara pertama adalah menyelesaikan masalah menggunakan loop di mana kami akan memeriksa setiap elemen dari daftar. Seorang pemula mengenal siklus awal, karena loop adalah bagian penting dalam pemrograman.

Kode mungkin terlihat seperti ini:

my_list = ['a' , 'b' , 'n' , 'x' , 1 , 2 , 3 , 'a' , 33.3 , 'n' , 'b']
number_list = []
string_list = []
for item in my_list:
    print (f'current item: {item}, Type: {type(item)}')
    if not isinstance(item,str):
        number_list.append(item)
    else:
        string_list.append(item)
my_list = string_list

Ini adalah pendekatan yang tepat, tetapi sedikit rumit. Kode berfungsi, tetapi Anda dapat membuatnya sehingga masalah diselesaikan dengan metode yang sama, tetapi dalam satu baris!

Jika Anda ingin lebih bahagia, pelajari cara kerja ekspresi daftar dengan Python. Berikut adalah masalah yang sama, tetapi diselesaikan dengan pemahaman tentang cara kerja daftar:

my_list = [letter for letter in my_list if isinstance(letter,str)]


Itu saja!

Dan ini bukan akhirnya. Anda bisa menggunakan filteruntuk mendapatkan hasil yang sama.

def get_numbers(input_char):
    if not isinstance(input_char,str):
        return True
    return False

my_list = [1,2,3,'a','b','c']
check_list = filter(get_numbers, my_list)
for items in check_list:
    print(items)




Seperti yang mungkin sudah Anda pahami, ada banyak cara untuk memecahkan masalah yang sama. Anda harus menyadari bahwa itu akan bekerja paling baik untuk Anda dan tim Anda.

Bonus

  • Balik daftar (atau baris):

names = ['First' , 'Middle' , 'Last']
print(names[::-1])
>>> ['Last', 'Middle', 'First']

  • Menggabungkan item daftar:

names = ['First' , 'Middle' , 'Last']
full_name = ' '.join(names)
print(f'Full Name:\n{full_name}')
>>> First Middle Last

Menggunakan loop


Pernahkah Anda bertemu dengan kode yang sama?

greek_gods = ['Zeus' , 'Hera' , 'Poseidon' , 'Apollo' , 'Bob']
for index in range(0,len(greek_gods)):
    print (f'at index {index} , we have : {greek_gods[index]}')

Anda mungkin akan mempelajari konstruksi ini dari bahasa lain, tetapi ini jauh dari pendekatan Python. Dengan Python Anda akan menggunakan:

for name in greek_gods:
    print (f'Greek God: {name}')

Anda akan segera menyadari bahwa tidak ada indeks. Bagaimana jika Anda ingin beroperasi pada indeks? Dengan Python Anda bisa memanfaatkannya enumerate. Ini adalah cara terbaik untuk mengakses semua yang Anda butuhkan!

for index, name in enumerate(greek_gods):
    print (f'at index {index} , we have : {name}')



Menggunakan fungsi (dan terminologi yang tepat)


Ketika saya mengerjakan animasi, saya selalu mengatakan bahwa jika Anda melakukan hal yang sama 5 kali, maka Anda perlu memikirkan apakah Anda memerlukan program? Terkadang, setelah menghabiskan dua minggu mengembangkan alat, Anda bisa menghemat enam minggu kerja. Saat Anda menulis kode dan memahami bahwa Anda melakukan tindakan yang sama beberapa kali, Anda perlu memikirkan apakah akan mengode kode ini ke dalam prosedur atau fungsi. Fungsi akan mengembalikan beberapa nilai, dan prosedur hanya akan menjalankan kode. Dalam contoh pertama, Anda melihat prosedur, dan yang kedua, fungsinya.

Kedengarannya membingungkan. Berikut ini adalah ilustrasi yang mencerminkan prinsip operasi:



Perhatikan perbedaan antara printdan return. Tampaknya mereka bekerja dengan cara yang sama, tetapi jika Anda melihat outputnya, Anda akan melihat bahwa fungsinya hanya akan mengembalikan nama yang diteruskan.

Istilah berikut yang harus dipisahkan dengan jelas adalah argumen dan parameter. Parameter adalah apa yang didefinisikan dalam prosedur atau fungsi (disorot dengan warna merah pada gambar), dan apa yang Anda berikan pada prosedur atau fungsi adalah argumen (disorot dengan warna hijau).

Berikut ini beberapa contohnya.

Contoh 1

def print_list(input_list):
    for each in input_list:
        print(f'{each}')
    print() #just to separate output
greek_gods = ['Zeus' , 'Hera' , 'Poseidon' , 'Apollo' , 'Bob']
grocery_list = ['Apples' , 'Milk' , 'Bread']
print_list(greek_gods)
print_list(grocery_list)
print_list(['a' , 'b' , 'c'])



Alih-alih menulis siklus tiga kali, saya akan menulisnya sekali dalam prosedur dan menyebutnya ketika saya membutuhkannya. Dan dalam contoh kedua, Anda dapat melihat bagaimana fungsi mengembalikan daftar terbalik.

Contoh 2

def reverse_list(list_input):
    return list_input[::-1]
my_list = ['a', 'b' , 'c']
print (reverse_list(my_list))
>>> ['c', 'b', 'a']

Pemrograman berorientasi objek


Python adalah bahasa berorientasi objek, dan ada banyak kekuatan dalam objek. Pikirkan objek sebagai gambar - jika Anda menggunakan gambar, Anda membuat instance dari itu. Jadi, Anda dapat membuat instance sebanyak yang Anda inginkan dan tidak merusak apa pun pada gambar asli saat Anda menggunakannya.

Pemrograman berorientasi objek (OOP) adalah topik yang sangat besar, jadi bagian ini tidak berisi semua yang perlu Anda ketahui tentang hal itu, tetapi kami akan berbicara tentang beberapa contoh sederhana yang akan membantu Anda dalam pekerjaan Anda.

Jika Anda pernah membaca tentang OOP sebelumnya, Anda mungkin bosan belajar, tetapi ini dia lagi. Mari kita mulai dengan mendefinisikan sebuah kelas Student. Itu akan memiliki nama ( name) dan daftar disiplin ilmu ( subject_list):

class Student():
    def __init__(self,name):
        self._name = name
        self._subject_list = []

Inilah __init__konstruktor dari kelas. Ini mendefinisikan inti dari kelas. Nanti Anda akan melihat bagaimana metode ditambahkan. Metode adalah prosedur atau fungsi yang dimiliki kelas yang dapat dipanggil saat menggunakan kelas di dalam program.
Jika Anda ingin membuat siswa, Anda akan membuat variabel berikut:

student1 = Student('Martin Aaberge')

Jika Anda membutuhkan lebih banyak siswa, Anda akan menggunakan kelas yang sama dan membuat objek baru.

student2 = Student('Ninja Henderson')

Dan student1, dan student2akan menjadi contoh kelas Student. Mereka memiliki skema yang sama, tetapi mereka tidak memiliki kesamaan. Saat ini, kami dapat melakukan sedikit hal dengan siswa, tetapi kami telah menambahkan daftar disiplin ilmu. Untuk mengisi daftar ini, kami akan membuat metode terpisah. Anda dapat memanggil metode untuk berinteraksi dengan instance kelas.

Mari perbarui kelas:

class Student():
    def __init__(self,name):
        self._name = name
        self._subject_list = []
    def add_subject(self, subject_name):
        self._subject_list.append(subject_name)
    def get_student_data(self):
        print (f'Student: {self._name} is assigned to:')
        for subject in self._subject_list:
            print (f'{subject}')
        print()

Sekarang kelas ini dapat digunakan untuk membuat siswa, mengedit, dan mendapatkan informasi tentang mereka.

#create students:
student1 = Student('Martin Aaberge')
student2 = Student('Heidi Hummelvold')
#add subjects to student1
student1.add_subject('psychology_101')
student1.add_subject('it_security_101')
#add subject to student2
student2.add_subject('leadership_101')
#print current data on students
student1.get_student_data()
student2.get_student_data()

Biasanya, kelas disimpan dalam file terpisah dan diimpor ke dalam kode. Dalam contoh kami, kami membuat kelas Studentdalam file student.pydan mengimpornya ke file kami main.py. (Dalam hal ini, kedua file berada di folder yang sama).

from student import Student
student1 = Student('Martin')
student1.add_subject('biomechanics_2020')
student1.get_student_data()



Hormat


Anda mungkin sering melihat orang menulis kode Python dan sama sekali tidak memikirkan PEP. Mungkin saya sendiri kadang-kadang melakukan ini. Ketika Anda bekerja di lingkungan pengembangan, sangat penting untuk mengikuti standar, jika tidak standar PEP, maka setidaknya standar perusahaan Anda.

PEP adalah rekomendasi yang ditetapkan untuk kode Anda. Berikut ini tautan ke PEP-8 . Bacaan yang bagus. Baca setidaknya satu kali untuk memahami tentang apa itu. Contoh klasik adalah ini snake_case. Variabel dalam Python ditulis dalam snake_case, yaitu kata-kata dalam nama variabel dipisahkan menggunakan garis bawah. Bahkan di universitas, kadang-kadang mereka belajar secara salah, jadi jangan berkecil hati, dan mulailah menulis sesuai aturan.

Betul:

chocolate_cake = 'yummy'

Dan ini dia - tidak:

chocolateCake = 'Yummy'

Kesimpulan


Menjadi seorang pemula sungguh menakjubkan. Jalan Anda tidak akan mudah, tetapi kurva belajar Anda akan curam dan memberi Anda pengalaman baru! Berhenti menjadi pemula mungkin sulit. Terkadang sulit untuk memahami apa yang perlu Anda fokuskan. Apa yang akan menjadi langkah selanjutnya?

Mungkin artikel ini akan mendorong Anda ke arah yang benar, atau mungkin bagi Anda itu hanya obrolan acak yang sudah Anda ketahui. Jika Anda tidak yakin ke mana harus pergi berikutnya, jangan takut untuk bertanya. Pastikan Anda mengikuti saran dari mereka yang lebih berpengalaman daripada Anda. Bersikap terbuka terhadap pendapat yang berbeda dan mencari tahu apa yang tepat untuk Anda. Jika Anda tidak siap untuk menggunakan cara penulisan kode tertentu, tulis dengan cara yang nyaman bagi Anda sampai Anda mempelajari yang baru dan lebih baik.

Sumber:

[1] Edisi XY, en.wikipedia.org/wiki/XY_problem



Pelajaran gratis: Pengantar AutoTests



All Articles