4.1.1.2 Fungsi
Mengapa kita membutuhkan fungsi?
Anda telah menemukan fungsi berkali-kali sejauh ini, tetapi pandangan tentang manfaatnya
yang kami berikan kepada Anda agak sepihak. Anda hanya memanggil fungsi dengan
menggunakannya sebagai alat untuk membuat hidup lebih mudah, dan untuk
menyederhanakan tugas yang memakan waktu dan membosankan.
Ketika Anda ingin beberapa data dicetak pada konsol, Anda gunakan print(). Saat Anda ingin
membaca nilai suatu variabel, Anda menggunakan input(), ditambah dengan salah
satu int()atau float().
Anda juga memanfaatkan beberapa metode , yang sebenarnya berfungsi, tetapi
dideklarasikan dengan cara yang sangat spesifik.
Sekarang Anda akan belajar cara menulis fungsi Anda sendiri, dan cara
menggunakannya. Kami akan menulis beberapa fungsi secara bersamaan, dari yang sangat
sederhana hingga yang agak rumit, yang akan membutuhkan fokus dan perhatian Anda.
Sering terjadi potongan kode tertentu diulang berkali-kali dalam program Anda . Itu diulangi
baik secara harfiah, atau dengan hanya beberapa modifikasi kecil, yang terdiri dari
penggunaan variabel lain dalam algoritma yang sama. Itu juga terjadi bahwa seorang
programmer tidak bisa menahan penyederhanaan pekerjaan, dan mulai mengkloning
potongan-potongan kode seperti menggunakan clipboard dan operasi copy-paste.
Itu bisa menjadi sangat frustasi ketika tiba-tiba ternyata ada kesalahan dalam kode
kloning. Programmer akan memiliki banyak pekerjaan yang membosankan untuk menemukan
semua tempat yang perlu diperbaiki. Ada juga risiko tinggi dari koreksi yang menyebabkan
kesalahan.
Kami sekarang dapat menentukan kondisi pertama yang dapat membantu Anda memutuskan
kapan harus mulai menulis fungsi Anda sendiri: jika suatu fragmen kode tertentu mulai muncul di
lebih dari satu tempat, pertimbangkan kemungkinan mengisolasinya dalam bentuk fungsi
yang dipanggil dari titik di mana kode asli ditempatkan sebelumnya.
Mungkin saja algoritme yang akan Anda implementasikan begitu rumit sehingga kode Anda
mulai tumbuh dengan cara yang tidak terkontrol, dan tiba-tiba Anda melihat bahwa Anda
tidak dapat menavigasi dengan begitu mudah lagi.
Anda dapat mencoba untuk mengatasi masalah ini dengan mengomentari kode secara luas,
tetapi segera Anda menemukan bahwa ini secara dramatis memperburuk situasi Anda - terlalu
banyak komentar membuat kode lebih besar dan lebih sulit dibaca . Beberapa mengatakan
bahwa fungsi yang ditulis dengan baik harus dilihat seluruhnya dalam satu pandangan .
Pengembang yang baik dan penuh perhatian membagi kode (atau lebih tepatnya: masalah)
menjadi potongan-potongan yang terisolasi, dan mengkodekan masing-masing dalam bentuk
fungsi .
Ini sangat menyederhanakan pekerjaan program, karena masing-masing bagian kode dapat
dikodekan secara terpisah, dan diuji secara terpisah. Proses yang dijelaskan di sini sering
disebut dekomposisi .
1
Kita sekarang dapat menyatakan kondisi kedua: jika sepotong kode menjadi begitu besar
sehingga membaca dan mengecilkannya dapat menyebabkan masalah, pertimbangkan
untuk membaginya menjadi masalah yang terpisah, lebih kecil, dan terapkan masing-masing
dalam bentuk fungsi yang terpisah .
Dekomposisi ini berlanjut sampai Anda mendapatkan satu set fungsi pendek, mudah
dimengerti dan diuji.
4.1.1.3 Fungsi
Penguraian
Sering terjadi bahwa masalahnya sangat besar dan kompleks sehingga tidak dapat ditugaskan
ke pengembang tunggal, dan tim pengembang harus mengerjakannya. Masalahnya harus
dipisah antara beberapa pengembang dengan cara yang memastikan kerja sama yang
efisien dan mulus.
Tampaknya tidak dapat dibayangkan bahwa lebih dari satu programmer harus menulis kode
yang sama pada saat yang sama, sehingga pekerjaan itu harus tersebar di antara semua
anggota tim.
Dekomposisi semacam ini memiliki tujuan yang berbeda dengan yang dijelaskan sebelumnya -
ini bukan hanya tentang berbagi pekerjaan , tetapi juga tentang berbagi tanggung jawab
di antara banyak pengembang.
Masing-masing dari mereka menulis seperangkat fungsi yang didefinisikan dengan jelas dan
dijelaskan, yang bila digabungkan ke dalam modul (kami akan memberi tahu Anda sedikit
tentang ini nanti) akan memberikan produk akhir.
Ini membawa kita langsung ke kondisi ketiga: jika Anda akan membagi pekerjaan di antara
beberapa programmer, uraikan masalah untuk memungkinkan produk diimplementasikan
sebagai satu set fungsi yang ditulis secara terpisah yang dikemas bersama dalam modul yang
berbeda .
Dari mana fungsi itu berasal?
Secara umum, fungsi datang dari setidaknya tiga tempat:
dari Python sendiri - banyak fungsi (seperti print()) merupakan bagian integral dari
Python , dan selalu tersedia tanpa upaya tambahan atas nama programmer; kami
menyebut fungsi ini fungsi bawaan ;
dari modul pra - instal Python - banyak fungsi, yang sangat berguna, tetapi digunakan
secara signifikan lebih jarang daripada yang built-in, tersedia dalam sejumlah modul
yang dipasang bersama dengan Python; penggunaan fungsi-fungsi ini memerlukan
beberapa langkah tambahan dari programmer untuk membuatnya sepenuhnya dapat
diakses (kami akan memberi tahu Anda tentang ini sebentar lagi);
langsung dari kode Anda - Anda dapat menulis fungsi Anda sendiri, menempatkannya
di dalam kode Anda, dan menggunakannya secara bebas;
ada satu kemungkinan lain, tetapi terhubung dengan kelas, jadi kami akan
menghilangkannya untuk saat ini.
2
4.1.1.4 Fungsi penulisan
Ini berarti bahwa Python membaca definisi fungsi dan mengingatnya, tetapi tidak akan
meluncurkannya tanpa izin Anda.
Kami telah memodifikasi kodenya sekarang - kami telah memasukkan permohonan
fungsi antara pesan mulai dan akhir:
def message(): print("Enter a value: ") print("We start here.") message() print("We end here.")
3
We start here. Enter a value: We end here.
4.1.1.6 Fungsi
Bagaimana fungsi bekerja
Lihatlah gambar di bawah ini:
Kami telah memindahkan fungsi ke akhir kode. Apakah Python dapat menemukannya ketika
eksekusi mencapai doa?
Tidak. Pesan kesalahan akan membaca:
NameError: name 'message' is not defined
Jangan mencoba memaksa Python untuk mencari fungsi yang tidak Anda berikan pada waktu
yang tepat.
Tangkapan kedua terdengar sedikit lebih sederhana:
Anda tidak boleh memiliki fungsi dan variabel dengan nama yang sama .
Cuplikan berikut ini salah:
def message(): print("Enter a value: ") message = 1
Ini mungkin terlihat aneh, tetapi sepenuhnya benar, dan berfungsi sebagaimana mestinya.
Mari kembali ke contoh utama kami, dan gunakan fungsi untuk pekerjaan yang tepat, seperti
di sini:
def message(): print("Enter a value: ") message() a = int(input()) message() b = int(input())
message() c = int(input())
4
Mengubah pesan yang diminta sekarang mudah dan jelas - Anda dapat melakukannya
dengan mengubah kode hanya di satu tempat - di dalam tubuh fungsi.
Buka kotak pasir, dan coba lakukan sendiri.
Takeaways kunci
1. Fungsi adalah blok kode yang melakukan tugas tertentu ketika fungsi dipanggil
(dipanggil). Anda dapat menggunakan fungsi untuk membuat kode Anda dapat digunakan
kembali, lebih terorganisir, dan lebih mudah dibaca. Fungsi dapat memiliki parameter dan
mengembalikan nilai.
2. Setidaknya ada empat jenis fungsi dasar di Python:
fungsi bawaan yang merupakan bagian integral dari Python
(seperti print()fungsi). Anda dapat melihat daftar lengkap fungsi bawaan Python
di https://docs.python.org/3/library/functions.html .
yang berasal dari modul pra-instal (Anda akan mempelajarinya dalam Modul 5 kursus
ini)
fungsi yang ditentukan pengguna yang ditulis oleh pengguna untuk pengguna - Anda
dapat menulis fungsi Anda sendiri dan menggunakannya secara bebas dalam kode
Anda,
yang lambdafungsi (Anda akan belajar tentang mereka di Modul 6 dari kursus ini.)
3. Anda dapat menentukan fungsi Anda sendiri menggunakan defkata kunci dan sintaks
berikut:
def yourFunction(optional parameters): # the body of the function
Anda dapat mendefinisikan fungsi yang tidak mengambil argumen apa pun, misalnya:
def message(): # defining a function print("Hello") # body of the function message() # calling
the function
Anda dapat mendefinisikan fungsi yang mengambil argumen juga, seperti fungsi satu-
parameter di bawah ini:
def hello(name): # defining a function print("Hello,", name) # body of the function name =
input("Enter your name: ") hello(name) # calling the function
Kami akan memberi tahu Anda lebih banyak tentang fungsi parametrized di bagian
selanjutnya. Jangan khawatir.
Latihan 1
The input()Fungsi adalah contoh dari:
Latihan 2
Apa yang terjadi ketika Anda mencoba menjalankan fungsi sebelum Anda
mendefinisikannya? Contoh:
hi() def hi(): print("hi!")
Memeriksa
Sebuah pengecualian dilemparkan ( NameErrorpengecualian lebih tepatnya)
Latihan 3
Apa yang akan terjadi ketika Anda menjalankan kode di bawah ini?
def hi(): print("hi") hi(5)
Memeriksa
5
Pengecualian akan dilempar ( TypeErrorpengecualian lebih tepatnya) - hi()fungsi tidak
mengambil argumen apa pun
Parametrized functions
The function's full power reveals itself when it can be equipped with an interface that is able to
accept data provided by the invoker. Such data can modify the function's behavior, making it
more flexible and adaptable to changing conditions.
A parameter is actually a variable, but there are two important factors that make parameters
different and special:
parameters exist only inside functions in which they have been defined, and the only
place where the parameter can be defined is a space between a pair of parentheses in
the def statement;
assigning a value to the parameter is done at the time of the function's invocation, by
specifying the corresponding argument.
def function(parameter): ###
Don't forget:
parameters live inside functions (this is their natural environment)
arguments exist outside functions, and are carriers of values passed to corresponding
parameters.
There is a clear and unambiguous frontier between these two worlds.
Let's enrich the function above with just one parameter - we're going to use it to show the user
the number of a value the function asks for.
The definition specifies that our function operates on just one parameter named number. You
can use it as an ordinary variable, but only inside the function - it isn't visible anywhere else.
Let's now improve the function's body:
def message(number): print("Enter a number:", number)
We've made use of the parameter. Note: we haven't assigned the parameter with any value. Is
it correct?
Yes, it is.
A value for the parameter will arrive from the function's environment.
Remember: specifying one or more parameters in a function's definition is also a requirement,
and you have to fulfil it during invocation. You must provide as many arguments as there are
defined parameters.
Failure to do so will cause an error.
Moreover, it behaves better. The code will produce the following output:
6
Enter a number: 1
Can you see how it works? The value of the argument used during invocation (1) has been
passed into the function, setting the initial value of the parameter named number.
This also means that invoking the function will require two arguments.
The first new parameter is intended to carry the name of the desired value.
Here it is:
def message(what, number): print("Enter", what, "number", number) message("telephone", 11)
message("price", 5) message("number", "number")
Run the code, modify it, add more parameters, and see how this affects the output.
7
Note: positional parameter passing is intuitively used by people in many social occasions. For
example, it may be generally accepted that when we introduce ourselves we mention our first
name(s) before our last name, e.g., "My name's John Doe."
Incidentally, Hungarians do it in reverse order.
Let's implement that social custom in Python. The following function will be responsible for
introducing somebody:
def introduction(firstName, lastName): print("Hello, my name is", firstName, lastName)
introduction("Luke", "Skywalker") introduction("Jesse", "Quick") introduction("Clark", "Kent")
Can you guess the output? Run the code and find out if you were right.
Now imagine that the same function is being used in Hungary. In this case, the code would look
like this:
def introduction(firstName, lastName): print("Hello, my name is", firstName, lastName)
introduction("Skywalker", "Luke") introduction("Quick", "Jesse") introduction("Kent", "Clark")
The concept is clear - the values passed to the parameters are preceded by the target
parameters' names, followed by the = sign.
The position doesn't matter here - each argument's value knows its destination on the basis of
the name used.
You should be able to predict the output. Run the code to check if you were right.
8
4.1.2.6 How functions communicate with their environment
Its purpose is to evaluate and present the sum of all its arguments.
The function, when invoked in the following way:
sum(1, 2, 3)
will output:
1+2+3=6
Of course, you can replace such an invocation with a purely keyword variant, like this:
sum(c = 1, a = 2, b = 3)
Be careful, and beware of mistakes. If you try to pass more than one value to one argument, all
you'll get is a runtime error.
Look at the invocation below - it seems that we've tried to set atwice:
sum(3, a = 1, b = 2)
Python's response:
9
TypeError: sum() got multiple values for argument 'a'
Look at the snipet below. A code like this is fully correct, but it doesn't make much sense:
sum(4, 3, c = 2)
Everything is right, but leaving in just one keyword argument looks a bit weird - what do you
think?
You only have to extend the parameter's name with the = sign, followed by the default
value./p>
Let's invoke the function as usual:
introduction("James", "Doe")
Can you guess the output of the program? Run it and check if you were right.
And? Everything looks the same, but when you invoke the function in a way that looks a bit
suspicious at first sight, like this:
introduction("Henry")
or this:
introduction(firstName="William")
there will be no error, and both invocations will succeed, while the console will show the
following output:
Hello, my name is Henry Smith Hello, my name is William Smith
Test it.
You can go further if it's useful. Both parameters have their default values now, look at the code
below:
def introduction(firstName="John", lastName="Smith"): print("Hello, my name is", firstName,
lastName)
If you use one keyword argument, the remaining one will take the default value:
introduction(lastName="Hopkins")
Test it.
10
Congratulations - you have just learned the basic ways of communicating with functions.
Takeaways kunci
1. Anda dapat meneruskan informasi ke fungsi dengan menggunakan parameter. Fungsi Anda
dapat memiliki parameter sebanyak yang Anda butuhkan.
Contoh fungsi satu-parameter:
def hi(name): print("Hi,", name) hi("Greg")
Penting untuk diingat bahwa argumen posisi tidak boleh mengikuti argumen kata kunci . Itu
sebabnya jika Anda mencoba menjalankan cuplikan berikut:
def subtra(a, b): print(a - b) subtra(5, b=2) # outputs: 3 subtra(a=5, 2) # Syntax Error
Python tidak akan membiarkan Anda melakukannya dengan memberi tanda a SyntaxError.
3. Anda dapat menggunakan teknik melewati argumen kata kunci untuk menentukan
sebelumnya nilai untuk argumen yang diberikan:
def name(firstN, lastN="Smith"): print(firstN, lastN) name("Andy") # outputs: Andy Smith
name("Betty", "Johnson") # outputs: Betty Johnson (the keyword argument replaced by
"Johnson")
Latihan 1
Apa output dari cuplikan berikut?
def intro(a="James Bond", b="Bond"): print("My name is", b + ".", a + ".") intro()
Memeriksa
My name is Bond. James Bond.
Latihan 2
Apa output dari cuplikan berikut?
def intro(a="James Bond", b="Bond"): print("My name is", b + ".", a + ".") intro(b="Sean Connery")
Memeriksa
My name is Sean Connery. James Bond.
Latihan 3
Apa output dari cuplikan berikut?
11
def intro(a, b="Bond"): print("My name is", b + ".", a + ".") intro("Susan")
Memeriksa
My name is Bond. Susan.
Latihan 4
Apa output dari cuplikan berikut?
def sum(a, b=2, c): print(a + b + c) sum(a=1, c=3)
Memeriksa
SyntaxError- argumen non-default ( c) mengikuti argumen default ( b=2)
The returninstruksi memiliki dua varian yang berbeda - mari kita mempertimbangkan secara
terpisah.
kembali tanpa ekspresi
Yang pertama terdiri dari kata kunci itu sendiri, tanpa mengikutinya.
Ketika digunakan di dalam suatu fungsi, itu menyebabkan penghentian segera dari eksekusi
fungsi, dan pengembalian instan (karenanya namanya) ke titik doa .
Catatan: jika suatu fungsi tidak dimaksudkan untuk menghasilkan suatu
hasil, menggunakan returninstruksi tidak wajib - itu akan dieksekusi secara implisit di akhir fungsi.
Bagaimanapun, Anda dapat menggunakannya untuk menghentikan aktivitas fungsi sesuai
permintaan , sebelum kontrol mencapai baris terakhir fungsi.
12
itu menyebabkan penghentian segera eksekusi fungsi (tidak ada yang baru
dibandingkan dengan varian pertama)
selain itu, fungsi akan mengevaluasi nilai ekspresi dan akan mengembalikan
(karenanya namanya sekali lagi) sebagai hasil fungsi .
Ya, kami sudah tahu - contoh ini tidak terlalu canggih:
def boringFuncton(): return 123 x = boringFunction() print("The boringFunction has returned its
result. It's:", x)
The returninstruksi, diperkaya dengan ekspresi (ekspresi sangat sederhana di sini), "mengangkut"
nilai ekspresi untuk tempat fungsi telah dipanggil.
Hasilnya dapat digunakan secara bebas di sini, misalnya, untuk ditugaskan ke variabel.
Itu mungkin juga sepenuhnya diabaikan dan hilang tanpa jejak.
Catatan, kami tidak terlalu sopan di sini - fungsi mengembalikan nilai, dan kami
mengabaikannya (kami tidak menggunakannya dengan cara apa pun):
def boringFunction(): print("'Boredom Mode' ON.") return 123 print("This lesson is interesting!)
boringFunction() print("This lesson is boring...")
13
akan menyebabkan kesalahan runtime, dijelaskan oleh pesan diagnostik berikut:
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
Jangan lupa ini: jika suatu fungsi tidak mengembalikan nilai tertentu menggunakan klausa
ekspresi kembali, diasumsikan bahwa itu mengembalikan secara implisitNone .
Ayo kita coba.
Jangan kaget lain kali Anda melihat Nonesebagai hasil fungsi - itu mungkin merupakan gejala
kesalahan halus di dalam fungsi.
14
.def sumOfList(lst): sum = 0 for elem in lst: sum += elem return sum
akan kembali 12sebagai hasilnya, tetapi Anda harus mengharapkan masalah jika Anda
memohonnya dengan cara yang berisiko ini:
print(sumOfList(5))
Ini disebabkan oleh fakta bahwa nilai integer tunggal tidak boleh diulangi oleh forloop.
LABORATORIUM
Perkiraan waktu
10-15 menit
Tingkat kesulitan
Mudah
Tujuan
Biasakan siswa dengan:
memproyeksikan dan menulis fungsi parameterisasi;
menggunakan pernyataan return ;
menguji fungsi.
Skenario
Tugas Anda adalah menulis dan menguji fungsi yang membutuhkan satu argumen (satu tahun)
dan kembali Truejika tahun tersebut merupakan tahun kabisat , atau Falsesebaliknya.
Benih fungsi sudah ditaburkan dalam kode kerangka di editor.
Catatan: kami juga menyiapkan kode pengujian singkat, yang dapat Anda gunakan untuk
menguji fungsi Anda.
Kode menggunakan dua daftar - satu dengan data uji, dan yang lainnya berisi hasil yang
diharapkan. Kode akan memberi tahu Anda jika ada hasil yang tidak valid.
4.1.3.7 LAB: Berapa hari: menulis dan menggunakan fungsi Anda sendiri
LABORATORIUM
Perkiraan waktu
15-20 menit
15
Tingkat kesulitan
Medium
Prasyarat
LAB 4.1.3.6
Tujuan
Biasakan siswa dengan:
memproyeksikan dan menulis fungsi parameterisasi;
menggunakan pernyataan pengembalian ;
memanfaatkan fungsi siswa sendiri.
Skenario
Tugas Anda adalah menulis dan menguji fungsi yang membutuhkan dua argumen (satu tahun
dan satu bulan) dan mengembalikan jumlah hari untuk pasangan bulan / tahun yang diberikan
(sementara hanya Februari yang peka terhadap yearnilai, fungsi Anda harus universal).
Bagian awal dari fungsi sudah siap. Sekarang, yakinkan fungsi untuk kembali Nonejika
argumennya tidak masuk akal.
Tentu saja, Anda dapat (dan harus) menggunakan fungsi yang telah ditulis dan diuji
sebelumnya (LAB 4.1.3.6). Ini mungkin sangat membantu. Kami menyarankan Anda untuk
menggunakan daftar yang diisi dengan panjang bulan. Anda dapat membuatnya di dalam
fungsi - trik ini akan secara signifikan mempersingkat kode.
Kami telah menyiapkan kode pengujian. Perluas untuk memasukkan lebih banyak kasus uji.
4.1.3.8 LAB: Hari dalam setahun: menulis dan menggunakan fungsi Anda sendiri
LABORATORIUM
Perkiraan waktu
20-30 menit
Tingkat kesulitan
Medium
Prasyarat
LAB 4.1.3.6
LAB 4.1.3.7
Tujuan
Biasakan siswa dengan:
memproyeksikan dan menulis fungsi parameterisasi;
menggunakan pernyataan pengembalian ;
membangun seperangkat fungsi utilitas;
memanfaatkan fungsi siswa sendiri.
Skenario
Tugas Anda adalah menulis dan menguji fungsi yang membutuhkan tiga argumen (satu tahun,
satu bulan, dan satu hari dalam sebulan) dan mengembalikan hari yang sesuai tahun itu, atau
mengembalikan Nonejika salah satu argumen tidak valid.
Gunakan fungsi yang ditulis dan diuji sebelumnya. Tambahkan beberapa test case ke kode. Tes
ini hanya permulaan.
LABORATORIUM
Perkiraan waktu
15-20 menit
Tingkat kesulitan
Medium
Tujuan
membiasakan siswa dengan gagasan dan algoritma klasik;
meningkatkan keterampilan siswa dalam mendefinisikan dan menggunakan fungsi.
16
Skenario
Bilangan alami adalah prima jika lebih besar dari 1 dan tidak memiliki pembagi selain 1 dan itu
sendiri.
Rumit? Tidak semuanya. Misalnya, 8 bukan bilangan prima, karena Anda dapat membaginya
dengan 2 dan 4 (kami tidak dapat menggunakan pembagi sama dengan 1 dan 8, karena
definisi melarang ini).
Di sisi lain, 7 adalah bilangan prima, karena kami tidak dapat menemukan pembagi hukum
untuk itu.
Tugas Anda adalah menulis fungsi yang memeriksa apakah suatu bilangan prima atau tidak.
Fungsi:
disebut isPrime;
membutuhkan satu argumen (nilai untuk memeriksa)
kembali Truejika argumennya adalah bilangan prima, dan Falsesebaliknya.
Petunjuk: coba bagi argumen dengan semua nilai berikutnya (mulai dari 2) dan periksa sisanya
- jika nol, angka Anda tidak dapat menjadi prima; pikirkan baik-baik kapan Anda harus
menghentikan prosesnya.
Jika Anda perlu mengetahui akar kuadrat dari nilai apa pun, Anda dapat
memanfaatkan **operator. Ingat: akar kuadrat dari x sama dengan x 0,5
Lengkapi kode di editor.
Jalankan kode Anda dan periksa apakah output Anda sama dengan kami.
Data Uji
Output yang diharapkan:
2 3 5 7 11 13 17 19
LABORATORIUM
Perkiraan waktu
10-15 menit
Tingkat kesulitan
Mudah
Tujuan
meningkatkan keterampilan siswa dalam mendefinisikan, menggunakan, dan menguji
fungsi.
Skenario
Konsumsi bahan bakar mobil dapat dinyatakan dengan berbagai cara. Misalnya, di Eropa,
ditampilkan sebagai jumlah bahan bakar yang dikonsumsi per 100 kilometer.
Di AS, ditampilkan sebagai jumlah mil yang ditempuh oleh mobil menggunakan satu galon
bahan bakar.
Tugas Anda adalah menulis sepasang fungsi yang mengubah l / 100km menjadi mpg, dan
sebaliknya.
Fungsi:
diberi nama l100kmtompgdan mpgtol100kmmasing - masing;
ambil satu argumen (nilai yang sesuai dengan namanya)
Lengkapi kode di editor.
Jalankan kode Anda dan periksa apakah output Anda sama dengan kami.
Berikut ini beberapa informasi untuk membantu Anda:
1 mile Amerika = 1609.344 meter;
1 galon Amerika = 3,785411784 liter.
Data Uji
Output yang diharapkan:
60.31143162393162
31.36194444444444
23.52145833333333
17
3.9007393587617467
7.490910297239916
10.009131205673757
Takeaways kunci
1. Anda dapat menggunakan returnkata kunci untuk memberi tahu fungsi untuk
mengembalikan nilai. The returnpernyataan keluar fungsi, misalnya:
def multiply(a, b): return a * b print(multiply(3, 4)) # outputs: 12 def multiply(a, b): return
print(multiply(3, 4)) # outputs: None
Latihan 1
18
Apa output dari cuplikan berikut?
def hi(): return print("Hi!") hi()
Memeriksa
fungsi akan mengembalikan Nonenilai implisit
Latihan 2
Apa output dari cuplikan berikut?
def isInt(data): if type(data) == int: return True elif type(data) == float: return False print(isInt(5))
print(isInt(5.0)) print(isInt("5"))
Memeriksa
True False None
Latihan 3
Apa output dari cuplikan berikut?
def evenNumLst(ran): lst = [] for num in range(ran): if num % 2 == 0: lst.append(num) return lst
print(evenNumLst(11))
Memeriksa
[0, 2, 4, 6, 8, 10]
Latihan 4
Apa output dari cuplikan berikut?
def listUpdater(lst): updList = [] for elem in lst: elem **= 2 updList.append(elem) return updList l =
[1, 2, 3, 4, 5] print(listUpdater(l))
Memeriksa
[1, 4, 9, 16, 25]
Mari kita periksa. Lihatlah kode di editor. Apa yang akan terjadi ketika Anda menjalankannya?
Program akan gagal saat dijalankan. Pesan kesalahan akan membaca:
NameError: name 'x' is not defined
Jawabannya adalah: variabel yang ada di luar fungsi memiliki cakupan di dalam tubuh fungsi .
Aturan ini memiliki pengecualian yang sangat penting. Mari kita coba menemukannya.
19
Mari kita lakukan sedikit perubahan pada kode:
def myFunction(): var = 2 print("Do I know that variable?", var) var = 1 myFunction() print(var)
Hasilnya telah berubah juga - kode menghasilkan keluaran yang sedikit berbeda sekarang:
Do I know that variable? 2 1
Menggunakan kata kunci ini di dalam suatu fungsi dengan nama (atau nama yang dipisahkan
dengan koma) dari suatu variabel, memaksa Python untuk menahan diri dari membuat
variabel baru di dalam fungsi - yang dapat diakses dari luar akan digunakan sebagai gantinya.
Dengan kata lain, nama ini menjadi global (memiliki cakupan global , dan tidak masalah
apakah itu subjek yang dibaca atau ditugaskan).
20
Ini harus menjadi bukti yang cukup untuk menunjukkan bahwa globalkata kunci melakukan
apa yang dijanjikan.
Kesimpulannya jelas - mengubah nilai parameter tidak menyebar di luar fungsi (dalam hal apa
pun, tidak ketika variabel adalah skalar, seperti dalam contoh).
Ini juga berarti bahwa suatu fungsi menerima nilai argumen , bukan argumen itu sendiri. Ini
berlaku untuk skalar.
Apakah perlu memeriksa cara kerjanya dengan daftar (apakah Anda mengingat kekhasan
penugasan irisan daftar versus penugasan daftar secara keseluruhan?).
21
[2, 3] [2, 3]
Kami tidak mengubah nilai parameter myList1(kami sudah tahu itu tidak akan mempengaruhi
argumen), tetapi memodifikasi daftar yang diidentifikasi olehnya.
Outputnya mungkin mengejutkan. Jalankan kode dan periksa:
[2, 3] [3]
Takeaways kunci
1. Variabel yang ada di luar fungsi memiliki cakupan di dalam tubuh fungsi (Contoh 1) kecuali
fungsi tersebut mendefinisikan variabel dengan nama yang sama (Contoh 2, dan Contoh 3),
misalnya:
Contoh 1:
var = 2 def multByVar(x): return x * var print(multByVar(7)) # outputs: 14
Contoh 2:
def mult(x): var = 5 return x * var print(mult(7)) # outputs: 35
Contoh 3:
def multip(x): var = 7 return x * var var = 3 print(multip(7)) # outputs: 49
2. Variabel yang ada di dalam suatu fungsi memiliki cakupan di dalam tubuh fungsi (Contoh 4),
misalnya:
Contoh 4:
def adding(x): var = 7 return x + var print(adding(4)) # outputs: 11 print(var) # NameError
3. Anda dapat menggunakan globalkata kunci diikuti oleh nama variabel untuk membuat
lingkup variabel global, misalnya:
var = 2 print(var) # outputs: 2 def retVar(): global var var = 5 return var print(retVar()) # outputs:
5 print(var) # outputs: 5
Latihan 1
Apa yang akan terjadi ketika Anda mencoba menjalankan kode berikut?
def message(): alt = 1 print("Hello, World!") print(alt)
Memeriksa
The NameErrorpengecualian akan dilempar ( NameError: name 'alt' is not defined)
Latihan 2
22
Apa output dari cuplikan berikut?
a = 1 def fun(): a = 2 print(a) fun() print(a)
Memeriksa
21
Latihan 3
Apa output dari cuplikan berikut?
a = 1 def fun(): global a a = 2 print(a) fun() a = 3 print(a)
Memeriksa
23
Latihan 4
Apa output dari cuplikan berikut?
a = 1 def fun(): global a a = 2 print(a) a = 3 fun() print(a)
Memeriksa
22
Fungsi ini memenuhi harapan kami, tetapi agak sederhana - ia mengasumsikan bahwa nilai dari
kedua parameter selalu bermakna. Sudah pasti layak untuk diperiksa apakah mereka dapat
dipercaya.
Mari kita periksa keduanya dan kembali Nonejika ada yang mencurigakan.
Beberapa fungsi sederhana: mengevaluasi BMI dan mengkonversi unit imperial menjadi unit
metrik
Lihatlah kode di editor. Ada dua hal yang perlu kita perhatikan.
Pertama, permintaan tes memastikan bahwa perlindunganberfungsi dengan baik - hasilnya
adalah:
None
23
Kedua, lihat cara simbol backslash( \) digunakan. Jika Anda menggunakannya dalam kode
Python dan mengakhiri baris dengan itu, itu akan memberitahu Python untuk melanjutkan baris
kode di baris kode berikutnya.
Ini bisa sangat berguna ketika Anda harus berurusan dengan baris kode yang panjang dan
Anda ingin meningkatkan keterbacaan kode.
Oke, tapi ada sesuatu yang kita hilangkan terlalu mudah - pengukuran kekaisaran. Fungsi ini
tidak terlalu berguna untuk orang yang terbiasa dengan pound, kaki dan inci.
Apa yang bisa dilakukan untuk mereka?
Kita dapat menulis dua fungsi sederhana untuk mengonversi satuan imperial menjadi satuan
metrik . Mari kita mulai dengan pound.
Adalah fakta yang terkenal itu 1 lb = 0.45359237 kg. Kami akan menggunakan ini dalam fungsi
baru kami.
Ini adalah fungsi pembantu kami, bernama lbtokg:
def lbtokg(lb): return lb * 0.45359237 print(lbtokg(1))
Dan sekarang saatnya untuk kaki dan inci:, 1 ft = 0.3048 mdan 1 in = 2.54 cm = 0.0254 m.
Fungsi yang kami tulis bernama ftintom:
def ftintom(ft, inch): return ft * 0.3048 + inch * 0.0254 print(ftintom(1, 1))
Sangat mungkin bahwa kadang-kadang Anda mungkin ingin menggunakan hanya kaki tanpa
inci. Akankah Python membantu Anda? Tentu saja akan.
Kami telah sedikit memodifikasi kode:
def ftintom(ft, inch = 0.0): return ft * 0.3048 + inch * 0.0254 print(ftintom(6))
Akhirnya, kode tersebut mampu menjawab pertanyaan: berapa BMI seseorang yang tinggi 5'7
"dan beratnya £ 176?
Ini adalah kode yang kami bangun:
def ftintom(ft, inch = 0.0): return ft * 0.3048 + inch * 0.0254 def lbstokg(lb): return lb * 0.45359237
def bmi(weight, height): if height < 1.0 or height > 2.5 or \ weight < 20 or weight > 200: return
None return weight / height ** 2 print(bmi(weight = lbstokg(176), height = ftintom(5, 7)))
24
27.565214082533313
We know from school that the sum of two arbitrary sides has to be longer than the third side.
It won't be a hard challenge. The function will have three parameters - one for each side.
It will return True if the sides can build a triangle, and Falseotherwise. In this case, isItATriangle is
a good name for such a function.
Look at the code in the editor. You can find our function there. Run the program.
It seems that it works well - these are the results:
True False
We've negated the condition (reversed the relational operators and replaced ors with ands,
receiving a universal expression for testing triangles).
Let's install the function in a larger program. It'll ask the user for three values and make use of the
function.
25
4.1.5.4 Membuat fungsi | menguji segitiga
Lihatlah bagaimana kita menguji hubungan antara sisi miring dan sisi lainnya - kita memilih sisi
terpanjang, dan menerapkan teorema Pythagoras untuk memeriksa apakah semuanya
benar. Ini membutuhkan total tiga cek.
26
4.1.5.5 Membuat fungsi | segitiga siku-siku
Kami akan menggunakan operator eksponensial untuk menemukan akar kuadrat - ini mungkin
aneh, tetapi berfungsi:
Kami mencobanya dengan segitiga siku-siku sebagai setengah dari persegi dengan satu sisi
sama dengan 1. Ini berarti bahwa bidangnya harus sama dengan 0,5.
Ini aneh - kode menghasilkan output berikut:
0.49999999999999983
Sangat dekat dengan 0,5, tetapi tidak tepat 0,5. Apa artinya? Apakah ini sebuah kesalahan?
Tidak. Ini adalah spesifik dari perhitungan titik-mengambang . Kami akan segera memberi tahu
Anda tentang hal itu.
Itu ditandai dengan tanda seru , dan sama dengan produk dari semua bilangan alami dari satu
hingga argumennya.
Mari kita menulis kode kita. Kami akan membuat fungsi dan menyebutnya factorialFun. Ini
kodenya:
def factorialFun(n): if n < 0: return None if n < 2: return 1 product = 1 for i in range(2, n + 1):
product *= i return product for n in range(1, 6): # testing print(n, factorialFun(n))
27
Perhatikan bagaimana kita mencerminkan definisi matematika langkah demi langkah, dan
bagaimana kita menggunakan forloop untuk menemukan produk .
Kami menambahkan kode pengujian sederhana, dan ini adalah hasil yang kami dapatkan:
11
22
36
4 24
5 120
28
4.1.5.8 Membuat fungsi | rekursi
Ini dia:
def factorialFun(n): if n < 0: return None if n < 2: return 1 return n * factorialFun(n - 1)
Perjalanan fungsional singkat kami hampir berakhir. Bagian selanjutnya akan menangani dua
tipe data Python yang ingin tahu: tuple dan kamus.
29
4.1.5.9 RINGKASAN BAGIAN
Takeaways kunci
1. Suatu fungsi dapat memanggil fungsi lain atau bahkan dirinya sendiri. Ketika suatu fungsi
memanggil dirinya sendiri, situasi ini dikenal sebagai rekursi , dan fungsi yang memanggil dirinya
sendiri dan berisi kondisi terminasi yang ditentukan (yaitu, kasus dasar - suatu kondisi yang tidak
memberi tahu fungsi untuk melakukan panggilan lebih jauh ke fungsi itu) disebut fungsi rekursif .
2. Anda dapat menggunakan fungsi rekursif dalam Python untuk menulis kode yang bersih dan
elegan, dan membaginya menjadi potongan yang lebih kecil dan terorganisir . Di sisi lain, Anda
harus sangat berhati-hati karena mungkin mudah membuat kesalahan dan membuat fungsi
yang tidak pernah berakhir . Anda juga perlu ingat bahwa panggilan rekursif menghabiskan
banyak memori , dan karenanya terkadang tidak efisien.
Saat menggunakan rekursi, Anda harus mempertimbangkan semua kelebihan dan
kekurangannya.
Fungsi faktorial adalah contoh klasik tentang bagaimana konsep rekursi dapat dipraktikkan:
# Recursive implementation of the factorial function def factorial(n): if n == 1: # the base case
(termination condition) return 1 else: return n * factorial(n - 1) print(factorial(4)) # 4 * 3 * 2 * 1 = 24
Latihan 1
Apa yang akan terjadi ketika Anda mencoba menjalankan cuplikan berikut dan mengapa?
def factorial(n): return n * factorial(n - 1) print(factorial(4))
Memeriksa
Fungsi faktorial tidak memiliki kondisi terminasi (tidak ada kasus dasar) sehingga Python akan
melempar pengecualian ( RecursionError: maximum recursion depth exceeded)
Latihan 2
Apa output dari cuplikan berikut?
def fun(a): if a > 30: return 3 else: return a + fun(a + 3) print(fun(25))
Memeriksa
56
30
4.1.6.1 Tuple dan kamus
Gagasan kedua - mutabilitas - adalah properti dari setiap data Python yang menggambarkan
kesiapannya untuk diubah secara bebas selama eksekusi program. Ada dua jenis data
Python: bisa berubah dan tidak berubah .
Data yang dapat berubah dapat diperbarui secara bebas kapan saja - kami menyebutnya
operasi di tempat.
In situ adalah frasa Latin yang diterjemahkan secara literal dalam posisi . Misalnya, instruksi
berikut mengubah data di tempat:
list.append(1)
Data yang tidak dapat diubah tidak dapat dimodifikasi dengan cara ini .
Bayangkan sebuah daftar hanya dapat ditugaskan dan dibaca. Anda tidak dapat
menambahkan elemen ke dalamnya, atau menghapus elemen apa pun darinya. Ini berarti
bahwa menambahkan elemen ke akhir daftar akan memerlukan rekreasi daftar dari awal.
Anda harus membuat daftar yang benar-benar baru, yang terdiri dari semua elemen dari
daftar yang sudah ada, ditambah elemen baru.
Tipe data yang ingin kami beri tahu sekarang adalah tuple . Sebuah tuple adalah tipe urutan
yang tidak berubah . Itu bisa berperilaku seperti daftar, tetapi tidak boleh dimodifikasi in situ.
Catatan: setiap elemen tuple mungkin dari tipe yang berbeda (floating-point, integer, atau
jenis data lain yang belum diperkenalkan).
Bagaimana cara membuat tuple?
Dimungkinkan untuk membuat tuple kosong - tanda kurung diperlukan kemudian:
emptyTuple = ()
31
Jika Anda ingin membuat tupel satu elemen , Anda harus mempertimbangkan fakta bahwa,
karena alasan sintaks (tuple harus dapat dibedakan dari nilai tunggal, biasa), Anda harus
mengakhiri nilainya dengan koma:
oneElementTuple1 = (1, ) oneElementTuple2 = 1.,
Menghapus koma tidak akan merusak program dalam arti sintaksis apa pun, tetapi Anda akan
mendapatkan dua variabel tunggal, bukan tupel.
Ini menunjukkan tiga tuple berinteraksi - efeknya, nilai-nilai yang tersimpan di dalamnya
"bersirkulasi" - t1menjadi t2, t2menjadi t3, dan t3menjadi t1.
Catatan: contoh menyajikan satu fakta penting: elemen tuple dapat berupa variabel , bukan
hanya literal. Selain itu, mereka dapat menjadi ekspresi jika mereka berada di sisi kanan
operator penugasan.
Di dunia Python, kata yang Anda cari bernama a key. Kata yang Anda dapatkan dari kamus
disebut a value.
Ini berarti bahwa kamus adalah seperangkat pasangan nilai kunci . catatan:
33
setiap kunci harus unik - tidak mungkin memiliki lebih dari satu kunci dengan nilai yang
sama;
kunci dapat berupa data dari jenis apa pun : mungkin berupa angka (bilangan bulat
atau float), atau bahkan string;
kamus bukan daftar - daftar berisi sekumpulan nilai bernomor, sementara kamus
menyimpan pasangan nilai ;
yang len()fungsi bekerja untuk kamus, juga - ia mengembalikan jumlah elemen kunci-
nilai dalam kamus;
kamus adalah alat satu arah - jika Anda memiliki kamus Bahasa Inggris-Bahasa Prancis,
Anda dapat mencari padanan kata dalam Bahasa Inggris yang setara dengan bahasa
Prancis, tetapi tidak sebaliknya.
Sekarang kami dapat menunjukkan beberapa contoh yang berfungsi.
Dalam contoh pertama, kamus menggunakan kunci dan nilai yang keduanya merupakan
string. Dalam yang kedua, kunci adalah string, tetapi nilainya adalah integer. Tata letak terbalik
(tombol → angka, nilai → string) juga dimungkinkan, serta kombinasi angka-angka.
Daftar pasangan dikelilingi oleh kurung kurawal , sementara pasangan itu sendiri dipisahkan
oleh koma , dan kunci dan nilai oleh titik dua .
Kamus pertama kami adalah kamus Inggris-Perancis yang sangat sederhana. Yang kedua -
direktori telepon yang sangat kecil.
Kamus kosong dibangun oleh sepasang kurung kurawal yang kosong - tidak ada yang aneh.
CATATAN
(*) Dalam kamus Python 3.6x telah menjadi koleksi yang dipesan secara default. Hasil Anda
dapat bervariasi tergantung pada versi Python apa yang Anda gunakan.
Mendapatkan nilai kamus menyerupai pengindeksan, terutama berkat tanda kurung yang
mengelilingi nilai kunci.
catatan:
jika kuncinya adalah string, Anda harus menentukannya sebagai string;
kunci adalah case-sensitive : 'Suzy'adalah sesuatu yang berbeda dari 'suzy'.
Cuplikan menghasilkan dua baris teks:
34
chat 5557654321
Dan sekarang berita paling penting: Anda tidak boleh menggunakan kunci yang tidak
ada . Mencoba sesuatu seperti ini:
print(phoneNumbers['president'])
Untungnya, ada cara sederhana untuk menghindari situasi seperti itu. The inoperator, bersama
dengan pendamping nya, not in, bisa menyelamatkan situasi ini.
Kode berikut dengan aman mencari beberapa kata bahasa Prancis:
dict = {"cat" : "chat", "dog" : "chien", "horse" : "cheval"} words = ['cat', 'lion', 'horse'] for word in
words: if word in dict: print(word, "->", dict[word]) else: print(word, "is not in dictionary")
The sorted()fungsi akan melakukan yang terbaik - output akan terlihat seperti ini:
cat -> chat dog -> chien horse -> cheval
35
dict = {"cat" : "chat", "dog" : "chien", "horse" : "cheval"} for english, french in dict.items():
print(english, "->", french)
Ada juga metode yang dinamai values(), yang berfungsi serupa dengan keys(),
tetapi mengembalikan daftar nilai .
Ini adalah contoh sederhana:
dict = {"cat" : "chat", "dog" : "chien", "horse" : "cheval"} for french in dict.values(): print(french)
Karena kamus tidak dapat secara otomatis menemukan kunci untuk nilai yang diberikan, peran
metode ini agak terbatas.
Inilah output yang diharapkan:
cheval
chien
chat
Outputnya adalah:
{'dog': 'chien', 'horse': 'cheval', 'cat': 'minou'}
Contoh output:
{'swan': 'cygne', 'horse': 'cheval', 'dog': 'chien', 'cat': 'chat'}
TAMBAHAN
Anda juga dapat memasukkan item ke kamus dengan menggunakan update()metode ini,
misalnya:
dict = {"cat" : "chat", "dog" : "chien", "horse" : "cheval"} dict.update({"duck" : "canard"}) print(dict)
Menghapus kunci
Bisakah Anda menebak cara menghapus kunci dari kamus?
Catatan: menghapus kunci akan selalu menyebabkan penghapusan nilai terkait . Nilai tidak
bisa ada tanpa kunci mereka .
Ini dilakukan dengan delinstruksi.
Inilah contohnya:
36
dict = {"cat" : "chat", "dog" : "chien", "horse" : "cheval"} del dict['dog'] print(dict)
TAMBAHAN
Untuk menghapus item terakhir dalam kamus, Anda dapat menggunakan popitem()metode
ini:
dict = {"cat" : "chat", "dog" : "chien", "horse" : "cheval"} dict.popitem() print(dict) # outputs: {'cat' :
'chat', 'dog' : 'chien'}
Dalam versi Python yang lebih lama, yaitu, sebelum 3.6.7, popitem()metode menghapus item
acak dari kamus.
37
4.1.6.10 RINGKASAN BAGIAN (1/3)
1. Tuple diperintahkan dan koleksi tidak berubah (kekal) data. Mereka dapat dianggap
sebagai daftar abadi. Mereka ditulis dalam kurung bulat:
myTuple = (1, 2, True, "a string", (3, 4), [5, 6], None) print(myTuple) myList = [1, 2, True, "a string", (3,
4), [5, 6], None] print(myList)
Setiap elemen tuple mungkin dari tipe yang berbeda (yaitu, bilangan bulat, string, boolean,
dll.). Terlebih lagi, tuple dapat berisi tuple atau daftar lainnya (dan sebaliknya).
2. Anda dapat membuat tuple kosong seperti ini:
emptyTuple = () print(type(emptyTuple)) # outputs: <class 'tuple'>
Jika Anda menghapus koma, Anda akan memberi tahu Python untuk membuat variabel,
bukan tuple:
myTup1 = 1, print(type(myTup1)) # outputs: <class 'tuple'> myTup2 = 1 print(type(myTup2)) #
outputs: <class 'int'>
5. Tuple tidak dapat diubah, artinya Anda tidak dapat mengubah elemennya (Anda tidak
dapat menambahkan tupel, atau memodifikasi, atau menghapus elemen tuple). Cuplikan
berikut akan menyebabkan pengecualian:
myTuple = (1, 2.0, "string", [3, 4], (5, ), True) myTuple[2] = "guitar" # a TypeError exception will be
raised
6. Anda dapat mengulang melalui elemen tuple (Contoh 1), memeriksa apakah elemen
tertentu (tidak) ada dalam tupel (Contoh 2), gunakan len()fungsi ini untuk memeriksa berapa
38
banyak elemen yang ada dalam tupel (Contoh 3), atau bahkan bergabung / gandakan tupel
(Contoh 4):
# Example 1 t1 = (1, 2, 3) for elem in t1: print(elem) # Example 2 t2 = (1, 2, 3, 4) print(5 in t2)
print(5 not in t2) # Example 3 t3 = (1, 2, 3, 5) print(len(t3)) # Example 4 t4 = t1 + t2 t5 = t3 * 2
print(t4) print(t5)
TAMBAHAN
Anda juga dapat membuat tupel menggunakan fungsi bawaan Python yang
disebut tuple(). Ini sangat berguna ketika Anda ingin mengonversi iterable tertentu (misalnya,
daftar, rentang, string, dll.) Ke tuple:
myTup = tuple((1, 2, "string")) print(myTup) lst = [2, 4, 6] print(lst) # outputs: [2, 4, 6] print(type(lst))
# outputs: <class 'list'> tup = tuple(lst) print(tup) # outputs: (2, 4, 6) print(type(tup)) # outputs:
<class 'tuple'>
Dengan cara yang sama, saat Anda ingin mengonversi iterable ke daftar, Anda bisa
menggunakan fungsi bawaan Python yang disebut list():
tup = 1, 2, 3, lst = list(tup) print(type(lst)) # outputs: <class 'list'>
1. Kamus tidak berurutan * , dapat diubah (dapat diubah), dan koleksi data yang
diindeks. ( * Dalam kamus Python 3.6x telah dipesan secara default.
Setiap kamus adalah serangkaian kunci: pasangan nilai . Anda dapat membuatnya dengan
menggunakan sintaks berikut:
myDictionary = { key1 : value1, key2 : value2, key3 : value3, }
2. Jika Anda ingin mengakses item kamus, Anda dapat melakukannya dengan membuat
referensi ke kuncinya di dalam sepasang kurung kotak (mis. 1) atau dengan
menggunakan get()metode (mis. 2):
polEngDict = { "kwiat" : "flower", "woda" : "water", "gleba" : "soil" } item1 = polEngDict["gleba"] #
ex. 1 print(item1) # outputs: soil item2 = polEngDict.get("woda") print(item2) # outputs: water
3. Jika Anda ingin mengubah nilai yang terkait dengan kunci tertentu, Anda dapat
melakukannya dengan merujuk ke nama kunci item dengan cara berikut:
polEngDict = { "zamek" : "castle", "woda" : "water", "gleba" : "soil" } polEngDict["zamek"] = "lock"
item = polEngDict["zamek"] # outputs: lock
4. Untuk menambah atau menghapus kunci (dan nilai terkait), gunakan sintaks berikut:
myPhonebook = {} # an empty dictionary myPhonebook["Adam"] = 3456783958 # create/add a
key-value pair print(myPhonebook) # outputs: {'Adam': 3456783958} del myPhonebook["Adam"]
print(myPhonebook) # outputs: {}
Anda juga dapat memasukkan item ke kamus dengan menggunakan update()metode, dan
menghapus elemen terakhir dengan menggunakan popitem()metode, misalnya:
polEngDict = {"kwiat" : "flower"} polEngDict = update("gleba" : "soil") print(polEngDict) # outputs:
{'kwiat' : 'flower', 'gleba' : 'soil'} polEngDict.popitem() print(polEngDict) # outputs: {'kwiat' :
'flower'}
39
6. Jika Anda ingin mengulang-ulang kunci dan nilai kamus, Anda dapat
menggunakan items()metode ini, misalnya:
polEngDict = { "zamek" : "castle", "woda" : "water", "gleba" : "soil" } for key, value in
polEngDict.items(): print("Pol/Eng ->", key, ":", value)
7. Untuk memeriksa apakah kunci yang diberikan ada dalam kamus, Anda dapat
menggunakan inkata kunci:
polEngDict = { "zamek" : "castle", "woda" : "water", "gleba" : "soil" } if "zamek" in polEngDict:
print("Yes") else: print("No")
8. Anda dapat menggunakan delkata kunci untuk menghapus item tertentu, atau menghapus
kamus. Untuk menghapus semua item kamus, Anda perlu menggunakan clear()metode ini:
polEngDict = { "zamek" : "castle", "woda" : "water", "gleba" : "soil" } print(len(polEngDict)) #
outputs: 3 del polEngDict["zamek"] # remove an item print(len(polEngDict)) # outputs: 2
polEngDict.clear() # removes all the items print(len(polEngDict)) # outputs: 0 del polEngDict #
removes the dictionary
Latihan 1
Apa yang terjadi ketika Anda mencoba menjalankan cuplikan berikut?
myTup = (1, 2, 3) print(myTup[2])
Memeriksa
Program akan mencetak 3ke layar.
Latihan 2
Apa output dari cuplikan berikut?
tup = 1, 2, 3 a, b, c = tup print(a * b * c)
Memeriksa
Program akan mencetak 6ke layar. The tupelemen tupel telah "dibongkar" di a, b,
dan cvariabel.
Latihan 3
Lengkapi kode untuk menggunakan count()metode ini dengan benar untuk menemukan
jumlah duplikat 2dalam tuple berikut.
tup = 1, 2, 3, 2, 4, 5, 6, 2, 7, 2, 8, 9 duplicates = # your code print(duplicates) # outputs: 4
Memeriksa
tup = 1, 2, 3, 2, 4, 5, 6, 2, 7, 2, 8, 9 duplicates = tup.count(2) print(duplicates) # outputs: 4
Latihan 4
Tulis program yang akan "merekatkan" dua kamus ( d1dan d2) bersama-sama dan membuat
yang baru ( d3).
d1 = {'Adam Smith':'A', 'Judy Paxton':'B+'} d2 = {'Mary Louis':'A', 'Patrick White':'C'} d3 = {} for item
in (d1, d2): # your code print(d3)
Memeriksa
Solusi sampel:
d1 = {'Adam Smith':'A', 'Judy Paxton':'B+'} d2 = {'Mary Louis':'A', 'Patrick White':'C'} d3 = {} for item
in (d1, d2): d3.update(item) print(d3)
Latihan 5
40
Tulis program yang akan mengubah ldaftar menjadi tuple.
l = ["car", "Ford", "flower", "Tulip"] t = # your code print(t)
Memeriksa
Solusi sampel:
l = ["car", "Ford", "flower", "Tulip"] t = tuple(l) print(t)
Latihan 6
Tulis program yang akan mengonversi colorstuple ke kamus.
colors = (("green", "#008000"), ("blue", "#0000FF")) # your code print(colDict)
Memeriksa
Solusi sampel:
colors = (("green", "#008000"), ("blue", "#0000FF")) colDict = dict(colors) print(colDict)
Latihan 7
Apa yang akan terjadi ketika Anda menjalankan kode berikut?
myDict = {"A":1, "B":2} copyMyDict = myDict.copy() myDict.clear() print(copyMyDict)
Memeriksa
Program akan mencetak {'A': 1, 'B': 2}ke layar
Latihan 8
Apa output dari program berikut?
colors = { "white" : (255, 255, 255), "grey" : (128, 128, 128), "red" : (255, 0, 0), "green" : (0, 128, 0) } for
col, rgb in colors.items(): print(col, ":", rgb)
Memeriksa
white : (255, 255, 255) grey : (128, 128, 128) red : (255, 0, 0) green : (0, 128, 0)
Perkiraan waktu
30-60 menit
Tingkat kesulitan
Sedang / Keras
Tujuan
menyempurnakan keterampilan siswa dalam menggunakan Python untuk
memecahkan masalah yang kompleks,
integrasi teknik pemrograman dalam satu program yang terdiri dari berbagai bagian.
Skenario
Tugas Anda adalah menulis program sederhana yang berpura-pura bermain tic-tac-toedengan
pengguna . Untuk mempermudah Anda, kami telah memutuskan untuk menyederhanakan
permainan. Berikut adalah asumsi kami:
komputer (yaitu, program Anda) harus memainkan game menggunakan 'X's;
pengguna (misalnya, Anda) harus memainkan game menggunakan 'O's;
langkah pertama adalah milik komputer - selalu menempatkan yang pertama 'X'di
tengah papan;
semua kotak diberi nomor baris demi baris yang dimulai dengan 1(lihat sesi contoh di
bawah ini untuk referensi)
pengguna memasukkan langkah mereka dengan memasukkan angka kuadrat yang
mereka pilih - angka harus valid, yaitu harus bilangan bulat, harus lebih besar dari 0dan
kurang dari 10, dan tidak bisa menunjuk ke bidang yang sudah ditempati;
program memeriksa apakah permainan telah berakhir - ada empat kemungkinan vonis:
permainan harus dilanjutkan, atau permainan berakhir dengan seri, kemenangan Anda,
atau kemenangan komputer;
komputer merespons dengan gerakannya dan pemeriksaan diulang;
jangan menerapkan segala bentuk kecerdasan buatan - pilihan bidang acak yang
dibuat oleh komputer cukup baik untuk permainan.
41
Sesi contoh dengan program mungkin terlihat sebagai berikut:
Persyaratan
Terapkan fitur-fitur berikut:
papan harus disimpan sebagai daftar tiga elemen, sementara masing-masing elemen
adalah daftar tiga elemen lain (daftar dalam mewakili baris) sehingga semua kotak
dapat diakses menggunakan sintaks berikut:
board[row][column]
setiap elemen daftar dalam dapat berisi 'O',, 'X'atau digit yang mewakili nomor kuadrat
(kuadrat tersebut dianggap gratis)
Penampilan papan harus persis sama dengan yang disajikan dalam contoh.
mengimplementasikan fungsi yang didefinisikan untuk Anda di editor.
Menggambar angka integer acak dapat dilakukan dengan memanfaatkan fungsi Python yang
disebut randrange(). Contoh program di bawah ini menunjukkan cara menggunakannya
(program mencetak sepuluh angka acak dari 0 hingga 8).
Catatan: from-importinstruksi ini menyediakan akses ke randrangefungsi yang didefinisikan
dalam modul Python eksternal yang dipanggil random.
from random import randrange for i in range(10): print(randrange(8))
42
4.1.6.14 Penyelesaian Modul
Sudah selesai dilakukan dengan baik! Anda telah mencapai akhir Modul 4 dan menyelesaikan
tonggak utama dalam pendidikan pemrograman Python Anda. Berikut ini ringkasan singkat
dari tujuan yang telah Anda bahas dan ketahui dalam Modul 4:
mendefinisikan dan menggunakan fungsi - alasan, tujuan, konvensi, dan perangkap
mereka;
konsep meneruskan argumen dengan cara yang berbeda dan menetapkan nilai
defaultnya, bersama dengan mekanisme pengembalian hasil fungsi;
masalah cakupan nama;
agregat data baru: tupel dan kamus, dan perannya dalam pemrosesan data.
Anda sekarang siap untuk mengikuti kuis modul dan mencoba tantangan terakhir: Modul 4 Tes,
yang akan membantu Anda mengukur apa yang telah Anda pelajari sejauh ini.
43