diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/2018/05/sastrawi-natural-language-processing-bahasa-indonesia/index.html b/2018/05/sastrawi-natural-language-processing-bahasa-indonesia/index.html new file mode 100644 index 00000000..622740f5 --- /dev/null +++ b/2018/05/sastrawi-natural-language-processing-bahasa-indonesia/index.html @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sastrawi, Natural Language Processing Mudah Dengan Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ +
+ + + + +
+

Sastrawi, Natural Language Processing Mudah Dengan Python

+
+

Sastrawi NLP Bahasa Indonesia

+

Sastrawi adalah perpustakaan PHP sederhana yang memungkinkan Anda untuk mengurangi kata-kata yang terinfleksi dalam Bahasa Indonesia (Bahasa Indonesia) ke bentuk dasarnya (batang)

+

Stemming adalah proses mengubah kata berimbuhan menjadi kata dasar. Contoh:

+

menahan => tahan +berbalas-balasan => balas

+
Contoh kasus
+

Misalnya sebuah blog post berisi:

+

Rakyat memenuhi halaman gedung untuk menyuarakan isi hatinya.

+

Pencarian dengan query di bawah ini tidak akan menemukan post di atas

+

SELECT * FROM posts WHERE content LIKE '%suara%'

+

Proses stemming dapat membantu menemukan dokumen yang sedang dicari yaitu dengan menanggalkan imbuhan-imbuhan hingga hanya menyisakan kata dasar seperti berikut:

+

rakyat penuh halaman gedung suara isi hati

+

Lalu kata kunci pencarian juga dijadikan kata dasar:

+

Bersuara => suara

+

Penggunaan

+
# import StemmerFactory class
+from Sastrawi.Stemmer.StemmerFactory import StemmerFactory
+
+# create stemmer
+factory = StemmerFactory()
+stemmer = factory.create_stemmer()
+
+# stemming process
+sentence = 'Perekonomian Indonesia sedang dalam pertumbuhan yang membanggakan'
+output   = stemmer.stem(sentence)
+
+print(output)
+# ekonomi indonesia sedang dalam tumbuh yang bangga
+
+print(stemmer.stem('Mereka meniru-nirukannya'))
+# mereka tiru
+
+

Untuk lebih lengkapnya silahkan lihat di Github

+
+
+

penulis: Purwanto https://github.com/purwnt

+
+
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/2018/09/2020-10-26-Source-untuk-belajar-python/index.html b/2018/09/2020-10-26-Source-untuk-belajar-python/index.html new file mode 100644 index 00000000..a1d12372 --- /dev/null +++ b/2018/09/2020-10-26-Source-untuk-belajar-python/index.html @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Source untuk belajar python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ +
+ + + + +
+

Source untuk belajar python

+

Python menjadi salah satu bahasa pemrograman yang paling diminati saat ini. seperti dilansir dari situs The Redmonk python menduduki peringkat kedua setelah javascript. Karena banyaknya pengguna bahasa python, mungkin ini yang membuat developer python lebih semangat untuk meningkatkan performa bahasa python. Supaya tidak ketinggalan tren python mau tidak mau ya kita harus terus belajar, maka dari itu di artikel ini saya ingin mencoba berbagi beberapa referensi sumber yang saya gunakan untuk belajar bahasa python. Ps: kalian bisa menambahkan sumber lain yang kalian punya ke artikel ini. +Redmon rank

+
+

1. realpython.com

+

realpython.com adalah situs belajar pemrograman python berbahasa Inggris. Di situs ini kamu bisa mengikuti tutorial untuk project-project kecil, kamu bisa baca artikel tentang bahasa pemrograman, kamu juga bisa subscribe email realpython jika kamu ingin dikirimi email berita terbaru tentang bahasa pemrograman python. Ada juga video kursus nya sehingga kamu bisa belajar python step-by-step. Lalu ada Kuis dimana kamu bisa mengecek progress skill python kamu. Dan yang paling bagus menurutku adalah fitur learning path di situs ini, jadi kamu bisa fokus belajar ke bidang keahlian yang ingin kamu tekuni misalkan kamu ingin menjadi python web developer atau data scientist. realpython.com

+

2. belajarpython.com

+

kalau tadi sudah yang berbahasa Inggris, kayaknya kita juga harus memiliki sumber referensi belajar yang menggunakan bahasa sehari-hari kita sendiri. Salah satunya adalah situs dimana artikel ini dibuat yaitu belajarpython.com. Di situs ini kamu bisa belajar dengan mengikuti tutorial yang sudah dibuat hasil dari kontribusi para kontributor (situs ini open source) dan membaca artikel tentang python, yang pasti itu semua ditulis dengan bahasa Indonesia jadi jangan takut untuk belajar pemrogaman karena merasa tidak bisa bahasa Inggris. belajarpython.com

+
+

mungkin baru sedikit sumber yang bisa saya berikan karena situs ini yang sudah saya coba langsung. Jika teman-teman memiliki sumber lain silahkan masukkan ke artikel ini. Mari kita saling berbagi!.

+
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/2018/09/2021-10-3-cara-mempersing-api b/2018/09/2021-10-3-cara-mempersing-api new file mode 100644 index 00000000..6351cba0 --- /dev/null +++ b/2018/09/2021-10-3-cara-mempersing-api @@ -0,0 +1,24 @@ +--- +layout: article +title: Memparsing api dengan method GET +date: 2021-10-03 +categories: artikel +--- +--- +Assalamualaikum wr.wb
+Terimakasih untuk belajarpython.com untuk bisa berbagi ilmu untuk seluruh insan yang mau belajar bahasa python ini, +Ke hadiran saya ini ingin mengeshare cara memparsing data api... +## step +Melakukan install 'requests' terlebih dahulu di terminal anda. +> __$__ pip install requests
+Setelah sudah melakukan insta requests, mari kita mainkan apinya hehe, +semisal kita ingin memparsing data api dnslookup.
+> import requests
+> Url = 'https://api.hackertarget.com/dnslookup/?q={www.site.com}'
+> req = requests.get(Url).text
+> for x in req:
+> print (x)
+ +Gimana mudah kan?, sekian dan terimakasih semoga admin di limpahkan rezekinya.
+Jika ada kesalahan kata mohon maaf wassalamualaikum wr.wb
+*- penulis* [agung](https://github.com/gitcomeon8) diff --git a/2018/09/3-library-python-terbaik-untuk-data-science/index.html b/2018/09/3-library-python-terbaik-untuk-data-science/index.html new file mode 100644 index 00000000..2f194495 --- /dev/null +++ b/2018/09/3-library-python-terbaik-untuk-data-science/index.html @@ -0,0 +1,259 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 Library Python Terbaik Untuk Data Science - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ +
+ + + + +
+

3 Library Python Terbaik Untuk Data Science

+

Banyaknya kelebihan pada pemrograman pythno seperti efisiensei, keterbacaan kode dan kecepatan telah membuat python menjadi bahasa pemrograman yang banyak digunakan oleh para data scientist. Pyton menjadi pilihan untuk pada data scientist dan machine learning engineer untuk mengembangkan model dan berbagai aplikasi terkait data science.

+

Karena penggunaannya yang luas, Python memiliki banyak library yang memudahkan para ilmuwan data / data scientist untuk menyelesaikan tugas-tugas rumit tanpa banyak gangguan pengkodean. Berikut adalah 3 library Python yang paling banyak digunakan untuk data science.

+

1. NumPy

+

logo numpy

+

NumPy (kependekan dari Numerical Python) adalah salah satu library teratas yang dilengkapi dengan sumber daya yang berguna untuk membantu para data scientist mengubah Python menjadi alat analisis dan pemodelan ilmiah yang kuat. Libary Open source terpopuler ini tersedia di bawah lisensi BSD. Ini adalah pustaka Python dasar untuk melakukan tugas dalam komputasi ilmiah. NumPy adalah bagian dari ekosistem berbasis Python yang lebih besar dari tool open source yang disebut SciPy.

+

Perpustakaan memberdayakan Python dengan struktur data substansial untuk mudah melakukan perhitungan multi-dimensi (multi-dimensional arrays) dan perhitungan matrik. Selain penggunaannya dalam menyelesaikan persamaan aljabar linier (linear algebra equations) dan perhitungan matematis lainnya, NumPy juga digunakan sebagai wadah multi-dimensi serbaguna untuk berbagai jenis data generik.

+

Lebih hebatnya, NumPy terintegrasi dengan bahasa pemrograman lain seperti C / C ++ dan Fortran. Fleksibilitas perpustakaan NumPy memungkinkannya untuk dengan mudah dan cepat bergabung dengan berbagai database dan tools. Sebagai contoh, mari kita lihat bagaimana NumPy (disingkat np) dapat digunakan untuk mengalikan dua matriks.

+

Mari memulainya dengan meng-import library ini terlebih dahulu ( disini kita menggunakan Jupyter notebook untuk contoh)

+
import numpy as np
+
+

Selanjutnya, kita akan menggunakan fungsi eye() untuk menghasilkan matriks identitas dengan dimensi yang ditetapkan.

+
matrix_one = np.eye(3)
+matrix_one
+
+

Outputnya akan seperti dibawah ini :

+
array([[1., 0., 0.],
+       [0., 1., 0.],
+       [0., 0., 1.]])
+
+

Mari hasilkan matriks 3x3 lainnya.

+

Kita akan menggunakan fungsi arange([starting number], [stopping number]) untuk mengatur nomor. Perhatikan bahwa parameter pertama dalam fungsi adalah nomor awal yang akan didaftar dan nomor terakhir tidak termasuk dalam hasil yang dihasilkan.

+

Juga, fungsi reshape() diterapkan untuk memodifikasi dimensi dari matriks yang dihasilkan secara original ke dimensi yang diinginkan. Agar matrik bisa "multiply-able", mereka harus memiliki dimensi yang sama.

+
matrix_two = np.arange(1,10).reshape(3,3)
+matrix_two
+
+

Outputnya akan seperti dibawah ini :

+
array([[1, 2, 3],
+       [4, 5, 6],
+       [7, 8, 9]])
+       ```
+
+Mari gunakan fungsi `dot()` untuk mengalikan dua matriks.
+
+```python
+matrix_multiply = np.dot(matrix_one, matrix_two)
+matrix_multiply
+
+

Outputnya akan seperti dibawah ini :

+
array([[1., 2., 3.],
+       [4., 5., 6.],
+       [7., 8., 9.]])
+
+

Kita telah berhasil melipatgandakan dua matriks tanpa menggunakan vanilla Python.

+

Berikut ini seluruh kode untuk contoh ini:

+
import numpy as np
+#menghasilkan a 3 by 3 identity matrix
+matrix_one = np.eye(3)
+matrix_one
+#menghasilkan 3 by 3 matrix lainya for perkalian
+matrix_two = np.arange(1,10).reshape(3,3)
+matrix_two
+#mengkalikan dua array
+matrix_multiply = np.dot(matrix_one, matrix_two)
+matrix_multiply
+
+

2. Pandas

+

logo pandas

+

Pandas adalah library hebat lain yang dapat meningkatkan keterampilan Python Anda untuk data science. Sama seperti NumPy, Pandas milik keluarga perangkat lunak open source SciPy dan tersedia di bawah lisensi perangkat lunak bebas BSD.

+

Pandas menawarkan alat serbaguna dan kuat untuk struktur data dan melakukan analisis data yang luas. Library ini berfungsi dengan baik dengan data dunia nyata yang tidak lengkap, tidak terstruktur, dan tidak teratur — dan dilengkapi dengan tool untuk membentuk, menggabungkan, menganalisis, dan memvisualisasikan datasets.

+

Ada tiga jenis struktur data di library ini:

+ +

Sebagai contoh, mari kita lihat bagaimana library Panda Python (disingkat pd) dapat digunakan untuk melakukan beberapa perhitungan statistik deskriptif.

+

Mari mulai dengan mengimport library pandas ini.

+
import pandas as pd
+
+

Selanjutnya kita buat dictionary yang seri.

+
d = {'Name':pd.Series(['Alfrick','Michael','Wendy','Paul','Dusan','George','Andreas',
+   'Irene','Sagar','Simon','James','Rose']),
+   'Years of Experience':pd.Series([5,9,1,4,3,4,7,9,6,8,3,1]),
+   'Programming Language':pd.Series(['Python','JavaScript','PHP','C++','Java','Scala','React','Ruby','Angular','PHP','Python','JavaScript'])
+    }
+
+

Selanjutnya buat Data Frame.

+
df = pd.DataFrame(d)
+
+

Output nya akan seperti dibawah ini :

+
      Name Programming Language  Years of Experience
+0   Alfrick               Python                    5
+1   Michael           JavaScript                    9
+2     Wendy                  PHP                    1
+3      Paul                  C++                    4
+4     Dusan                 Java                    3
+5    George                Scala                    4
+6   Andreas                React                    7
+7     Irene                 Ruby                    9
+8     Sagar              Angular                    6
+9     Simon                  PHP                    8
+10    James               Python                    3
+11     Rose           JavaScript                    1
+
+

Berikut ini seluruh kode untuk contoh ini:

+
import pandas as pd
+#creating a dictionary of series
+d = {'Name':pd.Series(['Alfrick','Michael','Wendy','Paul','Dusan','George','Andreas',
+   'Irene','Sagar','Simon','James','Rose']),
+   'Years of Experience':pd.Series([5,9,1,4,3,4,7,9,6,8,3,1]),
+   'Programming Language':pd.Series(['Python','JavaScript','PHP','C++','Java','Scala','React','Ruby','Angular','PHP','Python','JavaScript'])
+    }
+
+#Create a DataFrame
+df = pd.DataFrame(d)
+print(df)
+
+

3. Matplotlib

+

logo matplotlib

+

Matplotlib juga merupakan bagian dari paket inti SciPy dan ditawarkan di bawah lisensi BSD. Ini adalah library ilmiah Python populer yang digunakan untuk menghasilkan visualisasi yang sederhana dan kuat. Anda dapat menggunakan kerangka kerja Python untuk ilmu data untuk menghasilkan grafik, chart, histogram, dan bentuk dan gambar lain yang kreatif — tanpa perlu khawatir menulis banyak baris kode. Sebagai contoh, mari kita lihat bagaimana perpustakaan Matplotlib dapat digunakan untuk membuat bar chart sederhana.

+

Mari memulainya dengan mengimport library

+
from matplotlib import pyplot as plt
+
+

Mari hasilkan nilai untuk sumbu x dan sumbu y.

+
x = [2, 4, 6, 8, 10]
+y = [10, 11, 6, 7, 4]
+
+

Mari kita sebut fungsi untuk mem-plot diagram batang.

+
plt.bar(x,y)
+
+

Selanjutnya kita tampilkan plot nya.

+
plt.show()
+
+

Berikut adalah tampilan chart bar:

+

diagram batang matplotlib

+

Berikut ini seluruh kode untuk contoh ini:

+
#mengimport library Matplotlib Python  
+from matplotlib import pyplot as plt
+#same as import matplotlib.pyplot as plt
+
+#menghasilkan nilai untuk x-axis 
+x = [2, 4, 6, 8, 10]
+
+#menghasilkan nilai untuk y-axis 
+y = [10, 11, 6, 7, 4]
+
+#memanggil function untuk plotting the bar chart
+plt.bar(x,y)
+
+#menampilkan the plot
+plt.show()
+
+

Kesimpulan

+

Bahasa pemrograman Python selalu melakukan pekerjaan yang baik dalam hal data dan persiapan, tetapi kurang untuk analisis dan pemodelan data ilmiah yang rumit. Untuk itulah munculnya library Python sangat membantu untuk mengisi celah ini. Dengan adanya library ini akan memungkinkan Anda untuk melakukan perhitungan matematis yang kompleks dan membuat model canggih yang membuat data Anda masuk akal.

+

Selain dari 3 library diatas, adakah libary Python lainnya yang Anda tahu? Apa pengalamanmu dengan library tersebut? Silakan bagikan komentar Anda di bawah ini. Terimakasih.

+
+
+

penulis: Purwanto https://github.com/purwnt +*referensi: https://opensource.com

+
+
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/2018/09/5-tren-teratas-tentang-python-minggu-ini-di-github/index.html b/2018/09/5-tren-teratas-tentang-python-minggu-ini-di-github/index.html new file mode 100644 index 00000000..f1bf2190 --- /dev/null +++ b/2018/09/5-tren-teratas-tentang-python-minggu-ini-di-github/index.html @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 Tren Teratas Tentang Python Minggu ini di Github - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ +
+ + + + +
+

5 Tren Teratas Tentang Python Minggu ini di Github

+

Github adalah tempat berbagi proyek open source yang bisa digunakan secara bebas oleh semua orang. Terdapat proyek open source python disana.

+

Berikut adalah project python teratas minggu ini (18 September 2018).

+

TheAlgorithms / Python

+

TheAlgorithms / Python

+

Semua algoritma yang diimplementasikan dengan Python (untuk edukasi) +Ini hanya untuk tujuan demonstrasi. Ada banyak implementasi dalam pustaka standar Python yang jauh lebih baik untuk alasan kinerja. Artinya jika anda ingin menggunakanya untuk production diharapkan untuk tidak menggunakannya dari sini.

+

GitHub - TheAlgorithms/Python: Kumpulan algoritma yang diimplementasikan dalam python

+

mwouts / jupytext

+

Notebook Jupyter sebagai dokumen Markdown, Julia, Python atau R skrip. +Jupytext dapat mengonversi notebook ke dan dari Julia, Python dan R skrip (ekstensi .jl, .py dan .R), Dokumen markdown (ekstensi .md), Dokumen Markdown R (ekstensi .Rmd). +Jupytext tersedia dari dalam Jupyter. Anda dapat bekerja seperti biasa di notebook Anda di Jupyter, dan simpan dan baca dalam format yang Anda pilih.

+

GitHub - mwouts/jupytext: Jupyter notebooks sebagai dokumen Markdown, Julia, Python or R scripts

+

donnemartin/system-design-primer

+

donnemartin/system-design-primer

+

Pelajari cara merancang sistem berskala besar. Persiapan untuk wawancara desain sistem. Termasuk Anki flashcards. Ringkasan berbagai topik desain sistem, termasuk pro dan kontra. Semuanya adalah trade-off. Setiap bagian berisi link ke resources yang lebih mendalam.

+

GitHub - donnemartin/system-design-primer: Pelajari cara desain sistem skala besar

+

TensorFlow Models

+

Repositori ini berisi sejumlah model berbeda yang diterapkan di TensorFlow

+

Model resmi adalah kumpulan contoh model yang menggunakan API tingkat tinggi TensorFlow. Mereka dimaksudkan untuk dipelihara dengan baik, diuji, dan terus diperbarui dengan API TensorFlow stabil terbaru. Mereka juga harus dioptimalkan untuk kinerja cepat sementara masih mudah dibaca. Kami terutama merekomendasikan pengguna TensorFlow yang lebih baru untuk memulai di sini.

+

Model penelitian adalah kumpulan besar model yang diimplementasikan dalam TensorFlow oleh para peneliti. Mereka tidak secara resmi didukung atau tersedia di cabang rilis; terserah kepada masing-masing peneliti untuk mempertahankan model +dan / atau memberikan dukungan pada masalah dan menarik permintaan.

+

Folder sampel berisi cuplikan kode dan model yang lebih kecil yang menunjukkan fitur TensorFlow, termasuk kode yang disajikan di berbagai posting blog.

+

Folder tutorial adalah kumpulan model yang dijelaskan dalam tutorial TensorFlow.

+

tensorflow/tensorboard

+

TensorBoard adalah rangkaian aplikasi web untuk memeriksa dan memahami alur dan grafik TensorFlow Anda. +README ini memberikan ikhtisar tentang konsep-konsep kunci dalam TensorBoard, serta bagaimana menafsirkan visualisasi yang diberikan oleh TensorBoard. Untuk contoh mendalam menggunakan TensorBoard, lihat tutorial: TensorBoard: Visualizing Learning. Untuk informasi mendalam tentang Grafik Visualizer, lihat tutorial ini: TensorBoard: Grafik Visualisasi.

+

Github - Tensorflow

+
+
+

penulis gdkllr - referensi https://dev.to/kazup/top-10-of-python-weekly-trend-on-github-413n

+
+
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/2018/09/python-melesat-di-daftar-bahasa-pemrograman-yang-paling-populer/index.html b/2018/09/python-melesat-di-daftar-bahasa-pemrograman-yang-paling-populer/index.html new file mode 100644 index 00000000..d4ef82e6 --- /dev/null +++ b/2018/09/python-melesat-di-daftar-bahasa-pemrograman-yang-paling-populer/index.html @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Python Melesat di Daftar Bahasa Pemrograman Yang Paling Populer - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ +
+ + + + +
+

Python Melesat di Daftar Bahasa Pemrograman Yang Paling Populer

+

Menurut Indeks Tiobe untuk September 2018, Java, C, dan Python adalah bahasa pemrograman paling populer di dunia.

+

Bahasa populer lainnya termasuk Visual Basic .NET dan C ++, yang baru saja kehilangan tempat ketiga di peringkat ke Python.

+

Tiobe mencatat bahwa ini adalah pertama kalinya dalam sejarah bahwa Python telah memasuki tiga bahasa pemrograman teratas dalam peringkat Tiobe.

+

Tiobe menyatakan bahwa peningkatan signifikan Python dalam popularitas dapat dikaitkan dengan aksesibilitas dan kemudahan penggunaannya.

+

Peringkat PYPL menunjukkan Python di bagian atas daftar, diikuti oleh Java dan JavaScript.

+

Ranking Bahasa Pemrograman Populer Bulan September

+

22 bahasa pemrograman teratas untuk September 2018, menurut peringkat Tiobe Index dan PYPL, selengkapnya lihat gambar dibawah ini.

+

Python Bahasa Pemrograman Populer

+
+
+

Penulis gdkllr

+
+
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/2019/10/membaca-menulis-file-python/index.html b/2019/10/membaca-menulis-file-python/index.html new file mode 100644 index 00000000..f1f526f7 --- /dev/null +++ b/2019/10/membaca-menulis-file-python/index.html @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Membaca dan Menulis File dengan Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ +
+ + + + +
+

Membaca dan Menulis File dengan Python

+

Saat Anda ingin menyimpan data, Anda bisa menggunakan variabel. Tapi "masa hidup" variabel hanyalah selama program tersebut berjalan — data variabel dihapus saat program berhenti.

+

Bagaimana jika Anda ingin menyimpan sesuatu selama jangka yang lebih panjang, sehingga bahkan setelah Anda mematikan komputer Anda, datanya tidak terhapus? Sehingga Anda bisa mengakses lagi datanya lain hari?

+

Anda bisa menggunakan files (atau, sebagaimana sebagian orang menerjemahkannya, berkas).

+

Berbeda dengan variabel yang datanya disimpan di memori utama (main memory), files (atau berkas) berurusan dengan memori sekunder (secondary memory). Data tidak hanya bakal tetap disimpan setelah komputer dimatikan dan bisa diakses lagi setelah komputer kembali dinyalakan, tetapi juga bisa disalin ke USB dan dipindahkan ke komputer lain.

+

Text files

+

File ada berbagai jenis, contohnya file biner (binary file), tapi tutorial ini bakal membicarakan file berisi teks (text files).

+

Jika sebuah string terdiri dari rentetan karakter, maka sebuah text file terdiri dari rentetan baris (line). Baris-baris tersebut dipisahkan oleh sebuah special character, \n, yang disebut newline.

+

Jika Anda menge-print sebuah variabel string yang mengandung karakter newline \n, Python bakal menginterpretasikan karakter tersebut sebagai sebuah perintah untuk menge-print sisa string setelahnya di baris baru.

+

Sebagai contoh, print('Selamat\npagi') bakal menghasilkan output:

+
Selamat
+pagi
+
+

Sedangkan print('selam\nat pagi') bakal menghasilkan:

+
selam
+at pagi
+
+

Membuka file

+

Untuk membuka sebuah file, perintah bisa diberikan agar Python berkomunikasi dengan sistem operasi komputer dan meminta filenya.

+

Dalam contoh berikut, file helloworld.txt berada di folder yang sama dengan program Python tersebut.

+

fread = open('helloworld.txt')

+

Sistem operasi bakal kemudian mencari file yang dimaksud menurut alamat file yang telah diberikan, yaitu helloworld.txt.

+

Jika file-nya ada dan Anda memiliki izin (permission) untuk membuka file tersebut, maka sistem komputer bakal mengembalikan apa yang namanya adalah sebuah file handle, yang dalam contoh di atas disimpan di dalam variabel fread.

+

Jika file yang diminta tidak ada, akan terjadi error.

+
Traceback (most recent call last):
+  File "<stdin>", line 1, in <module>
+IOError: [Errno 2] No such file or directory: 'tidakada.txt'
+
+

Karena open() tidak membaca langsung seluruh file, open() selalu memerlukan waktu yang sama tidak peduli besar file yang dibuka.

+

Menggunakan input(), Anda bisa memberikan pengguna program kemampuan untuk memasukkan nama file sendiri.

+
fname = input('File yang ingin dibuka: ')
+fread = open(fname)
+
+

Tapi bagaimana jika pengguna meminta file yang tidak ada?

+
Traceback (most recent call last):
+  File "q.py", line 2, in <module>
+    fread = open(fname)
+FileNotFoundError: [Errno 2] No such file or directory: 'aa'
+
+

Anda bisa menggunakan exception agar program tidak langsung error dan berhenti saat pengguna memasukkan input tidak valid.

+
fname = input('File yang ingin dibuka: ')
+try:
+    fread = open(fname)
+except:
+    print('File yang diminta tidak ada.')
+
+

Membaca file yang sudah ada

+

File handle tidak berisi data file. Jika Anda menjalankan print(fread), Anda bakal mendapatkan <open file 'helloworld.txt', mode 'r' at 0x7f20c47dd540> atau variasinya sebagai output.

+

Tapi Anda bisa menggunakannya untuk membaca file baris demi baris dengan bantuan loop for.

+

Sebagai contoh, program di bawah ini menghitung jumlah baris (termasuk baris kosong) yang ada di dalam file chairil-anwar-aku.txt.

+
fread = open('chairil-anwar-aku.txt')
+
+count = 0
+for line in fread:
+    count += 1
+
+print(count)
+
+

Outputnya adalah 19.

+

Anda bisa mengecek isi tiap baris dengan memperlakukan line sebagai sebuah variabel berisi string yang memiliki sebuah karakter \n di ujung belakangnya.

+

Program di atas bisa dimodifikasi sehingga yang dihitung hanyalah baris yang tidak kosong (.strip() menghapus semua karakter spasi dan \n di kiri-kanan string):

+
fread = open('chairil-anwar-aku.txt')
+
+count = 0
+for line in fread:
+    if len(line.strip()) > 0 :
+        count += 1
+
+print(count)
+
+

Outputnya adalah 13.

+

Membuat dan menulis file baru

+

Untuk membuat sebuah file, gunakan open(), tapi kali ini dengan dengan 'w' sebagai parameter kedua.

+

fwrite = open('filebaru.txt', 'w')

+

Jika file tersebut belum ada, maka bakal dibuat sebuah file baru. Jika sudah ada, maka file yang lama bakal dihapus.

+

Metode .write() menambahkan data ke ujung akhir file.

+

fwrite.write('Baris baru!\n')

+

Sebagai contoh, program berikut bakal menghasilkan file output-angka-segitiga.txt.

+
fwrite = open('output-angka-segitiga.txt', 'w')
+
+n = 1
+for i in range(2, 50):
+    n += i
+    fwrite.write(str(n) + '\n')
+
+fwrite.close()
+
+

Pastikan untuk menambahkan .close() ke akhir setelah selesai menulis ke file.

+

File sebagai input/output

+

File sangat membantu jika Anda mesti berurusan dengan data input atau output dalam jumlah yang banyak dan repot jika mesti di-input() atau di-print() satu-persatu.

+

Sebagai contoh terakhir, program berikut menghasilkan output_daftar-provinsi.txt jika diberikan input daftar-provinsi.txt.

+
while True:
+    fname = input('Nama file input: ')
+
+    try:
+        fread = open(fname)
+        break
+    except:
+        print('Tidak dapat menemukan file yang dimaksud, tolong cek lagi.\nNama file input: ')
+
+nama = []
+for line in fread:
+    nama.append(line.strip())
+
+nama = sorted(nama)
+
+fwrite = open('output_' + fname, 'w')
+
+for item in nama:
+    fwrite.write(item + '\n')
+
+fwrite.close()
+
+
+
+

penulis: Emmanuella Rumanti https://github.com/amuritna

+
+
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/2020/10/source-untuk-belajar-python/index.html b/2020/10/source-untuk-belajar-python/index.html new file mode 100644 index 00000000..a1d12372 --- /dev/null +++ b/2020/10/source-untuk-belajar-python/index.html @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Source untuk belajar python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ +
+ + + + +
+

Source untuk belajar python

+

Python menjadi salah satu bahasa pemrograman yang paling diminati saat ini. seperti dilansir dari situs The Redmonk python menduduki peringkat kedua setelah javascript. Karena banyaknya pengguna bahasa python, mungkin ini yang membuat developer python lebih semangat untuk meningkatkan performa bahasa python. Supaya tidak ketinggalan tren python mau tidak mau ya kita harus terus belajar, maka dari itu di artikel ini saya ingin mencoba berbagi beberapa referensi sumber yang saya gunakan untuk belajar bahasa python. Ps: kalian bisa menambahkan sumber lain yang kalian punya ke artikel ini. +Redmon rank

+
+

1. realpython.com

+

realpython.com adalah situs belajar pemrograman python berbahasa Inggris. Di situs ini kamu bisa mengikuti tutorial untuk project-project kecil, kamu bisa baca artikel tentang bahasa pemrograman, kamu juga bisa subscribe email realpython jika kamu ingin dikirimi email berita terbaru tentang bahasa pemrograman python. Ada juga video kursus nya sehingga kamu bisa belajar python step-by-step. Lalu ada Kuis dimana kamu bisa mengecek progress skill python kamu. Dan yang paling bagus menurutku adalah fitur learning path di situs ini, jadi kamu bisa fokus belajar ke bidang keahlian yang ingin kamu tekuni misalkan kamu ingin menjadi python web developer atau data scientist. realpython.com

+

2. belajarpython.com

+

kalau tadi sudah yang berbahasa Inggris, kayaknya kita juga harus memiliki sumber referensi belajar yang menggunakan bahasa sehari-hari kita sendiri. Salah satunya adalah situs dimana artikel ini dibuat yaitu belajarpython.com. Di situs ini kamu bisa belajar dengan mengikuti tutorial yang sudah dibuat hasil dari kontribusi para kontributor (situs ini open source) dan membaca artikel tentang python, yang pasti itu semua ditulis dengan bahasa Indonesia jadi jangan takut untuk belajar pemrogaman karena merasa tidak bisa bahasa Inggris. belajarpython.com

+
+

mungkin baru sedikit sumber yang bisa saya berikan karena situs ini yang sudah saya coba langsung. Jika teman-teman memiliki sumber lain silahkan masukkan ke artikel ini. Mari kita saling berbagi!.

+
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/2021/10/cara-mempersing-api/index.html b/2021/10/cara-mempersing-api/index.html new file mode 100644 index 00000000..4052e775 --- /dev/null +++ b/2021/10/cara-mempersing-api/index.html @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Memparsing api dengan method GET - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ +
+ + + + +
+

Memparsing api dengan method GET

+
+

Assalamualaikum wr.wb
+Terimakasih untuk belajarpython.com untuk bisa berbagi ilmu untuk seluruh insan yang mau belajar bahasa python ini, +Ke hadiran saya ini ingin mengeshare cara memparsing data api...

+

step

+

Melakukan install 'requests' terlebih dahulu di terminal anda.

+
+

$ pip install requests
+Setelah sudah melakukan insta requests, mari kita mainkan apinya hehe, +semisal kita ingin memparsing data api dnslookup.
+import requests
+Url = 'https://api.hackertarget.com/dnslookup/?q={www.site.com}'
+req = requests.get(Url).text
+for x in req:
+ print (x)

+
+

Gimana mudah kan?, sekian dan terimakasih semoga admin di limpahkan rezekinya.
+Jika ada kesalahan kata mohon maaf wassalamualaikum wr.wb
+- penulis agung

+
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/2022/12/tutorial-membuat-bot-telegram-dengan-python/index.html b/2022/12/tutorial-membuat-bot-telegram-dengan-python/index.html new file mode 100644 index 00000000..084f8db1 --- /dev/null +++ b/2022/12/tutorial-membuat-bot-telegram-dengan-python/index.html @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tutorial membuat bot telegram dengan python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ +
+ + + + +
+

Tutorial membuat bot telegram dengan python

+

Telegram adalah aplikasi yang sangat populer. Salah satu keunggulan telegram dibanding aplikasi messenger lain adalah fitur bot. Disini akan dijelaskan cara membuat bot di telegram. Tapi sebelum kita mulai membuat bot, pastikan Anda sudah mengetahui beberapa requirement dibawah ini : +- Pengetahuan dasar pemrograman Python +- Akun telegram

+

Pada tutorial ini kita akan membuat bot dari sangat awal, mengetahui lebih jauh tentang setup untuk memaksimalkan semua kekuatan dari Bot API dan membuat 'real-world application'

+

Code/Project

+

Semua snipet kode dan project terkait tutorial ini bisa anda temukan di repository ini project

+

Apa itu Bot Telegram?

+ +

Setup Bot Telegram

+
    +
  1. Buka telegram, kemudian cari 'BotFather'
  2. +
  3. Kirim perintah /start untuk mulai menghubungkan akun Anda
  4. +
  5. Kirim perintah /help untuk menampilkan daftar bantuan yang tersedia
  6. +
  7. Kirim perintah /newbot dan ikuti langkah selanjutnya
  8. +
  9. Kirim perintah /mybots untuk menampilkan semua bot anda dan memilihnya
  10. +
  11. Klik pada API Token
  12. +
+
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/2023/01/Apa-Beda-Database-SQL-dengan-Postgree/index.html b/2023/01/Apa-Beda-Database-SQL-dengan-Postgree/index.html new file mode 100644 index 00000000..64dd291c --- /dev/null +++ b/2023/01/Apa-Beda-Database-SQL-dengan-Postgree/index.html @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Apa Beda Database SQL dengan Postgree? - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ +
+ + + + +
+

Apa Beda Database SQL dengan Postgree?

+

illustration-mysql-vs-postgres +
+Bagi seorang web developer mungkin sudah tidak asing dengan perbedaan database SQL dengan Postgree, akan tetapi untuk orang awam keduanya merupakan sama-sama alat manajemen basis data yang akan sangat membantu dalam mengelola data-data secara benar dan efisien.

+

Sebenarnya ada banyak pilihan sistem database yang bisa digunakan di layanan web hosting murah seperti DomaiNesia, akan tetapi database SQL dan postgree merupakan yang paling populer dan banyak digunakan oleh para web developer untuk membantu pekerjaan mereka supaya menjadi lebih mudah dan praktis.

+

Pada kesempatan kali ini kami akan bahas tentang perbedaan database SQL dengan Postgree. Namun, sebelum itu kita akan bahas dulu apa itu database SQL dan postgree dan apa saja kelebihan dari masing-masing database tersebut.

+

Apa itu MySQL?

+

MySQL atau SQL merupakan sebuah relasional database manajemen sistem yang banyak digunakan oleh perusahaan-perusahaan besar seperti Spotify, YouTube dan bahkan Facebook. Sistem database ini mulai dikembangkan pada tahun 1994 dan mengalami perkembangan yang cukup pesat sehingga menjadi database yang tingkat skalabilitasnya sangat tinggi.

+

SQL adalah database yang bisa digunakan untuk berbagai jenis sistem operasi seperti Linux, Windows atau Mac OS. Berikut adalah kelebihan dari database SQL:

+

1.Bersifat Open Source

+

Kelebihan pertama dari SQL yaitu memiliki sifat open source sehingga penggunanya cukup terbuka untuk siapapun, begitu pula dengan pengembangannya. Meskipun sebenarnya sistem database ini berada di bawah kepemilikan Oracle akan tetapi sifatnya bebas digunakan. Jadi kamu tidak perlu membayar biaya apapun untuk memanfaatkan SQL.

+

2.Mudah Digunakan

+

Kelebihan yang kedua yaitu mudah digunakan karena arsitektur database SQL cukup sederhana dan compact. Kamu bahkan bisa mempelajari SDL hanya dengan memahami command lines dasarnya.

+

3.Sifatnya Portable

+

SQL dapat digunakan untuk berbagai jenis sistem operasi baik itu Windows, Linux sampai dengan Mac OS sehingga bagi kamu yang ingin mengembangkan aplikasi web dengan target berbagai macam platform maka SQL sangat direkomendasikan.

+

Apa itu Postgree?

+

Sebelum mengetahui perbedaan database SQL dengan postgree tidak ada salahnya juga kamu mempelajari terlebih dahulu apa itu postgree dan apa saja kelebihan yang dimilikinya sehingga banyak orang yang menggunakannya.

+

Postgree sendiri merupakan sebuah manajemen database relasional yang berbasis open source dan memanfaatkan SQL sebagai bahasa query yang utama. Postgree memiliki pengguna lebih dari 5000 perusahaan termasuk Netflix, Redit dan Instagram. Berikut ini adalah kelebihan postgree:

+

1.Murah

+

Kelebihan postgree yang pertama yaitu tidak terkait dengan lisensi apapun sehingga sistem database ini memiliki sifat open source. Hal itu berarti kamu bisa mengakses kode-kode postgree dengan mudah untuk kepentingan bisnismu. Karena bersifat open source membuat postgree cukup terjangkau dari segi harga karena tidak ada lisensi yang perlu dibayarkan.

+

2.Dukungan Komunitas

+

Postgree didukung oleh komunitas yang cukup besar dan mendukung sehingga kamu tidak perlu khawatir apabila menemui kesulitan saat menggunakannya. Komunitas memiliki kontribusi cukup besar terhadap perkembangan postgree sehingga sejak tahun 90an postgree terus digunakan dari waktu ke waktu.

+

3.Ekstensibilitas

+

Postgree memiliki fungsi atau kapabilitas tambahan sehingga arsitekturnya bisa diperluas. Saat kamu menginginkan fungsi tambahan, maka sistem postgree mampu mewujudkan hal itu sebagai langkah untuk menyesuaikan prosedur di database.

+

Perbedaan Database SQL dengan Postgree

+

Setelah membahas pengertian dari masing-masing database beserta dengan kelebihan-kelebihan yang dimilikinya, saatnya kita bahas mengenai perbedaan SQL dan postgree.

+

1.Fitur MVCC

+

Perbedaan database SQL dengan Postgree bisa dilihat dari segi konkurensi. Postgree jauh lebih unggul di bidang konkurensi jika dibandingkan dengan SQL. Hal ini disebabkan karena postgree didukung oleh fitur MVCC atau multiversion concurrency control sehingga memungkinkan banyak orang sekaligus untuk melakukan interaksi dan juga mengakses database dalam waktu bersamaan. Hal itu membuat kinerja postgree menjadi jauh lebih efisien. +Kapasitas

+

Perbedaan database SQL dengan Postgree bisa dilihat dari segi kapasitas. Untuk segi kapasitas postgree jauh lebih unggul daripada SQL. Hal ini disebabkan karena postgree memang dirancang secara khusus untuk pengelolaan database berukuran besar. Postgree dapat mengelola data dengan jumlah sekitar 4 petabytes yang setara dengan 4000 TB.

+

2.Performa

+

Untuk segi performa SQL jauh lebih unggul karena dipengaruhi oleh tingkat kecepatan yang jauh lebih baik dibanding dengan postgree. Tentu sebagai pengguna kamu akan jauh lebih menyukai database yang memiliki performa bagus, terutama untuk segi kecepatan. Dengan menggunakan SQL maka pengelolaan proses input dan akses data jauh terasa lebih cepat.

+

Baik SQL maupun postgree, keduanya merupakan alat manajemen berbasis data yang akan sangat membantu pekerjaan kamu. Akan tetapi jika melihat perbedaan database SQL dengan Postgree pasti jauh lebih unggul postgree. Postgree merupakan versi terbaru dari SQL sehingga memiliki banyak fitur tambahan dan bisa diakses secara gratis. Postgree juga bisa dimanfaatkan menggunakan sistem operasi apapun.

+

+
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 00000000..73894c68 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +belajarpython.com diff --git a/about/index.html b/about/index.html new file mode 100644 index 00000000..a40ce375 --- /dev/null +++ b/about/index.html @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + About - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ +
+ + + + +
+

About

+
+

+
+ +
+

Belajarpython · GitHub license PRs Welcome Open Source Helpers

+

Belajarpython adalah situs kolaboratif tutorial pemrograman Python bahasa Indonesia

+ +

Kontribusi

+

Belajarpython adalah situs terbuka (open source) yang dikembangkan oleh developer untuk developer. Semua orang baik dari kalangan :trollface: developer, :man: mahasiswa, :older_woman: pengajar, bahkan :baby: anak kecil yang baru mempelajari bahasa pemrograman python bisa ikut memberikan :heart: kontribusinya disini

+

Code of Conduct

+

Belajarpython telah mengadopsi Kode Etik yang kami harapkan akan diikuti oleh peserta proyek terbuka ini. Mohon baca full text so that you can understand what actions will and will not be tolerated.

+

Panduan Kontribusi

+

Baca panduan kontribusi dari kami untuk mempelajari tentang proses pengembangan konten disini.

+

Good First Issues

+

Untuk membantu Anda membuat kaki Anda basah dan membuat Anda terbiasa dengan proses kontribusi kami, kami memiliki daftar good first issues yang mengandung bug yang memiliki lingkup yang relatif terbatas. Ini adalah tempat yang bagus untuk memulai.

+

License

+

Belajarpython is MIT licensed.

+
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/ads.txt b/ads.txt new file mode 100644 index 00000000..0869d026 --- /dev/null +++ b/ads.txt @@ -0,0 +1 @@ +google.com, pub-2371526032008656, DIRECT, f08c47fec0942fa0 \ No newline at end of file diff --git a/article/index.html b/article/index.html new file mode 100644 index 00000000..75cb3069 --- /dev/null +++ b/article/index.html @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Article - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ +
+ + + + +
+

Article

+ + + + +
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/artikel/index.html b/artikel/index.html new file mode 100644 index 00000000..9b9eff98 --- /dev/null +++ b/artikel/index.html @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Artikel - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ +
+ + + + +
+

Artikel

+
+
+ {% for post in site.posts %} +
+
+ +
+
+
{{ post.category | upcase }}
+

{{ post.title }}

+
+
+
+
+
+ {% endfor %} +
+
+
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/contribute/index.html b/contribute/index.html new file mode 100644 index 00000000..0ade3cd9 --- /dev/null +++ b/contribute/index.html @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Kontribusi di Belajarpython - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ +
+ + + + +
+

Kontribusi di Belajarpython

+

Sebelumnya, terimakasih banyak karena telah meluangkan waktu Anda untuk ikut berkontribusi!

+

Belajarpython adalah situs terbuka (open source) yang dikembangkan oleh developer untuk developer. Semua orang baik dari kalangan :trollface: developer, :man: mahasiswa, :older_woman: pengajar, bahkan :baby: anak kecil yang baru mempelajari bahasa pemrograman python bisa ikut memberikan :heart: kontribusinya di sini.

+

Di bawah ini adalah panduan untuk berkontribusi di Belajarpython, di mana website-nya sendiri dikelola oleh Developer Belajarpython di github. Yang akan disampaikan di bawah ini bukanlah peraturan, melainkan panduan (guidelines). Gunakan penilaian terbaik Anda, dan jangan ragu untuk mengajukan perubahan pada setiap dokumen dalam permintaan penarikan (pull request).

+

Table Of Contents

+

Code of Conduct

+

Apa yang harus saya ketahui sebelum saya mulai berkontribusi? + * Tutorial + * Artikel

+

Bagaimana cara berkontribusi? + * Meyempurnakan Tutorial + * Menulis Artikel + * Melaporkan Bugs

+
+

Code of Conduct

+

Proyek ini dan semua orang yang berpartisipasi di dalamnya diatur oleh Code of Conduct Belajarpython. Dengan berpartisipasi, Anda diharapkan untuk menjunjung nilai ini. Tolong laporkan perilaku yang tidak dapat diterima ke master@belajarpython.com.

+

Apa yang harus saya ketahui sebelum saya mulai berkontribusi?

+

Belajarpython adalah situs terbuka sederhana untuk mempelajari bahasa pemrograman python, untuk saat ini situs terdiri dari dua bagian dasar, yaitu Tutorial dan Artikel. Setiap konten dari masing-masing bagian tersebut bebas untuk dimodifikasi oleh semua orang.

+

Konten artikel dan tutorial dapat diakses melalui menu navigasi di bagian kanan atas pada setiap halaman.

+

edit-tutorial

+

Tutorial

+

Pada bagian tutorial menjelaskan tentang bagaimana cara memulai belajar bahasa pemrograman python untuk pemula, mulai dari bagian pengenalan, instalasi, dasar-dasar sampai ke bagian pembuatan website sederhana dengan menggunakan python.

+

edit-tutorial

+

Artikel

+

Pada bagian artikel, dibahas semua hal tentang tips trik, tutorial penggunaan python untuk membuat berbagai aplikasi, berita tentang python dan hal-hal menarik lainya tentang bahasa pemrograman python. Setiap artikel/posting dibuat oleh satu orang dan bisa diperbaiki (improve) oleh semua orang.

+

edit-tutorial

+

Bagaimana cara berkontribusi

+

Untuk mulai berkontribusi di belajarpython Anda harus menggunakan akun Github. Jika anda belum mempunyai akun Github, silahkan untuk membuatnya terlebih dahulu.

+

Menyempurnakan Tutorial

+

Setiap tutorial yang ada di website belajarpython belum sepenuhnya mudah dipahami oleh setiap pembaca. Anda bisa menyempurnakan setiap tutorial. +1. Klik link Edit tutorial ini yang berada di bagian bawah setiap tutorial.

+

edit-tutorial

+
    +
  1. +

    Klik tombol hijau Fork this repository and propose changes +edit-tutorial

    +
  2. +
  3. +

    Edit bagian tutorial yang ingin anda sempurnakan. Jika sudah Klik tombol hijai Propose file change +edit-tutorial

    +
  4. +
  5. +

    Berikan keterangan perubahan file dan Klik tombol Create pull request +edit-tutorial

    +
  6. +
  7. +

    Klik Create pull request +edit-tutorial

    +
  8. +
+ +

Setiap orang bisa menulis artikel apapun yang berhubungan dengan bahasa pemrograman python. Setiap artikel yang Anda sumbangkan akan sangat berguna bagi orang lain yang ingin mempelajari bahasa pemrograman python. +1. Masuk ke repositori Belajarpython di github, klik folder _posts, klik tombol Create new file atau klik link ini https://github.com/belajarpythoncom/belajarpython.com/new/master/_posts

+

tulis-artikel

+
    +
  1. +

    Tuliskan nama file dengan format tahun-bulan-tanggal-judul.md +tulis-artikel

    +
  2. +
  3. +

    Tulis artikel dengan template di bawah ini.

    +
  4. +
+
---
+layout: article
+title: Tulis judul artikel di sini
+date:   2018-05-09 16:16:01 -0600
+categories: tulis kategori di sini
+---
+
+---
+Tulis konten artikel di sini...
+
+
+
    +
  1. Klik tombol Propose new file
  2. +
+

tulis-artikel

+
    +
  1. Klik tombol Create pull request
  2. +
+

tulis-artikel

+

Melaporkan Bugs

+

Anda bisa melaporkan bug dan masalah website Belajarpython di Issue github.

+

Jika ada pertanyaan terkait 'Kontribusi di Belajarpython' Silahkan kirim email ke purwanto1337@gmail.com

+
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/css/base.css b/css/base.css new file mode 100644 index 00000000..756e9df6 --- /dev/null +++ b/css/base.css @@ -0,0 +1 @@ +/*! tailwindcss v3.2.4 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.absolute{position:absolute}.order-2{order:2}.order-1{order:1}.mx-auto{margin-left:auto;margin-right:auto}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-7{margin-bottom:1.75rem}.mb-2{margin-bottom:.5rem}.mb-14{margin-bottom:3.5rem}.mb-10{margin-bottom:2.5rem}.ml-2{margin-left:.5rem}.mr-5{margin-right:1.25rem}.-mt-0\.5{margin-top:-.125rem}.-mt-0{margin-top:0}.mt-8{margin-top:2rem}.mr-1{margin-right:.25rem}.ml-1{margin-left:.25rem}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-\[300px\]{height:300px}.h-28{height:7rem}.h-6{height:1.5rem}.h-16{height:4rem}.h-10{height:2.5rem}.h-9{height:2.25rem}.h-4{height:1rem}.h-12{height:3rem}.h-5{height:1.25rem}.w-full{width:100%}.w-2\/3{width:66.666667%}.w-6{width:1.5rem}.w-5{width:1.25rem}.max-w-4xl{max-width:56rem}.max-w-7xl{max-width:80rem}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-5{gap:1.25rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.overflow-x-hidden{overflow-x:hidden}.rounded-full{border-radius:9999px}.rounded{border-radius:.25rem}.border{border-width:1px}.border-l-2{border-left-width:2px}.border-primary-500{--tw-border-opacity:1;border-color:rgb(42 88 128/var(--tw-border-opacity))}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.bg-primary-500{--tw-bg-opacity:1;background-color:rgb(42 88 128/var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity))}.bg-opacity-20{--tw-bg-opacity:0.2}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.bg-gradient-to-l{background-image:linear-gradient(to left,var(--tw-gradient-stops))}.from-primary-500{--tw-gradient-from:#2a5880;--tw-gradient-to:#2a588000;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-secondary-500{--tw-gradient-from:#fdd03f;--tw-gradient-to:#fdd03f00;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-yellow-500{--tw-gradient-from:#eab308;--tw-gradient-to:#eab30800;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-primary-800{--tw-gradient-to:#1c3a55}.to-secondary-400{--tw-gradient-to:#ffdf76}.to-yellow-400{--tw-gradient-to:#facc15}.p-2{padding:.5rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.px-4{padding-left:1rem;padding-right:1rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-12{padding-top:3rem;padding-bottom:3rem}.px-7{padding-left:1.75rem;padding-right:1.75rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.px-8{padding-left:2rem;padding-right:2rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-0{padding-top:0;padding-bottom:0}.pb-10{padding-bottom:2.5rem}.pt-10{padding-top:2.5rem}.pt-1\.5{padding-top:.375rem}.pb-2\.5{padding-bottom:.625rem}.pt-1{padding-top:.25rem}.pb-2{padding-bottom:.5rem}.pt-3{padding-top:.75rem}.text-left{text-align:left}.text-center{text-align:center}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-base{font-size:1rem;line-height:1.5rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-bold{font-weight:700}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.text-primary-500{--tw-text-opacity:1;color:rgb(42 88 128/var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.text-secondary-500{--tw-text-opacity:1;color:rgb(253 208 63/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-primary-800{--tw-text-opacity:1;color:rgb(28 58 85/var(--tw-text-opacity))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.text-primary-300{--tw-text-opacity:1;color:rgb(55 118 171/var(--tw-text-opacity))}.text-opacity-80{--tw-text-opacity:0.8}.text-opacity-70{--tw-text-opacity:0.7}.shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a;--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}main blockquote{border-left:4px solid #e8e8e8;padding-left:15px;color:#e2b215;font-size:18px;letter-spacing:-1px;font-style:italic}main hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid #0000001a}main p{margin-top:0;margin-bottom:1.3rem}main .tutorial a,main a{color:#007be4}main .tutorial a:hover,main a{text-decoration:underline}main .tutorial a:hover{color:#e2b215}main pre{width:92vw;overflow-x:scroll}@media only screen and (min-width:768px){main pre{width:100%}}main code{margin-bottom:15px;background-color:#eee;padding:2.5px 3px;font-size:14px;border:1px solid #e0e0e0;border-radius:3px;overflow-x:scroll}main h1{font-size:3rem;font-weight:600}main h2{font-size:2.2rem;font-weight:600;margin-top:24px}main h3{font-size:1.7rem;font-weight:600;margin-top:23px}main h4{font-size:1.4rem;font-weight:600;margin-top:22px}main h5{font-size:1.2rem;font-weight:600;margin-top:21px}main h6{font-size:1rem;font-weight:600;margin-top:20px}main ol{list-style:number}main ol,main ul{padding-left:30px;margin-bottom:1.3rem}main ul{list-style:square}main table{border-collapse:collapse;width:100%}main table td,main table th{border:1px solid #ddd;padding:10px}main table tr:nth-child(2n){background-color:#f2f2f2}main table tr:hover{background-color:#dfe6ed}main table th{padding-top:12px;padding-bottom:12px;text-align:left;background-color:#c4d4e3;color:#000}main kbd{padding:.15rem .35rem;font-size:87.5%;color:#fff;margin:0 2px;background-color:#212529;border-radius:.2rem}.hover\:text-primary-500:hover{--tw-text-opacity:1;color:rgb(42 88 128/var(--tw-text-opacity))}.hover\:text-primary-300:hover{--tw-text-opacity:1;color:rgb(55 118 171/var(--tw-text-opacity))}.hover\:text-black:hover{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.hover\:text-opacity-100:hover{--tw-text-opacity:1}.hover\:no-underline:hover{text-decoration-line:none}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.active\:shadow:active,.hover\:shadow:hover{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}@media (min-width:640px){.sm\:text-base{font-size:1rem;line-height:1.5rem}}@media (min-width:768px){.md\:order-1{order:1}.md\:order-2{order:2}.md\:mb-6{margin-bottom:1.5rem}.md\:mb-8{margin-bottom:2rem}.md\:mb-0{margin-bottom:0}.md\:block{display:block}.md\:flex{display:flex}.md\:h-\[650px\]{height:650px}.md\:h-full{height:100%}.md\:w-9\/12{width:75%}.md\:w-1\/2{width:50%}.md\:w-full{width:100%}.md\:w-3\/12{width:25%}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:justify-end{justify-content:flex-end}.md\:justify-between{justify-content:space-between}.md\:gap-6{gap:1.5rem}.md\:p-10{padding:2.5rem}.md\:px-10{padding-left:2.5rem;padding-right:2.5rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:px-4{padding-left:1rem;padding-right:1rem}.md\:py-24{padding-top:6rem;padding-bottom:6rem}.md\:py-2{padding-top:.5rem;padding-bottom:.5rem}.md\:px-0{padding-left:0;padding-right:0}.md\:pt-32{padding-top:8rem}.md\:pt-2{padding-top:.5rem}.md\:pb-3{padding-bottom:.75rem}.md\:text-left{text-align:left}.md\:text-5xl{font-size:3rem;line-height:1}.md\:text-base{font-size:1rem;line-height:1.5rem}.md\:text-2xl{font-size:1.5rem;line-height:2rem}} \ No newline at end of file diff --git a/img/404.jpg b/img/404.jpg new file mode 100644 index 00000000..166a17ef Binary files /dev/null and b/img/404.jpg differ diff --git a/img/729px-Python_logo_and_wordmark.svg.png b/img/729px-Python_logo_and_wordmark.svg.png new file mode 100644 index 00000000..ebe06628 Binary files /dev/null and b/img/729px-Python_logo_and_wordmark.svg.png differ diff --git a/img/Mockup-Website.png b/img/Mockup-Website.png new file mode 100644 index 00000000..23314d7c Binary files /dev/null and b/img/Mockup-Website.png differ diff --git a/img/Screenshot_edit-tutorial-step-3.jpg b/img/Screenshot_edit-tutorial-step-3.jpg new file mode 100644 index 00000000..2d92587f Binary files /dev/null and b/img/Screenshot_edit-tutorial-step-3.jpg differ diff --git a/img/artikel-belajarpython.png b/img/artikel-belajarpython.png new file mode 100644 index 00000000..98b2c68b Binary files /dev/null and b/img/artikel-belajarpython.png differ diff --git a/img/belajarpython.png b/img/belajarpython.png new file mode 100644 index 00000000..870c5508 Binary files /dev/null and b/img/belajarpython.png differ diff --git a/img/companies-using-python.png b/img/companies-using-python.png new file mode 100644 index 00000000..9c004103 Binary files /dev/null and b/img/companies-using-python.png differ diff --git a/img/config.png b/img/config.png new file mode 100644 index 00000000..bdaa9c2f Binary files /dev/null and b/img/config.png differ diff --git a/img/edit-tutorial-step-1.jpg b/img/edit-tutorial-step-1.jpg new file mode 100644 index 00000000..3996cb20 Binary files /dev/null and b/img/edit-tutorial-step-1.jpg differ diff --git a/img/edit-tutorial-step-2.jpg b/img/edit-tutorial-step-2.jpg new file mode 100644 index 00000000..5b1898f7 Binary files /dev/null and b/img/edit-tutorial-step-2.jpg differ diff --git a/img/edit-tutorial-step-4.jpg b/img/edit-tutorial-step-4.jpg new file mode 100644 index 00000000..e309e8a1 Binary files /dev/null and b/img/edit-tutorial-step-4.jpg differ diff --git a/img/edit-tutorial-step-5.jpg b/img/edit-tutorial-step-5.jpg new file mode 100644 index 00000000..c3f52439 Binary files /dev/null and b/img/edit-tutorial-step-5.jpg differ diff --git a/img/favicon.png b/img/favicon.png new file mode 100644 index 00000000..572f1e03 Binary files /dev/null and b/img/favicon.png differ diff --git a/img/first-post.png b/img/first-post.png new file mode 100644 index 00000000..e6edcc18 Binary files /dev/null and b/img/first-post.png differ diff --git a/img/forum-belajarpython.png b/img/forum-belajarpython.png new file mode 100644 index 00000000..5e6070c2 Binary files /dev/null and b/img/forum-belajarpython.png differ diff --git a/img/icon-github.svg b/img/icon-github.svg new file mode 100644 index 00000000..a2426a9a --- /dev/null +++ b/img/icon-github.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/jekyll-logo.png b/img/jekyll-logo.png new file mode 100644 index 00000000..66c09a62 Binary files /dev/null and b/img/jekyll-logo.png differ diff --git a/img/jekyll-now-theme-screenshot.jpg b/img/jekyll-now-theme-screenshot.jpg new file mode 100644 index 00000000..fa73e716 Binary files /dev/null and b/img/jekyll-now-theme-screenshot.jpg differ diff --git a/img/kontribusi-pengenalan-1.jpg b/img/kontribusi-pengenalan-1.jpg new file mode 100644 index 00000000..3a045e39 Binary files /dev/null and b/img/kontribusi-pengenalan-1.jpg differ diff --git a/img/kontribusi-pengenalan-2.jpg b/img/kontribusi-pengenalan-2.jpg new file mode 100644 index 00000000..304ae16a Binary files /dev/null and b/img/kontribusi-pengenalan-2.jpg differ diff --git a/img/kontribusi-pengenalan-3.jpg b/img/kontribusi-pengenalan-3.jpg new file mode 100644 index 00000000..f10e6da2 Binary files /dev/null and b/img/kontribusi-pengenalan-3.jpg differ diff --git a/img/logo-belajarpython-140.png b/img/logo-belajarpython-140.png new file mode 100644 index 00000000..8d64414f Binary files /dev/null and b/img/logo-belajarpython-140.png differ diff --git a/img/logo-belajarpython-for-github.png b/img/logo-belajarpython-for-github.png new file mode 100644 index 00000000..d034a1b7 Binary files /dev/null and b/img/logo-belajarpython-for-github.png differ diff --git a/img/logo-belajarpython.png b/img/logo-belajarpython.png new file mode 100644 index 00000000..03e49438 Binary files /dev/null and b/img/logo-belajarpython.png differ diff --git a/img/logo-python.png b/img/logo-python.png new file mode 100644 index 00000000..ca968940 Binary files /dev/null and b/img/logo-python.png differ diff --git a/img/menjalankan-python-windows-editor.png b/img/menjalankan-python-windows-editor.png new file mode 100644 index 00000000..cb3fa2ae Binary files /dev/null and b/img/menjalankan-python-windows-editor.png differ diff --git a/img/menjalankan-python-windows.png b/img/menjalankan-python-windows.png new file mode 100644 index 00000000..f9a33066 Binary files /dev/null and b/img/menjalankan-python-windows.png differ diff --git a/img/posts/3-library-populer-data-science.png b/img/posts/3-library-populer-data-science.png new file mode 100644 index 00000000..687d2e13 Binary files /dev/null and b/img/posts/3-library-populer-data-science.png differ diff --git a/img/posts/5-weekly-trending-sept-2018.png b/img/posts/5-weekly-trending-sept-2018.png new file mode 100644 index 00000000..35ace714 Binary files /dev/null and b/img/posts/5-weekly-trending-sept-2018.png differ diff --git a/img/posts/apa-beda-mysql-dengan-postgres-lanscape.png b/img/posts/apa-beda-mysql-dengan-postgres-lanscape.png new file mode 100644 index 00000000..f6eb967f Binary files /dev/null and b/img/posts/apa-beda-mysql-dengan-postgres-lanscape.png differ diff --git a/img/posts/apa-beda-mysql-dengan-postgres-square.png b/img/posts/apa-beda-mysql-dengan-postgres-square.png new file mode 100644 index 00000000..b166e318 Binary files /dev/null and b/img/posts/apa-beda-mysql-dengan-postgres-square.png differ diff --git a/img/posts/bahasa-pemrograman-populer.png b/img/posts/bahasa-pemrograman-populer.png new file mode 100644 index 00000000..9d2c2643 Binary files /dev/null and b/img/posts/bahasa-pemrograman-populer.png differ diff --git a/img/posts/membaca-menulis-file-python.jpg b/img/posts/membaca-menulis-file-python.jpg new file mode 100644 index 00000000..de4e4736 Binary files /dev/null and b/img/posts/membaca-menulis-file-python.jpg differ diff --git a/img/posts/python-bahasa-pemrograman-populer.png b/img/posts/python-bahasa-pemrograman-populer.png new file mode 100644 index 00000000..c9c13837 Binary files /dev/null and b/img/posts/python-bahasa-pemrograman-populer.png differ diff --git a/img/posts/sastrawi.png b/img/posts/sastrawi.png new file mode 100644 index 00000000..297c51a9 Binary files /dev/null and b/img/posts/sastrawi.png differ diff --git a/img/qr-code.png b/img/qr-code.png new file mode 100644 index 00000000..8542c114 Binary files /dev/null and b/img/qr-code.png differ diff --git a/img/realpython.png b/img/realpython.png new file mode 100644 index 00000000..20b5a71a Binary files /dev/null and b/img/realpython.png differ diff --git a/img/redmonk rank.png b/img/redmonk rank.png new file mode 100644 index 00000000..414bd5fb Binary files /dev/null and b/img/redmonk rank.png differ diff --git a/img/sastrawi.jpg b/img/sastrawi.jpg new file mode 100644 index 00000000..3b9db08d Binary files /dev/null and b/img/sastrawi.jpg differ diff --git a/img/step1.gif b/img/step1.gif new file mode 100644 index 00000000..cac69880 Binary files /dev/null and b/img/step1.gif differ diff --git a/img/tulis-artikel-step-1.jpg b/img/tulis-artikel-step-1.jpg new file mode 100644 index 00000000..e976e424 Binary files /dev/null and b/img/tulis-artikel-step-1.jpg differ diff --git a/img/tulis-artikel-step-2.jpg b/img/tulis-artikel-step-2.jpg new file mode 100644 index 00000000..3f420166 Binary files /dev/null and b/img/tulis-artikel-step-2.jpg differ diff --git a/img/tulis-artikel-step-3.jpg b/img/tulis-artikel-step-3.jpg new file mode 100644 index 00000000..21e58a17 Binary files /dev/null and b/img/tulis-artikel-step-3.jpg differ diff --git a/img/tulis-artikel-step-4.jpg b/img/tulis-artikel-step-4.jpg new file mode 100644 index 00000000..5c147d86 Binary files /dev/null and b/img/tulis-artikel-step-4.jpg differ diff --git a/img/tutorial-belajarpython.png b/img/tutorial-belajarpython.png new file mode 100644 index 00000000..33701e71 Binary files /dev/null and b/img/tutorial-belajarpython.png differ diff --git a/index.html b/index.html new file mode 100644 index 00000000..07e3334c --- /dev/null +++ b/index.html @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Home - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + + +
+
+
+ +

Mulai Belajar Python

+

Python adalah bahasa pemrograman yang memungkinkan + Anda + bekerja + lebih cepat dan mengintegrasikan sistem Anda lebih efektif.

+ Pelajari Sekarang +
+
+
+ + + + + + + +
+
+

Artikel Pilihan

+ + + Lihat Semua Artikel + + + + +
+
+ + + + + + + + + + \ No newline at end of file diff --git a/js/base.js b/js/base.js new file mode 100644 index 00000000..b0f4726b --- /dev/null +++ b/js/base.js @@ -0,0 +1,283 @@ +function getSearchTerm() { + var sPageURL = window.location.search.substring(1); + var sURLVariables = sPageURL.split('&'); + for (var i = 0; i < sURLVariables.length; i++) { + var sParameterName = sURLVariables[i].split('='); + if (sParameterName[0] == 'q') { + return sParameterName[1]; + } + } +} + +function applyTopPadding() { + // Update various absolute positions to match where the main container + // starts. This is necessary for handling multi-line nav headers, since + // that pushes the main container down. + var offset = $('body > .container').offset(); + $('html').css('scroll-padding-top', offset.top + 'px'); + $('.bs-sidebar.affix').css('top', offset.top + 'px'); +} + +$(document).ready(function() { + + applyTopPadding(); + + var search_term = getSearchTerm(), + $search_modal = $('#mkdocs_search_modal'), + $keyboard_modal = $('#mkdocs_keyboard_modal'); + + if (search_term) { + $search_modal.modal(); + } + + // make sure search input gets autofocus every time modal opens. + $search_modal.on('shown.bs.modal', function() { + $search_modal.find('#mkdocs-search-query').focus(); + }); + + // Close search modal when result is selected + // The links get added later so listen to parent + $('#mkdocs-search-results').click(function(e) { + if ($(e.target).is('a')) { + $search_modal.modal('hide'); + } + }); + + // Populate keyboard modal with proper Keys + $keyboard_modal.find('.help.shortcut kbd')[0].innerHTML = keyCodes[shortcuts.help]; + $keyboard_modal.find('.prev.shortcut kbd')[0].innerHTML = keyCodes[shortcuts.previous]; + $keyboard_modal.find('.next.shortcut kbd')[0].innerHTML = keyCodes[shortcuts.next]; + $keyboard_modal.find('.search.shortcut kbd')[0].innerHTML = keyCodes[shortcuts.search]; + + // Keyboard navigation + document.addEventListener("keydown", function(e) { + if ($(e.target).is(':input')) return true; + var key = e.which || e.keyCode || window.event && window.event.keyCode; + var page; + switch (key) { + case shortcuts.next: + page = $('.navbar a[rel="next"]:first').prop('href'); + break; + case shortcuts.previous: + page = $('.navbar a[rel="prev"]:first').prop('href'); + break; + case shortcuts.search: + e.preventDefault(); + $keyboard_modal.modal('hide'); + $search_modal.modal('show'); + $search_modal.find('#mkdocs-search-query').focus(); + break; + case shortcuts.help: + $search_modal.modal('hide'); + $keyboard_modal.modal('show'); + break; + default: break; + } + if (page) { + $keyboard_modal.modal('hide'); + window.location.href = page; + } + }); + + $('table').addClass('table table-striped table-hover'); + + // Improve the scrollspy behaviour when users click on a TOC item. + $(".bs-sidenav a").on("click", function() { + var clicked = this; + setTimeout(function() { + var active = $('.nav li.active a'); + active = active[active.length - 1]; + if (clicked !== active) { + $(active).parent().removeClass("active"); + $(clicked).parent().addClass("active"); + } + }, 50); + }); + + function showInnerDropdown(item) { + var popup = $(item).next('.dropdown-menu'); + popup.addClass('show'); + $(item).addClass('open'); + + // First, close any sibling dropdowns. + var container = $(item).parent().parent(); + container.find('> .dropdown-submenu > a').each(function(i, el) { + if (el !== item) { + hideInnerDropdown(el); + } + }); + + var popupMargin = 10; + var maxBottom = $(window).height() - popupMargin; + var bounds = item.getBoundingClientRect(); + + popup.css('left', bounds.right + 'px'); + if (bounds.top + popup.height() > maxBottom && + bounds.top > $(window).height() / 2) { + popup.css({ + 'top': (bounds.bottom - popup.height()) + 'px', + 'max-height': (bounds.bottom - popupMargin) + 'px', + }); + } else { + popup.css({ + 'top': bounds.top + 'px', + 'max-height': (maxBottom - bounds.top) + 'px', + }); + } + } + + function hideInnerDropdown(item) { + var popup = $(item).next('.dropdown-menu'); + popup.removeClass('show'); + $(item).removeClass('open'); + + popup.scrollTop(0); + popup.find('.dropdown-menu').scrollTop(0).removeClass('show'); + popup.find('.dropdown-submenu > a').removeClass('open'); + } + + $('.dropdown-submenu > a').on('click', function(e) { + if ($(this).next('.dropdown-menu').hasClass('show')) { + hideInnerDropdown(this); + } else { + showInnerDropdown(this); + } + + e.stopPropagation(); + e.preventDefault(); + }); + + $('.dropdown-menu').parent().on('hide.bs.dropdown', function(e) { + $(this).find('.dropdown-menu').scrollTop(0); + $(this).find('.dropdown-submenu > a').removeClass('open'); + $(this).find('.dropdown-menu .dropdown-menu').removeClass('show'); + }); +}); + +$(window).on('resize', applyTopPadding); + +$('body').scrollspy({ + target: '.bs-sidebar', + offset: 100 +}); + +/* Prevent disabled links from causing a page reload */ +$("li.disabled a").click(function() { + event.preventDefault(); +}); + +// See https://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes +// We only list common keys below. Obscure keys are omitted and their use is discouraged. +var keyCodes = { + 8: 'backspace', + 9: 'tab', + 13: 'enter', + 16: 'shift', + 17: 'ctrl', + 18: 'alt', + 19: 'pause/break', + 20: 'caps lock', + 27: 'escape', + 32: 'spacebar', + 33: 'page up', + 34: 'page down', + 35: 'end', + 36: 'home', + 37: '←', + 38: '↑', + 39: '→', + 40: '↓', + 45: 'insert', + 46: 'delete', + 48: '0', + 49: '1', + 50: '2', + 51: '3', + 52: '4', + 53: '5', + 54: '6', + 55: '7', + 56: '8', + 57: '9', + 65: 'a', + 66: 'b', + 67: 'c', + 68: 'd', + 69: 'e', + 70: 'f', + 71: 'g', + 72: 'h', + 73: 'i', + 74: 'j', + 75: 'k', + 76: 'l', + 77: 'm', + 78: 'n', + 79: 'o', + 80: 'p', + 81: 'q', + 82: 'r', + 83: 's', + 84: 't', + 85: 'u', + 86: 'v', + 87: 'w', + 88: 'x', + 89: 'y', + 90: 'z', + 91: 'Left Windows Key / Left ⌘', + 92: 'Right Windows Key', + 93: 'Windows Menu / Right ⌘', + 96: 'numpad 0', + 97: 'numpad 1', + 98: 'numpad 2', + 99: 'numpad 3', + 100: 'numpad 4', + 101: 'numpad 5', + 102: 'numpad 6', + 103: 'numpad 7', + 104: 'numpad 8', + 105: 'numpad 9', + 106: 'multiply', + 107: 'add', + 109: 'subtract', + 110: 'decimal point', + 111: 'divide', + 112: 'f1', + 113: 'f2', + 114: 'f3', + 115: 'f4', + 116: 'f5', + 117: 'f6', + 118: 'f7', + 119: 'f8', + 120: 'f9', + 121: 'f10', + 122: 'f11', + 123: 'f12', + 124: 'f13', + 125: 'f14', + 126: 'f15', + 127: 'f16', + 128: 'f17', + 129: 'f18', + 130: 'f19', + 131: 'f20', + 132: 'f21', + 133: 'f22', + 134: 'f23', + 135: 'f24', + 144: 'num lock', + 145: 'scroll lock', + 186: ';', + 187: '=', + 188: ',', + 189: '‐', + 190: '.', + 191: '?', + 192: '`', + 219: '[', + 220: '\', + 221: ']', + 222: ''', +}; diff --git a/rss b/rss new file mode 100644 index 00000000..82f88ebc --- /dev/null +++ b/rss @@ -0,0 +1,1514 @@ + + +Thu, 04 Jan 2024 01:19:25 +0700 +News - Detikcom +Info berita terbaru hari ini baik peristiwa, kecelakaan, kriminal, hukum, berita unik, Politik, dan liputan khusus di Indonesia dan Internasional +https://news.detik.com/ + + +News - Detikcom +https://news.detik.com/ +https://akcdn.detik.net.id/logo_tematik/logodetiknews.png + + +https://news.detik.com/berita/d-7123325/din-syamsuddin-kenang-rizal-ramli-seorang-intelektual-dan-teknokrat +Thu, 04 Jan 2024 01:06:09 +0700 + +<![CDATA[ Din Syamsuddin Kenang Rizal Ramli: Seorang Intelektual dan Teknokrat ]]> + + + Din Syamsuddin melayat ke rumah duka mantan Menko Maritim Rizal Ramli. Din mengenang Rizal Ramli sebagai seorang intelektual dan teknokrat. ]]> + + + + Din Syamsuddin melayat ke rumah duka mantan Menko Maritim Rizal Ramli. Din mengenang Rizal Ramli sebagai seorang intelektual dan teknokrat. ]]> + +https://news.detik.com/berita/d-7123325/din-syamsuddin-kenang-rizal-ramli-seorang-intelektual-dan-teknokrat + + +https://news.detik.com/pemilu/d-7123324/gibran-penuhi-panggilan-bawaslu-jakpus-relawan-negarawan-patuh-aturan +Thu, 04 Jan 2024 01:03:19 +0700 + +<![CDATA[ Gibran Penuhi Panggilan Bawaslu Jakpus, Relawan: Negarawan Patuh Aturan ]]> + + + Gibran menghadiri pemanggilan Bawaslu Jakarta Pusat soal aksi bagi-bagi susu saat CFD. Relawan menyebut Gibran negarawan yang patuh aturan. ]]> + + + + Gibran menghadiri pemanggilan Bawaslu Jakarta Pusat soal aksi bagi-bagi susu saat CFD. Relawan menyebut Gibran negarawan yang patuh aturan. ]]> + +https://news.detik.com/pemilu/d-7123324/gibran-penuhi-panggilan-bawaslu-jakpus-relawan-negarawan-patuh-aturan + + +https://news.detik.com/pemilu/d-7123317/ganjar-senang-relawan-berbagai-golongan-kumpul-di-konser-lilin-putih +Thu, 04 Jan 2024 00:45:15 +0700 + +<![CDATA[ Ganjar Senang Relawan Berbagai Golongan Kumpul di Konser Lilin Putih ]]> + + + Ganjar senang lantaran para relawan dari berbagai golongan berkumpul di perayaan Natal dan tahun baru Konser Lilin Putih ]]> + + + + Ganjar senang lantaran para relawan dari berbagai golongan berkumpul di perayaan Natal dan tahun baru Konser Lilin Putih ]]> + +https://news.detik.com/pemilu/d-7123317/ganjar-senang-relawan-berbagai-golongan-kumpul-di-konser-lilin-putih + + +https://news.detik.com/berita/d-7123307/kebakaran-di-jelambar-jakbar-hanguskan-15-rumah-1-orang-luka +Thu, 04 Jan 2024 00:15:12 +0700 + +<![CDATA[ Kebakaran di Jelambar Jakbar Hanguskan 15 Rumah, 1 Orang Luka ]]> + + + Kebakaran besar melanda kawasan Jelambar, Jakarta Barat (Jakbar). Sebanyak 15 rumah hangus terbakar. ]]> + + + + Kebakaran besar melanda kawasan Jelambar, Jakarta Barat (Jakbar). Sebanyak 15 rumah hangus terbakar. ]]> + +https://news.detik.com/berita/d-7123307/kebakaran-di-jelambar-jakbar-hanguskan-15-rumah-1-orang-luka + + +https://news.detik.com/berita/d-7123305/jokowi-temui-warga-penerima-manfaat-di-jateng-pastikan-distribusi-bantuan +Wed, 03 Jan 2024 23:39:14 +0700 + +<![CDATA[ Jokowi Temui Warga Penerima Manfaat di Jateng, Pastikan Distribusi Bantuan ]]> + + + Presiden Jokowi menemui warga penerima manfaat di sela kunjungan kerjanya di Jateng. Dia memastikan bantuan langsung tunai (BLT) El Nino sampai ke warga. ]]> + + + + Presiden Jokowi menemui warga penerima manfaat di sela kunjungan kerjanya di Jateng. Dia memastikan bantuan langsung tunai (BLT) El Nino sampai ke warga. ]]> + +https://news.detik.com/berita/d-7123305/jokowi-temui-warga-penerima-manfaat-di-jateng-pastikan-distribusi-bantuan + + +https://news.detik.com/pemilu/d-7123303/mardiono-anggap-mantan-kader-ppp-yang-dukung-prabowo-gibran-penyusup +Wed, 03 Jan 2024 23:36:16 +0700 + +<![CDATA[ Mardiono Anggap Mantan Kader PPP yang Dukung Prabowo-Gibran Penyusup ]]> + + + Plt Ketum PPP Mardino menyebut jika mantan kader PPP yang mendukung Prabowo-Gibran merupakan gerombolan penyusup. ]]> + + + + Plt Ketum PPP Mardino menyebut jika mantan kader PPP yang mendukung Prabowo-Gibran merupakan gerombolan penyusup. ]]> + +https://news.detik.com/pemilu/d-7123303/mardiono-anggap-mantan-kader-ppp-yang-dukung-prabowo-gibran-penyusup + + +https://news.detik.com/pemilu/d-7123299/bawaslu-pamekasan-usut-aksi-gus-miftah-bagi-bagi-uang +Wed, 03 Jan 2024 23:17:38 +0700 + +<![CDATA[ Bawaslu Pamekasan Usut Aksi Gus Miftah Bagi-bagi Uang ]]> + + + Bawaslu Pamekasan kini mengusut aksi Gus Miftah bagi-bagi uang. ]]> + + + + Bawaslu Pamekasan kini mengusut aksi Gus Miftah bagi-bagi uang. ]]> + +https://news.detik.com/pemilu/d-7123299/bawaslu-pamekasan-usut-aksi-gus-miftah-bagi-bagi-uang + + +https://news.detik.com/pemilu/d-7123286/kaesang-minta-pengurus-psi-banten-menangkan-prabowo-gibran-satu-putaran +Wed, 03 Jan 2024 23:05:22 +0700 + +<![CDATA[ Kaesang Minta Pengurus PSI Banten Menangkan Prabowo-Gibran Satu Putaran ]]> + + + Kaesang menginstruksikan PSI di Banten untuk memenangkan Prabowo Subianto-Gibran Rakabuming Raka satu putaran di Pilpres 2024. ]]> + + + + Kaesang menginstruksikan PSI di Banten untuk memenangkan Prabowo Subianto-Gibran Rakabuming Raka satu putaran di Pilpres 2024. ]]> + +https://news.detik.com/pemilu/d-7123286/kaesang-minta-pengurus-psi-banten-menangkan-prabowo-gibran-satu-putaran + + +https://news.detik.com/pemilu/d-7123285/tpn-ganjar-mahfud-pastikan-tetap-dukung-penyaluran-bansos-saat-pemilu +Wed, 03 Jan 2024 23:03:21 +0700 + +<![CDATA[ TPN Ganjar-Mahfud Pastikan Tetap Dukung Penyaluran Bansos saat Pemilu ]]> + + + TPN Ganjar Pranowo-Mahfud Md menegaskan jika pihaknya tetap ingin bansos disalurkan selama Pemilu. ]]> + + + + TPN Ganjar Pranowo-Mahfud Md menegaskan jika pihaknya tetap ingin bansos disalurkan selama Pemilu. ]]> + +https://news.detik.com/pemilu/d-7123285/tpn-ganjar-mahfud-pastikan-tetap-dukung-penyaluran-bansos-saat-pemilu + + +https://news.detik.com/foto-news/d-7123274/potret-kompak-ganjar-mahfud-hadiri-konser-lilin-putih +Wed, 03 Jan 2024 22:57:38 +0700 + +<![CDATA[ Potret Kompak Ganjar-Mahfud Hadiri Konser Lilin Putih ]]> + + + Capres dan cawapres nomor urut 3, Ganjar Pranowo dan Mahfud Md menghadiri Konser Lilin Putih. Konser untuk merayakan Natal dan Tahun Baru 2024. ]]> + + + + Capres dan cawapres nomor urut 3, Ganjar Pranowo dan Mahfud Md menghadiri Konser Lilin Putih. Konser untuk merayakan Natal dan Tahun Baru 2024. ]]> + +https://news.detik.com/foto-news/d-7123274/potret-kompak-ganjar-mahfud-hadiri-konser-lilin-putih + + +https://news.detik.com/berita/d-7123272/arya-wedakarna-juga-dilaporkan-ke-polda-bali-soal-ucapan-penutup-kepala +Wed, 03 Jan 2024 22:54:37 +0700 + +<![CDATA[ Arya Wedakarna Juga Dilaporkan ke Polda Bali soal Ucapan Penutup Kepala ]]> + + + Anggota DPD RI Perwakilan Bali Arya Wedakarna juga dilaporkan ke Polda Bali buntut ucapan soal penutup kepala penyambut tamu di Bandara I Gusti Ngurah Rai. ]]> + + + + Anggota DPD RI Perwakilan Bali Arya Wedakarna juga dilaporkan ke Polda Bali buntut ucapan soal penutup kepala penyambut tamu di Bandara I Gusti Ngurah Rai. ]]> + +https://news.detik.com/berita/d-7123272/arya-wedakarna-juga-dilaporkan-ke-polda-bali-soal-ucapan-penutup-kepala + + +https://news.detik.com/pemilu/d-7123270/mahfud-minta-umat-islam-di-ri-melebur-tak-boleh-berkiblat-ke-timur-tengah +Wed, 03 Jan 2024 22:52:13 +0700 + +<![CDATA[ Mahfud Minta Umat Islam di RI Melebur: Tak Boleh Berkiblat ke Timur Tengah ]]> + + + Mahfud Md menyampaikan umat Islam di Indonesia harus melebur. Dia mengatakan umat Islam di Indonesia tidak boleh berkiblat ke Timur Tengah. ]]> + + + + Mahfud Md menyampaikan umat Islam di Indonesia harus melebur. Dia mengatakan umat Islam di Indonesia tidak boleh berkiblat ke Timur Tengah. ]]> + +https://news.detik.com/pemilu/d-7123270/mahfud-minta-umat-islam-di-ri-melebur-tak-boleh-berkiblat-ke-timur-tengah + + +https://news.detik.com/pemilu/d-7123269/ganjar-ungkap-hasil-rapat-tpn-bahas-persiapan-debat-relawan-dikeroyok +Wed, 03 Jan 2024 22:50:12 +0700 + +<![CDATA[ Ganjar Ungkap Hasil Rapat TPN, Bahas Persiapan Debat-Relawan Dikeroyok ]]> + + + Ganjar Pranowo mengungkap hasil rapat Tim Pemenangan Nasional (TPN) Ganjar Pranowo dan Mahfud Md hari ini. ]]> + + + + Ganjar Pranowo mengungkap hasil rapat Tim Pemenangan Nasional (TPN) Ganjar Pranowo dan Mahfud Md hari ini. ]]> + +https://news.detik.com/pemilu/d-7123269/ganjar-ungkap-hasil-rapat-tpn-bahas-persiapan-debat-relawan-dikeroyok + + +https://news.detik.com/detiktv/d-7123265/seusai-gelar-rapat-penting-ganjar-kita-akan-gerak-lebih-masif +Wed, 03 Jan 2024 22:44:32 +0700 + +<![CDATA[ Seusai Gelar Rapat Penting, Ganjar: Kita Akan Gerak Lebih Masif ]]> + + + TPN Ganjar-Mahfud menggelar rapat penting di Gedung High End. Seusai rapat, capres nomor urut 3 Ganjar Pranowo mengatakan TPN akan bergerak lebih masif. ]]> + + + + TPN Ganjar-Mahfud menggelar rapat penting di Gedung High End. Seusai rapat, capres nomor urut 3 Ganjar Pranowo mengatakan TPN akan bergerak lebih masif. ]]> + +https://news.detik.com/detiktv/d-7123265/seusai-gelar-rapat-penting-ganjar-kita-akan-gerak-lebih-masif + + +https://news.detik.com/berita/d-7123257/upaya-jasa-raharja-optimalkan-layanan-untuk-masyarakat +Wed, 03 Jan 2024 22:33:51 +0700 + +<![CDATA[ Upaya Jasa Raharja Optimalkan Layanan untuk Masyarakat ]]> + + + Jasa Raharja terus membuktikan komitmen dengan melakukan transformasi dan terobosan bisnis di seluruh lini perusahaan. ]]> + + + + Jasa Raharja terus membuktikan komitmen dengan melakukan transformasi dan terobosan bisnis di seluruh lini perusahaan. ]]> + +https://news.detik.com/berita/d-7123257/upaya-jasa-raharja-optimalkan-layanan-untuk-masyarakat + + +https://news.detik.com/berita/d-7123254/eks-gubernur-bali-wayan-koster-diperiksa-polisi-ada-apa +Wed, 03 Jan 2024 22:33:18 +0700 + +<![CDATA[ Eks Gubernur Bali Wayan Koster Diperiksa Polisi, Ada Apa? ]]> + + + Mantan Gubernur Bali Wayan Koster diperiksa Polda Bali. Polda Bali membenarkan adanya pemeriksaan terhadap Wayan Koster. ]]> + + + + Mantan Gubernur Bali Wayan Koster diperiksa Polda Bali. Polda Bali membenarkan adanya pemeriksaan terhadap Wayan Koster. ]]> + +https://news.detik.com/berita/d-7123254/eks-gubernur-bali-wayan-koster-diperiksa-polisi-ada-apa + + +https://news.detik.com/pemilu/d-7123252/kpu-pandeglang-terima-surat-suara-presiden-dan-wakil-presiden +Wed, 03 Jan 2024 22:32:42 +0700 + +<![CDATA[ KPU Pandeglang Terima Surat Suara Presiden dan Wakil Presiden ]]> + + + KPU Pandeglang telah menerima logistik surat suara untuk pemilu 2024. Logistik yang diterima KPU berupa surat suara presiden dan wakil presiden. ]]> + + + + KPU Pandeglang telah menerima logistik surat suara untuk pemilu 2024. Logistik yang diterima KPU berupa surat suara presiden dan wakil presiden. ]]> + +https://news.detik.com/pemilu/d-7123252/kpu-pandeglang-terima-surat-suara-presiden-dan-wakil-presiden + + +https://news.detik.com/berita/d-7123251/4-jukir-mabuk-pengeroyok-oknum-polisi-di-tangsel-jadi-tersangka +Wed, 03 Jan 2024 22:32:09 +0700 + +<![CDATA[ 4 Jukir Mabuk Pengeroyok Oknum Polisi di Tangsel Jadi Tersangka ]]> + + + Polisi menangkap empat juru parkir (jukir) yang diduga mengeroyok oknum polisi di Ciputat, Tangsel. Keempat jukir itu telah ditetapkan sebagai tersangka. ]]> + + + + Polisi menangkap empat juru parkir (jukir) yang diduga mengeroyok oknum polisi di Ciputat, Tangsel. Keempat jukir itu telah ditetapkan sebagai tersangka. ]]> + +https://news.detik.com/berita/d-7123251/4-jukir-mabuk-pengeroyok-oknum-polisi-di-tangsel-jadi-tersangka + + +https://news.detik.com/berita/d-7123250/dirut-jasa-raharja-sambut-baik-4-terminal-bus-baru-di-purworejo-blitar +Wed, 03 Jan 2024 22:30:20 +0700 + +<![CDATA[ Dirut Jasa Raharja Sambut Baik 4 Terminal Bus Baru di Purworejo-Blitar ]]> + + + Menurut Direktur Utama Jasa Raharja Rivan A. Purwantono terminal merupakan aspek penting guna mewujudkan pelayanan angkutan umum yang baik. ]]> + + + + Menurut Direktur Utama Jasa Raharja Rivan A. Purwantono terminal merupakan aspek penting guna mewujudkan pelayanan angkutan umum yang baik. ]]> + +https://news.detik.com/berita/d-7123250/dirut-jasa-raharja-sambut-baik-4-terminal-bus-baru-di-purworejo-blitar + + +https://news.detik.com/berita/d-7123245/jasa-raharja-jamin-santunan-korban-kecelakaan-bus-bhinneka-di-tol-japek +Wed, 03 Jan 2024 22:26:46 +0700 + +<![CDATA[ Jasa Raharja Jamin Santunan Korban Kecelakaan Bus Bhinneka di Tol Japek ]]> + + + Sesuai Peraturan Menteri Keuangan RI No.15 Tahun 2017, korban meninggal dunia mendapat santunan sebesar Rp 50 juta yang diserahkan kepada ahli waris sah. ]]> + + + + Sesuai Peraturan Menteri Keuangan RI No.15 Tahun 2017, korban meninggal dunia mendapat santunan sebesar Rp 50 juta yang diserahkan kepada ahli waris sah. ]]> + +https://news.detik.com/berita/d-7123245/jasa-raharja-jamin-santunan-korban-kecelakaan-bus-bhinneka-di-tol-japek + + +https://news.detik.com/pemilu/d-7123234/cak-imin-terima-dukungan-laskar-santri-amin-jawa-barat-di-sumedang +Wed, 03 Jan 2024 22:21:11 +0700 + +<![CDATA[ Cak Imin Terima Dukungan Laskar Santri AMIN Jawa Barat di Sumedang ]]> + + + Cawapres nomor 1 Muhaimin Iskandar atau Cak Imin menerima deklarasi dukungan dari Laskar Santri AMIN Jawa Barat di Kota Sumedang. ]]> + + + + Cawapres nomor 1 Muhaimin Iskandar atau Cak Imin menerima deklarasi dukungan dari Laskar Santri AMIN Jawa Barat di Kota Sumedang. ]]> + +https://news.detik.com/pemilu/d-7123234/cak-imin-terima-dukungan-laskar-santri-amin-jawa-barat-di-sumedang + + +https://news.detik.com/pemilu/d-7123230/sowan-ke-ponpes-assyfa-di-sumedang-cak-imin-didoakan-abuya-muhyiddin +Wed, 03 Jan 2024 22:16:46 +0700 + +<![CDATA[ Sowan ke Ponpes Assyfa di Sumedang, Cak Imin Didoakan Abuya Muhyiddin ]]> + + + Cawapres nomor urut 1, Muhaimin Iskandar (Cak Imin) sowan kepada pimpinan Ponpes Assyfa Sumedang, Abuya KH Muhyiddin Abdul Qadir Al-Manafi. ]]> + + + + Cawapres nomor urut 1, Muhaimin Iskandar (Cak Imin) sowan kepada pimpinan Ponpes Assyfa Sumedang, Abuya KH Muhyiddin Abdul Qadir Al-Manafi. ]]> + +https://news.detik.com/pemilu/d-7123230/sowan-ke-ponpes-assyfa-di-sumedang-cak-imin-didoakan-abuya-muhyiddin + + +https://news.detik.com/detiktv/d-7123227/mardiono-respons-soal-belasan-oknum-satpol-pp-di-garut-dukung-gibran +Wed, 03 Jan 2024 22:15:01 +0700 + +<![CDATA[ Mardiono Respons soal Belasan Oknum Satpol PP di Garut Dukung Gibran ]]> + + + Plt Ketua Umum PPP, Muhamad Mardiono, menyebut deklarasi dukungan sejumlah Satpol PP Garut untuk Gibran Rakabuming Raka telah melanggar aturan. ]]> + + + + Plt Ketua Umum PPP, Muhamad Mardiono, menyebut deklarasi dukungan sejumlah Satpol PP Garut untuk Gibran Rakabuming Raka telah melanggar aturan. ]]> + +https://news.detik.com/detiktv/d-7123227/mardiono-respons-soal-belasan-oknum-satpol-pp-di-garut-dukung-gibran + + +https://news.detik.com/detiktv/d-7123225/survei-asi-di-gen-z-ganjar-mahfud-34-9-prabowo-gibran-33-1-amin-26-1 +Wed, 03 Jan 2024 22:13:29 +0700 + +<![CDATA[ Survei ASI di Gen-Z: Ganjar-Mahfud 34,9%, Prabowo-Gibran 33,1%, AMIN 26,1% ]]> + + + Survei ASI merilis hasil elektabilitas capres dan cawapres di kalangan Gen Z pasca-debat perdana capres dan cawapres Pemilu 2024. ]]> + + + + Survei ASI merilis hasil elektabilitas capres dan cawapres di kalangan Gen Z pasca-debat perdana capres dan cawapres Pemilu 2024. ]]> + +https://news.detik.com/detiktv/d-7123225/survei-asi-di-gen-z-ganjar-mahfud-34-9-prabowo-gibran-33-1-amin-26-1 + + +https://news.detik.com/detiktv/d-7123224/ada-kader-ppp-dukung-prabowo-mardiono-bagian-dari-penyusupan +Wed, 03 Jan 2024 22:13:20 +0700 + +<![CDATA[ Ada Kader PPP Dukung Prabowo, Mardiono: Bagian dari Penyusupan ]]> + + + Plt Ketua Umum PPP, Muhamad Mardiono, mengatakan kader PPP yang mendukung Prabowo adalah bagian dari penyusupan. ]]> + + + + Plt Ketua Umum PPP, Muhamad Mardiono, mengatakan kader PPP yang mendukung Prabowo adalah bagian dari penyusupan. ]]> + +https://news.detik.com/detiktv/d-7123224/ada-kader-ppp-dukung-prabowo-mardiono-bagian-dari-penyusupan + + +https://news.detik.com/detiktv/d-7123222/daftar-11-nama-panelis-di-debat-ketiga-pilpres-2024 +Wed, 03 Jan 2024 22:11:42 +0700 + +<![CDATA[ Daftar 11 Nama Panelis di Debat Ketiga Pilpres 2024 ]]> + + + Komisi Pemilihan Umum (KPU) mengumumkan 11 nama yang akan menjadi panelis dalam debat ketiga Pilpres 2024. Berikut daftar lengkapnya. ]]> + + + + Komisi Pemilihan Umum (KPU) mengumumkan 11 nama yang akan menjadi panelis dalam debat ketiga Pilpres 2024. Berikut daftar lengkapnya. ]]> + +https://news.detik.com/detiktv/d-7123222/daftar-11-nama-panelis-di-debat-ketiga-pilpres-2024 + + +https://news.detik.com/berita/d-7123217/viral-penumpang-krl-kejang-kejang-disebut-kesurupan-begini-faktanya +Wed, 03 Jan 2024 22:07:05 +0700 + +<![CDATA[ Viral Penumpang KRL Kejang-kejang Disebut Kesurupan, Begini Faktanya ]]> + + + Video yang memperlihatkan seorang penumpang KRL kejang-kejang di dalam kereta viral di media sosial. Penumpang itu dinarasikan mengalami kesurupan. ]]> + + + + Video yang memperlihatkan seorang penumpang KRL kejang-kejang di dalam kereta viral di media sosial. Penumpang itu dinarasikan mengalami kesurupan. ]]> + +https://news.detik.com/berita/d-7123217/viral-penumpang-krl-kejang-kejang-disebut-kesurupan-begini-faktanya + + +https://news.detik.com/berita/d-7123209/polisi-tak-tahan-asn-bnn-tersangka-kdrt-di-bekasi-ini-alasannya +Wed, 03 Jan 2024 21:50:43 +0700 + +<![CDATA[ Polisi Tak Tahan ASN BNN Tersangka KDRT di Bekasi, Ini Alasannya ]]> + + + Polisi menetapkan ASN di BNN inisial AF sebagai tersangka kasus kekerasan dalam rumah tangga (KDRT) terhadap istrinya, YA, namun tak ditahan. ]]> + + + + Polisi menetapkan ASN di BNN inisial AF sebagai tersangka kasus kekerasan dalam rumah tangga (KDRT) terhadap istrinya, YA, namun tak ditahan. ]]> + +https://news.detik.com/berita/d-7123209/polisi-tak-tahan-asn-bnn-tersangka-kdrt-di-bekasi-ini-alasannya + + +https://news.detik.com/berita/d-7123207/anggota-polisi-dikeroyok-jukir-mabuk-di-tangsel-4-orang-ditangkap +Wed, 03 Jan 2024 21:49:25 +0700 + +<![CDATA[ Anggota Polisi Dikeroyok Jukir Mabuk di Tangsel, 4 Orang Ditangkap! ]]> + + + Polisi berinisial MH dikeroyok sejumlah orang di Ciputat, Tangsel. Empat orang yang diduga sebagai pelaku telah ditangkap. ]]> + + + + Polisi berinisial MH dikeroyok sejumlah orang di Ciputat, Tangsel. Empat orang yang diduga sebagai pelaku telah ditangkap. ]]> + +https://news.detik.com/berita/d-7123207/anggota-polisi-dikeroyok-jukir-mabuk-di-tangsel-4-orang-ditangkap + + +https://news.detik.com/pemilu/d-7123203/mahfud-minta-kpu-perbaiki-surat-suara-simulasi-pilpres-cuma-2-paslon +Wed, 03 Jan 2024 21:39:05 +0700 + +<![CDATA[ Mahfud Minta KPU Perbaiki Surat Suara Simulasi Pilpres Cuma 2 Paslon ]]> + + + Mahfud Md meminta KPU memperbaiki contoh surat suara untuk simulasi Pilpres hanya terdapat dua pasangan calon ]]> + + + + Mahfud Md meminta KPU memperbaiki contoh surat suara untuk simulasi Pilpres hanya terdapat dua pasangan calon ]]> + +https://news.detik.com/pemilu/d-7123203/mahfud-minta-kpu-perbaiki-surat-suara-simulasi-pilpres-cuma-2-paslon + + +https://news.detik.com/berita/d-7123182/prof-romli-pilih-jadi-ahli-usai-enggan-jadi-saksi-ringankan-firli +Wed, 03 Jan 2024 21:31:22 +0700 + +<![CDATA[ Prof Romli Pilih Jadi Ahli Usai Enggan Jadi Saksi Ringankan Firli ]]> + + + Romli Atmasasmita menolak menjadi saksi meringankan dan memilih jadi ahli. ]]> + + + + Romli Atmasasmita menolak menjadi saksi meringankan dan memilih jadi ahli. ]]> + +https://news.detik.com/berita/d-7123182/prof-romli-pilih-jadi-ahli-usai-enggan-jadi-saksi-ringankan-firli + + +https://news.detik.com/pemilu/d-7123181/kpu-mnc-group-tetap-jadi-media-penyelenggara-debat-pilpres-ketiga +Wed, 03 Jan 2024 21:30:51 +0700 + +<![CDATA[ KPU: MNC Group Tetap Jadi Media Penyelenggara Debat Pilpres Ketiga ]]> + + + KPU RI memastikan MNC Group tetap menjadi media penyelenggara debat ketiga Pilpres 2024. KPU menyampaikan jika hal itu telah tertuang dalam SK KPU. ]]> + + + + KPU RI memastikan MNC Group tetap menjadi media penyelenggara debat ketiga Pilpres 2024. KPU menyampaikan jika hal itu telah tertuang dalam SK KPU. ]]> + +https://news.detik.com/pemilu/d-7123181/kpu-mnc-group-tetap-jadi-media-penyelenggara-debat-pilpres-ketiga + + +https://news.detik.com/pemilu/d-7123179/viral-satpol-pp-garut-dukung-gibran-cak-imin-minta-timnas-lapor-ke-bawaslu +Wed, 03 Jan 2024 21:28:47 +0700 + +<![CDATA[ Viral Satpol PP Garut Dukung Gibran, Cak Imin Minta Timnas Lapor ke Bawaslu ]]> + + + Cak Imin meminta Timnas AMIN melapor ke Bawaslu soal viral anggota Satpol PP Garut dukung Gibran Rakabuming Raka. ]]> + + + + Cak Imin meminta Timnas AMIN melapor ke Bawaslu soal viral anggota Satpol PP Garut dukung Gibran Rakabuming Raka. ]]> + +https://news.detik.com/pemilu/d-7123179/viral-satpol-pp-garut-dukung-gibran-cak-imin-minta-timnas-lapor-ke-bawaslu + + +https://news.detik.com/pemilu/d-7123175/kompak-berkemeja-putih-ganjar-mahfud-hadiri-konser-lilin-putih +Wed, 03 Jan 2024 21:24:34 +0700 + +<![CDATA[ Kompak Berkemeja Putih, Ganjar-Mahfud Hadiri Konser Lilin Putih ]]> + + + Ganjar Pranowo dan Mahfud Md tiba di Balai Sarbini, Jakarta. Keduanya menghadiri perayaan Natal dan Tahun baru Konser Lilin Putih Indonesia ]]> + + + + Ganjar Pranowo dan Mahfud Md tiba di Balai Sarbini, Jakarta. Keduanya menghadiri perayaan Natal dan Tahun baru Konser Lilin Putih Indonesia ]]> + +https://news.detik.com/pemilu/d-7123175/kompak-berkemeja-putih-ganjar-mahfud-hadiri-konser-lilin-putih + + +https://news.detik.com/pemilu/d-7123171/kpu-ungkap-ada-2-tambahan-subtema-di-debat-ketiga-pilpres-2024 +Wed, 03 Jan 2024 21:18:52 +0700 + +<![CDATA[ KPU Ungkap Ada 2 Tambahan Subtema di Debat Ketiga Pilpres 2024 ]]> + + + Komisi Pemilihan Umum (KPU) RI menambah subtema debat ketiga Pilpres 2024. Total ada 6 poin pembahasan dalam debat ketiga nanti. ]]> + + + + Komisi Pemilihan Umum (KPU) RI menambah subtema debat ketiga Pilpres 2024. Total ada 6 poin pembahasan dalam debat ketiga nanti. ]]> + +https://news.detik.com/pemilu/d-7123171/kpu-ungkap-ada-2-tambahan-subtema-di-debat-ketiga-pilpres-2024 + + +https://news.detik.com/detiktv/d-7123163/mnc-group-tetap-jadi-tv-penyelenggara-debat-ketiga-pilpres +Wed, 03 Jan 2024 21:06:13 +0700 + +<![CDATA[ MNC Group Tetap Jadi TV Penyelenggara Debat Ketiga Pilpres ]]> + + + Komisioner KPU, August Mellaz mengatakan MNC Group akan tetap menjadi TV penyelenggara debat ketiga Pilpres 2024. Hal ini berdasarkan surat keputusan (SK) KPU. ]]> + + + + Komisioner KPU, August Mellaz mengatakan MNC Group akan tetap menjadi TV penyelenggara debat ketiga Pilpres 2024. Hal ini berdasarkan surat keputusan (SK) KPU. ]]> + +https://news.detik.com/detiktv/d-7123163/mnc-group-tetap-jadi-tv-penyelenggara-debat-ketiga-pilpres + + +https://news.detik.com/berita/d-7123162/5-fakta-satpol-pp-dikeroyok-di-jakpus-pelaku-ternyata-pakai-narkoba +Wed, 03 Jan 2024 21:05:19 +0700 + +<![CDATA[ 5 Fakta Satpol PP Dikeroyok di Jakpus, Pelaku Ternyata Pakai Narkoba ]]> + + + Lima pelaku pengeroyokan dua anggota Satpol PP di depan mal kawasan Menteng, Jakpus, ditetapkan sebagai tersangka. Empat dari lima pelaku positif narkoba. ]]> + + + + Lima pelaku pengeroyokan dua anggota Satpol PP di depan mal kawasan Menteng, Jakpus, ditetapkan sebagai tersangka. Empat dari lima pelaku positif narkoba. ]]> + +https://news.detik.com/berita/d-7123162/5-fakta-satpol-pp-dikeroyok-di-jakpus-pelaku-ternyata-pakai-narkoba + + +https://news.detik.com/berita/d-7123161/banting-hingga-cekik-istri-asn-bnn-di-bekasi-jadi-tersangka-kdrt +Wed, 03 Jan 2024 21:04:45 +0700 + +<![CDATA[ Banting hingga Cekik Istri, ASN BNN di Bekasi Jadi Tersangka KDRT ]]> + + + Oknum ASN di BNN diduga melakukan kekerasan dalam rumah tangga (KDRT) terhadap istrinya. Polisi telah menetapkan pria tersebut sebagai tersangka. ]]> + + + + Oknum ASN di BNN diduga melakukan kekerasan dalam rumah tangga (KDRT) terhadap istrinya. Polisi telah menetapkan pria tersebut sebagai tersangka. ]]> + +https://news.detik.com/berita/d-7123161/banting-hingga-cekik-istri-asn-bnn-di-bekasi-jadi-tersangka-kdrt + + +https://news.detik.com/berita/d-7123160/pelapor-harap-firli-segera-diperiksa-terkait-bawa-dokumen-kpk-ke-praperadilan +Wed, 03 Jan 2024 21:04:19 +0700 + +<![CDATA[ Pelapor Harap Firli Segera Diperiksa Terkait Bawa Dokumen KPK ke Praperadilan ]]> + + + Edy Susilo berharap Firli dan pengacaranya, Ian Iskandar, segera diperiksa terkait bawa dokumen KPK ke praperadilan ]]> + + + + Edy Susilo berharap Firli dan pengacaranya, Ian Iskandar, segera diperiksa terkait bawa dokumen KPK ke praperadilan ]]> + +https://news.detik.com/berita/d-7123160/pelapor-harap-firli-segera-diperiksa-terkait-bawa-dokumen-kpk-ke-praperadilan + + +https://news.detik.com/pemilu/d-7123282/komunitas-cosplay-di-jabar-ikut-deklarasikan-dukungan-ke-prabowo-gibran +Wed, 03 Jan 2024 20:59:14 +0700 + +<![CDATA[ Komunitas Cosplay di Jabar Ikut Deklarasikan Dukungan ke Prabowo-Gibran ]]> + + + Komunitas Cosplay Jabar ikut mendeklarasikan diri bergabung dengan relawan Gaspoll Bro. Para relawan ini mengaku mendukung penuh Prabowo-Gibran di Pilpres 2024. ]]> + + + + Komunitas Cosplay Jabar ikut mendeklarasikan diri bergabung dengan relawan Gaspoll Bro. Para relawan ini mengaku mendukung penuh Prabowo-Gibran di Pilpres 2024. ]]> + +https://news.detik.com/pemilu/d-7123282/komunitas-cosplay-di-jabar-ikut-deklarasikan-dukungan-ke-prabowo-gibran + + +https://news.detik.com/detiktv/d-7123152/debat-ketiga-pilpres-akan-digelar-di-istora-senayan +Wed, 03 Jan 2024 20:58:24 +0700 + +<![CDATA[ Debat Ketiga Pilpres Akan Digelar di Istora Senayan ]]> + + + KPU mengumumkan Istora Senayan akan menjadi lokasi debat Pilpres 2024 pada 7 Januari 2024. ]]> + + + + KPU mengumumkan Istora Senayan akan menjadi lokasi debat Pilpres 2024 pada 7 Januari 2024. ]]> + +https://news.detik.com/detiktv/d-7123152/debat-ketiga-pilpres-akan-digelar-di-istora-senayan + + +https://news.detik.com/detiktv/d-7123145/melihat-sisa-puing-pesawat-japan-airlines-seusai-tabrakan-dan-terbakar +Wed, 03 Jan 2024 20:50:29 +0700 + +<![CDATA[ Melihat Sisa Puing Pesawat Japan Airlines Seusai Tabrakan dan Terbakar ]]> + + + Pesawat Japan Airlines (JAL) terbakar setelah tabrakan. Begini kondisi sisa puing bangkai pesawat tersebut. ]]> + + + + Pesawat Japan Airlines (JAL) terbakar setelah tabrakan. Begini kondisi sisa puing bangkai pesawat tersebut. ]]> + +https://news.detik.com/detiktv/d-7123145/melihat-sisa-puing-pesawat-japan-airlines-seusai-tabrakan-dan-terbakar + + +https://news.detik.com/pemilu/d-7123143/2-moderator-debat-ketiga-pilpres-2024-ariyo-ardi-dan-anisha-dasuki +Wed, 03 Jan 2024 20:48:15 +0700 + +<![CDATA[ 2 Moderator Debat Ketiga Pilpres 2024: Ariyo Ardi dan Anisha Dasuki ]]> + + + KPU RI telah menentukan dua nama moderator debat ketiga Pilpres 2024. Dua nama itu, diantaranya Ariyo Ardi dan Anisha Dasuki. ]]> + + + + KPU RI telah menentukan dua nama moderator debat ketiga Pilpres 2024. Dua nama itu, diantaranya Ariyo Ardi dan Anisha Dasuki. ]]> + +https://news.detik.com/pemilu/d-7123143/2-moderator-debat-ketiga-pilpres-2024-ariyo-ardi-dan-anisha-dasuki + + +https://news.detik.com/pemilu/d-7123142/pimpinan-ponpes-buntet-cirebon-deklarasi-dukung-prabowo-gibran-di-pilpres +Wed, 03 Jan 2024 20:48:05 +0700 + +<![CDATA[ Pimpinan Ponpes Buntet Cirebon Deklarasi Dukung Prabowo-Gibran di Pilpres ]]> + + + Pimpinan Ponpes Buntet Cirebon KH Adib Rofiuddin Izza menyatakan dukungannya terhadap Prabowo Subianto-Gibran Rakabuming Raka di Pilpres 2024. ]]> + + + + Pimpinan Ponpes Buntet Cirebon KH Adib Rofiuddin Izza menyatakan dukungannya terhadap Prabowo Subianto-Gibran Rakabuming Raka di Pilpres 2024. ]]> + +https://news.detik.com/pemilu/d-7123142/pimpinan-ponpes-buntet-cirebon-deklarasi-dukung-prabowo-gibran-di-pilpres + + +https://news.detik.com/pemilu/d-7123140/soal-urgensi-alutsista-tkn-bukan-untuk-perang-besok-tapi-mencegah +Wed, 03 Jan 2024 20:45:16 +0700 + +<![CDATA[ Soal Urgensi Alutsista, TKN: Bukan untuk Perang Besok, tapi Mencegah ]]> + + + Budiman Sudjatmiko mengatakan sistem pertahanan jadi perhatian penuh dari pasangan Prabowo-Gibran. ]]> + + + + Budiman Sudjatmiko mengatakan sistem pertahanan jadi perhatian penuh dari pasangan Prabowo-Gibran. ]]> + +https://news.detik.com/pemilu/d-7123140/soal-urgensi-alutsista-tkn-bukan-untuk-perang-besok-tapi-mencegah + + +https://news.detik.com/detiktv/d-7123139/muncul-karangan-bunga-dukung-tni-di-boyolali-tpn-jangan-genit-lah +Wed, 03 Jan 2024 20:43:06 +0700 + +<![CDATA[ Muncul Karangan Bunga Dukung TNI di Boyolali, TPN: Jangan Genit Lah ]]> + + + TPN Ganjar-Mahfud merespons karangan bunga dukungan untuk TNI di Boyolali seusai penganiayaan terhadap relawan Ganjar. TPN meminta masyarakat jangan genit. ]]> + + + + TPN Ganjar-Mahfud merespons karangan bunga dukungan untuk TNI di Boyolali seusai penganiayaan terhadap relawan Ganjar. TPN meminta masyarakat jangan genit. ]]> + +https://news.detik.com/detiktv/d-7123139/muncul-karangan-bunga-dukung-tni-di-boyolali-tpn-jangan-genit-lah + + +https://news.detik.com/berita/d-7123137/5-fakta-gempa-m-5-9-di-lebak-banten-sempat-bikin-panik-warga +Wed, 03 Jan 2024 20:41:11 +0700 + +<![CDATA[ 5 Fakta Gempa M 5,9 di Lebak Banten Sempat Bikin Panik Warga ]]> + + + Gempa terjadi akibat adanya deformasi batuan dalam Lempeng Indo-Australia yang tersubduksi ke bawah Lempeng Eurasia. ]]> + + + + Gempa terjadi akibat adanya deformasi batuan dalam Lempeng Indo-Australia yang tersubduksi ke bawah Lempeng Eurasia. ]]> + +https://news.detik.com/berita/d-7123137/5-fakta-gempa-m-5-9-di-lebak-banten-sempat-bikin-panik-warga + + +https://news.detik.com/berita/d-7123136/menpan-rb-menkeu-sepakat-percepat-layanan-digital-payment-pemerintah +Wed, 03 Jan 2024 20:40:21 +0700 + +<![CDATA[ MenPAN-RB & Menkeu Sepakat Percepat Layanan Digital Payment Pemerintah ]]> + + + Transformasi digital menjadi salah satu kekuatan untuk mereformasi berbagai lini. ]]> + + + + Transformasi digital menjadi salah satu kekuatan untuk mereformasi berbagai lini. ]]> + +https://news.detik.com/berita/d-7123136/menpan-rb-menkeu-sepakat-percepat-layanan-digital-payment-pemerintah + + +https://news.detik.com/detiktv/d-7123134/prabowo-kenang-rizal-ramli-seorang-intelektual-dan-teknokrat +Wed, 03 Jan 2024 20:38:38 +0700 + +<![CDATA[ Prabowo Kenang Rizal Ramli: Seorang Intelektual dan Teknokrat ]]> + + + Prabowo melayat ke rumah duka Rizal Ramli di Jalan Bangka IX, Jakarta Selatan. Prabowo mengenang Rizal Ramli sebagai sosok intelektual dan aktivis yang idealis. ]]> + + + + Prabowo melayat ke rumah duka Rizal Ramli di Jalan Bangka IX, Jakarta Selatan. Prabowo mengenang Rizal Ramli sebagai sosok intelektual dan aktivis yang idealis. ]]> + +https://news.detik.com/detiktv/d-7123134/prabowo-kenang-rizal-ramli-seorang-intelektual-dan-teknokrat + + +https://news.detik.com/berita/d-7123128/fraksi-pdip-dprd-dki-jakarta-puji-kinerja-pj-gubernur-heru-budi +Wed, 03 Jan 2024 20:34:20 +0700 + +<![CDATA[ Fraksi PDIP DPRD DKI Jakarta Puji Kinerja Pj Gubernur Heru Budi ]]> + + + Penasehat Fraksi PDI Perjuangan DPRD DKI Jakarta Pantas Nainggolan mencontohkan Heru kembali mengaktifkan posko pengaduan di Balai Kota DKI Jakarta setiap pagi. ]]> + + + + Penasehat Fraksi PDI Perjuangan DPRD DKI Jakarta Pantas Nainggolan mencontohkan Heru kembali mengaktifkan posko pengaduan di Balai Kota DKI Jakarta setiap pagi. ]]> + +https://news.detik.com/berita/d-7123128/fraksi-pdip-dprd-dki-jakarta-puji-kinerja-pj-gubernur-heru-budi + + +https://news.detik.com/pemilu/d-7123256/relawan-airin-merapat-ke-gaspoll-bro-siap-menangkan-prabowo-gibran-di-banten +Wed, 03 Jan 2024 20:33:32 +0700 + +<![CDATA[ Relawan Airin Merapat ke Gaspoll Bro, Siap Menangkan Prabowo-Gibran di Banten ]]> + + + Dukungan terus mengalir ke Paslon Prabowo Subianto dan Gibran Rakabuming Raka. Kali ini, dukungan tersebut berasal dari Relawan Airin Rachmi Diany di Banten ]]> + + + + Dukungan terus mengalir ke Paslon Prabowo Subianto dan Gibran Rakabuming Raka. Kali ini, dukungan tersebut berasal dari Relawan Airin Rachmi Diany di Banten ]]> + +https://news.detik.com/pemilu/d-7123256/relawan-airin-merapat-ke-gaspoll-bro-siap-menangkan-prabowo-gibran-di-banten + + +https://news.detik.com/pemilu/d-7123125/prabowo-kenang-rizal-ramli-kita-bersahabat-walau-pilih-jalan-berbeda +Wed, 03 Jan 2024 20:32:53 +0700 + +<![CDATA[ Prabowo Kenang Rizal Ramli: Kita Bersahabat Walau Pilih Jalan Berbeda ]]> + + + Prabowo mengenang Rizal Ramli sebagai sosok yang idealis meski kurang sabar. ]]> + + + + Prabowo mengenang Rizal Ramli sebagai sosok yang idealis meski kurang sabar. ]]> + +https://news.detik.com/pemilu/d-7123125/prabowo-kenang-rizal-ramli-kita-bersahabat-walau-pilih-jalan-berbeda + + +https://news.detik.com/berita/d-7123124/kejagung-lelang-6-tas-mewah-barang-rampasan-milik-benny-tjokro-minat +Wed, 03 Jan 2024 20:32:36 +0700 + +<![CDATA[ Kejagung Lelang 6 Tas Mewah Barang Rampasan Milik Benny Tjokro, Minat? ]]> + + + Kejagung akan melelang barang rampasan milik terpidana kasus Jiwasraya, Benny Tjokrosaputro, berupa enam tas mewah. Berminat? ]]> + + + + Kejagung akan melelang barang rampasan milik terpidana kasus Jiwasraya, Benny Tjokrosaputro, berupa enam tas mewah. Berminat? ]]> + +https://news.detik.com/berita/d-7123124/kejagung-lelang-6-tas-mewah-barang-rampasan-milik-benny-tjokro-minat + + +https://news.detik.com/pemilu/d-7123117/kpu-umumkan-11-nama-panelis-debat-ketiga-pilpres-2024-ini-daftarnya +Wed, 03 Jan 2024 20:26:08 +0700 + +<![CDATA[ KPU Umumkan 11 Nama Panelis Debat Ketiga Pilpres 2024, Ini Daftarnya ]]> + + + KPU RI mengumumkan nama panelis debat ketiga Pilpres 2024. Terdapat 11 orang yang telah menyatakan bersedia menjadi panelis debat. ]]> + + + + KPU RI mengumumkan nama panelis debat ketiga Pilpres 2024. Terdapat 11 orang yang telah menyatakan bersedia menjadi panelis debat. ]]> + +https://news.detik.com/pemilu/d-7123117/kpu-umumkan-11-nama-panelis-debat-ketiga-pilpres-2024-ini-daftarnya + + +https://news.detik.com/pemilu/d-7123105/kpu-debat-ketiga-pilpres-2024-akan-digelar-di-istora-senayan +Wed, 03 Jan 2024 20:18:44 +0700 + +<![CDATA[ KPU: Debat Ketiga Pilpres 2024 Akan Digelar di Istora Senayan ]]> + + + Komisi Pemilihan Umum (KPU) RI akan menggelar debat ketiga Pilpres 2024 pekan ini. Lokasi debat ketiga akan digelar di Istora Senayan, Jakarta Pusat. ]]> + + + + Komisi Pemilihan Umum (KPU) RI akan menggelar debat ketiga Pilpres 2024 pekan ini. Lokasi debat ketiga akan digelar di Istora Senayan, Jakarta Pusat. ]]> + +https://news.detik.com/pemilu/d-7123105/kpu-debat-ketiga-pilpres-2024-akan-digelar-di-istora-senayan + + +https://news.detik.com/berita/d-7123100/gempa-m-4-6-terjadi-di-kepulauan-sangihe-sulut +Wed, 03 Jan 2024 20:14:46 +0700 + +<![CDATA[ Gempa M 4,6 Terjadi di Kepulauan Sangihe Sulut ]]> + + + Gempa bermagnitudo (M) 4,6 terjadi di Kepulauan Sangihe, Sulawesi Utara. Gempa berkedalaman 10 km. ]]> + + + + Gempa bermagnitudo (M) 4,6 terjadi di Kepulauan Sangihe, Sulawesi Utara. Gempa berkedalaman 10 km. ]]> + +https://news.detik.com/berita/d-7123100/gempa-m-4-6-terjadi-di-kepulauan-sangihe-sulut + + +https://news.detik.com/pemilu/d-7123097/kelakar-megawati-soal-hadiah-anak-kecil-baca-pancasila-jangan-sepeda-lah +Wed, 03 Jan 2024 20:10:53 +0700 + +<![CDATA[ Kelakar Megawati soal Hadiah Anak Kecil Baca Pancasila: Jangan Sepeda Lah ]]> + + + Ketum PDIP Megawati Soekarnoputri dibuat kagum saat seorang siswa SD yang hafal Pancasila. Momen itu terjadi saat Megawati hadiri rapat TPN Ganjar-Mahfud. ]]> + + + + Ketum PDIP Megawati Soekarnoputri dibuat kagum saat seorang siswa SD yang hafal Pancasila. Momen itu terjadi saat Megawati hadiri rapat TPN Ganjar-Mahfud. ]]> + +https://news.detik.com/pemilu/d-7123097/kelakar-megawati-soal-hadiah-anak-kecil-baca-pancasila-jangan-sepeda-lah + + +https://news.detik.com/pemilu/d-7123093/nurul-arifin-balas-cak-imin-soal-utang-alat-perang-si-vis-pacem-parabellum +Wed, 03 Jan 2024 20:08:23 +0700 + +<![CDATA[ Nurul Arifin Balas Cak Imin soal Utang Alat Perang: Si Vis Pacem Parabellum ]]> + + + Nurul Arifin menyebut Indonesia tetap harus selalu siap untuk menghadapi kondisi apapun, termasuk perang. ]]> + + + + Nurul Arifin menyebut Indonesia tetap harus selalu siap untuk menghadapi kondisi apapun, termasuk perang. ]]> + +https://news.detik.com/pemilu/d-7123093/nurul-arifin-balas-cak-imin-soal-utang-alat-perang-si-vis-pacem-parabellum + + +https://news.detik.com/foto-news/d-7122378/ruwet-apk-caleg-menjamur-di-pohon-pohon +Wed, 03 Jan 2024 20:04:28 +0700 + +<![CDATA[ Ruwet! APK Caleg Menjamur di Pohon-pohon ]]> + + + Alat peraga kampanye (APK) seperti spanduk, poster, dan sejenisnya milik para caleg terpaku di pohon. Tidak hanya satu dua pohon, tetapi menjamur di mana-mana. ]]> + + + + Alat peraga kampanye (APK) seperti spanduk, poster, dan sejenisnya milik para caleg terpaku di pohon. Tidak hanya satu dua pohon, tetapi menjamur di mana-mana. ]]> + +https://news.detik.com/foto-news/d-7122378/ruwet-apk-caleg-menjamur-di-pohon-pohon + + +https://news.detik.com/internasional/d-7123086/keajaiban-saat-semua-penumpang-japan-airlines-lolos-dari-maut +Wed, 03 Jan 2024 20:00:38 +0700 + +<![CDATA[ Keajaiban Saat Semua Penumpang Japan Airlines Lolos dari Maut ]]> + + + Japan Airlines bertabrakan dengan pesawat milik penjaga pantai hingga terjadi ledakan. Namun, penumpang Japan Airlines lolos dari maut seperti keajaiban. ]]> + + + + Japan Airlines bertabrakan dengan pesawat milik penjaga pantai hingga terjadi ledakan. Namun, penumpang Japan Airlines lolos dari maut seperti keajaiban. ]]> + +https://news.detik.com/internasional/d-7123086/keajaiban-saat-semua-penumpang-japan-airlines-lolos-dari-maut + + +https://news.detik.com/pemilu/d-7123082/ratusan-tokoh-agama-kabupaten-grobogan-deklarasi-dukung-prabowo-gibran +Wed, 03 Jan 2024 19:56:13 +0700 + +<![CDATA[ Ratusan Tokoh Agama Kabupaten Grobogan Deklarasi Dukung Prabowo-Gibran ]]> + + + Dukungan tersebut diharapkan dapat membuat paslon nomor urut dua tersebut bisa memenangkan pemilihan presiden satu putaran. ]]> + + + + Dukungan tersebut diharapkan dapat membuat paslon nomor urut dua tersebut bisa memenangkan pemilihan presiden satu putaran. ]]> + +https://news.detik.com/pemilu/d-7123082/ratusan-tokoh-agama-kabupaten-grobogan-deklarasi-dukung-prabowo-gibran + + +https://news.detik.com/detiktv/d-7123077/sosok-rizal-ramli-di-mata-sri-mulyani-hingga-moeldoko +Wed, 03 Jan 2024 19:50:29 +0700 + +<![CDATA[ Sosok Rizal Ramli di Mata Sri Mulyani hingga Moeldoko ]]> + + + Menkeu Sri Mulyani, KSP Moeldoko hingga Mantan Panglima TNI Jenderal (Purn) Gatot Nurmantyo melayat ke rumah duka Rizal Ramli. Mereka pun mengenang sosok Rizal. ]]> + + + + Menkeu Sri Mulyani, KSP Moeldoko hingga Mantan Panglima TNI Jenderal (Purn) Gatot Nurmantyo melayat ke rumah duka Rizal Ramli. Mereka pun mengenang sosok Rizal. ]]> + +https://news.detik.com/detiktv/d-7123077/sosok-rizal-ramli-di-mata-sri-mulyani-hingga-moeldoko + + +https://news.detik.com/detiktv/d-7123070/tkn-soal-spanduk-di-batam-surat-dari-kpu-sebut-area-kampanye +Wed, 03 Jan 2024 19:46:00 +0700 + +<![CDATA[ TKN soal Spanduk di Batam: Surat dari KPU Sebut Area Kampanye ]]> + + + TKN Prabowo-Gibran menjelaskan bahwa pemasangan baliho Prabowo-Gibran di Batam sudah bersurat. Menurutnya surat KPU sebut lokasi itu boleh untuk kampanye. ]]> + + + + TKN Prabowo-Gibran menjelaskan bahwa pemasangan baliho Prabowo-Gibran di Batam sudah bersurat. Menurutnya surat KPU sebut lokasi itu boleh untuk kampanye. ]]> + +https://news.detik.com/detiktv/d-7123070/tkn-soal-spanduk-di-batam-surat-dari-kpu-sebut-area-kampanye + + +https://news.detik.com/pemilu/d-7123069/tgb-soal-debat-pilpres-ketiga-mnc-group-akan-sangat-profesional +Wed, 03 Jan 2024 19:44:38 +0700 + +<![CDATA[ TGB soal Debat Pilpres Ketiga: MNC Group Akan Sangat Profesional ]]> + + + Elite TPN Ganjar-Mahfud, M Zainul Majdi atau Tuan Guru Bajang (TGB), mengatakan MNC Group akan profesional gelar debat pilpres ketiga. ]]> + + + + Elite TPN Ganjar-Mahfud, M Zainul Majdi atau Tuan Guru Bajang (TGB), mengatakan MNC Group akan profesional gelar debat pilpres ketiga. ]]> + +https://news.detik.com/pemilu/d-7123069/tgb-soal-debat-pilpres-ketiga-mnc-group-akan-sangat-profesional + + +https://news.detik.com/berita/d-7123049/antisipasi-banjir-pemkot-semarang-tinggikan-jembatan-nogososro +Wed, 03 Jan 2024 19:38:56 +0700 + +<![CDATA[ Antisipasi Banjir, Pemkot Semarang Tinggikan Jembatan Nogososro ]]> + + + Kepala Dinas Pekerjaan Umum (DPU) Kota Semarang Suwarto menerangkan rendahnya konstruksi Jembatan Nogososro jadi pemicu adanya material sampah yang tersangkut. ]]> + + + + Kepala Dinas Pekerjaan Umum (DPU) Kota Semarang Suwarto menerangkan rendahnya konstruksi Jembatan Nogososro jadi pemicu adanya material sampah yang tersangkut. ]]> + +https://news.detik.com/berita/d-7123049/antisipasi-banjir-pemkot-semarang-tinggikan-jembatan-nogososro + + +https://news.detik.com/foto-news/d-7122251/aksi-nekat-pengendara-terobos-banjir-di-jambi +Wed, 03 Jan 2024 19:35:13 +0700 + +<![CDATA[ Aksi Nekat Pengendara Terobos Banjir di Jambi ]]> + + + Pengendara nekat menerobos banjir yang merendam jalan penghubung Jambi-Kerinci di Jambi, Rabu (3/1/2024). Beberapa di antaranya mogok usai menerobos banjir. ]]> + + + + Pengendara nekat menerobos banjir yang merendam jalan penghubung Jambi-Kerinci di Jambi, Rabu (3/1/2024). Beberapa di antaranya mogok usai menerobos banjir. ]]> + +https://news.detik.com/foto-news/d-7122251/aksi-nekat-pengendara-terobos-banjir-di-jambi + + +https://news.detik.com/berita/d-7123045/prabowo-melayat-ke-rumah-duka-rizal-ramli +Wed, 03 Jan 2024 19:35:07 +0700 + +<![CDATA[ Prabowo Melayat ke Rumah Duka Rizal Ramli ]]> + + + Menteri Pertahanan Prabowo Subianto melayat ke rumah duka mantan Menko Maritim Rizal Ramli. ]]> + + + + Menteri Pertahanan Prabowo Subianto melayat ke rumah duka mantan Menko Maritim Rizal Ramli. ]]> + +https://news.detik.com/berita/d-7123045/prabowo-melayat-ke-rumah-duka-rizal-ramli + + +https://news.detik.com/foto-news/d-7123129/potret-pimpinan-ponpes-buntet-cirebon-dukung-prabowo-gibran +Wed, 03 Jan 2024 19:29:57 +0700 + +<![CDATA[ Potret Pimpinan Ponpes Buntet Cirebon Dukung Prabowo-Gibran ]]> + + + Pimpinan Pondok Pesantren (Ponpes) Buntet Cirebon KH Adib Rofiuddin Izza menyatakan dukungannya kepada pasangan Prabowo-Gibran. Begini momennya. ]]> + + + + Pimpinan Pondok Pesantren (Ponpes) Buntet Cirebon KH Adib Rofiuddin Izza menyatakan dukungannya kepada pasangan Prabowo-Gibran. Begini momennya. ]]> + +https://news.detik.com/foto-news/d-7123129/potret-pimpinan-ponpes-buntet-cirebon-dukung-prabowo-gibran + + +https://news.detik.com/berita/d-7123040/polisi-gandeng-uptp3a-dampingi-anak-tiri-diperkosa-ayahnya-di-jaksel +Wed, 03 Jan 2024 19:28:59 +0700 + +<![CDATA[ Polisi Gandeng UPTP3A Dampingi Anak Tiri Diperkosa Ayahnya di Jaksel ]]> + + + Polisi menggandeng UPTP3A untuk memulihkan kondisi psikologis anak di Pesanggrahan, Jakarta Selatan, korban pencabulan ayah tirinya. ]]> + + + + Polisi menggandeng UPTP3A untuk memulihkan kondisi psikologis anak di Pesanggrahan, Jakarta Selatan, korban pencabulan ayah tirinya. ]]> + +https://news.detik.com/berita/d-7123040/polisi-gandeng-uptp3a-dampingi-anak-tiri-diperkosa-ayahnya-di-jaksel + + +https://news.detik.com/pemilu/d-7123177/tkn-fanta-prabowo-gibran-gelar-layanan-kesehatan-gratis-di-jakarta +Wed, 03 Jan 2024 19:26:47 +0700 + +<![CDATA[ TKN Fanta Prabowo-Gibran Gelar Layanan Kesehatan Gratis di Jakarta ]]> + + + TKN Fanta Prabowo-Gibran, khususnya klaster Fanta Health, membuat program kesehatan masyarakat. Program kesehatan ini yaitu layanan kesehatan gratis di Jakarta. ]]> + + + + TKN Fanta Prabowo-Gibran, khususnya klaster Fanta Health, membuat program kesehatan masyarakat. Program kesehatan ini yaitu layanan kesehatan gratis di Jakarta. ]]> + +https://news.detik.com/pemilu/d-7123177/tkn-fanta-prabowo-gibran-gelar-layanan-kesehatan-gratis-di-jakarta + + +https://news.detik.com/berita/d-7123032/pria-di-jaksel-cabuli-anak-tiri-polisi-bakal-periksa-ibu-korban +Wed, 03 Jan 2024 19:22:06 +0700 + +<![CDATA[ Pria di Jaksel Cabuli Anak Tiri, Polisi Bakal Periksa Ibu Korban ]]> + + + Pria di Pesanggrahan, Jaksel tega mencabuli anak tirinya berulang kali selama 1,5 tahun. Polisi bakal memeriksa ibu korban. ]]> + + + + Pria di Pesanggrahan, Jaksel tega mencabuli anak tirinya berulang kali selama 1,5 tahun. Polisi bakal memeriksa ibu korban. ]]> + +https://news.detik.com/berita/d-7123032/pria-di-jaksel-cabuli-anak-tiri-polisi-bakal-periksa-ibu-korban + + +https://news.detik.com/pemilu/d-7123026/bawaslu-ri-temukan-320-pelanggaran-pemilu-33-kasus-soal-netralitas-asn +Wed, 03 Jan 2024 19:17:20 +0700 + +<![CDATA[ Bawaslu RI Temukan 320 Pelanggaran Pemilu, 33 Kasus Soal Netralitas ASN ]]> + + + Badan Pengawas Pemilu (Bawaslu) RI menyampaikan laporan pengawasan selama masa kampanye. Sampai saat ini, Bawaslu telah menemukan ada 320 pelanggaran pemilu. ]]> + + + + Badan Pengawas Pemilu (Bawaslu) RI menyampaikan laporan pengawasan selama masa kampanye. Sampai saat ini, Bawaslu telah menemukan ada 320 pelanggaran pemilu. ]]> + +https://news.detik.com/pemilu/d-7123026/bawaslu-ri-temukan-320-pelanggaran-pemilu-33-kasus-soal-netralitas-asn + + +https://news.detik.com/pemilu/d-7123023/atikoh-sebut-warga-pedagang-tak-butuh-harga-bapok-murah-tapi-stabil +Wed, 03 Jan 2024 19:15:07 +0700 + +<![CDATA[ Atikoh Sebut Warga & Pedagang Tak Butuh Harga Bapok Murah, tapi Stabil ]]> + + + Atikoh menekankan saat ini baik masyarakat maupun pedagang, keduanya membutuhkan upaya stabilisasi harga bahan kebutuhan pokok (bapok). ]]> + + + + Atikoh menekankan saat ini baik masyarakat maupun pedagang, keduanya membutuhkan upaya stabilisasi harga bahan kebutuhan pokok (bapok). ]]> + +https://news.detik.com/pemilu/d-7123023/atikoh-sebut-warga-pedagang-tak-butuh-harga-bapok-murah-tapi-stabil + + +https://news.detik.com/detiktv/d-7123019/pemimpin-hamas-soal-wakilnya-tewas-oleh-israel-tindakan-teroris +Wed, 03 Jan 2024 19:12:13 +0700 + +<![CDATA[ Pemimpin Hamas soal Wakilnya Tewas oleh Israel: Tindakan Teroris! ]]> + + + Pemimpin Hamas mengecam tindakan Israel atas serangan drone di Lebanon yang menewaskan wakilnya. Menurut Haniyeh, tindakan Israel merupakan tindakan teroris. ]]> + + + + Pemimpin Hamas mengecam tindakan Israel atas serangan drone di Lebanon yang menewaskan wakilnya. Menurut Haniyeh, tindakan Israel merupakan tindakan teroris. ]]> + +https://news.detik.com/detiktv/d-7123019/pemimpin-hamas-soal-wakilnya-tewas-oleh-israel-tindakan-teroris + + +https://news.detik.com/pemilu/d-7123018/gelar-simulasi-pencoblosan-pilpres-pakai-2-paslon-kpu-banten-klarifikasi +Wed, 03 Jan 2024 19:12:01 +0700 + +<![CDATA[ Gelar Simulasi Pencoblosan Pilpres Pakai 2 Paslon, KPU Banten Klarifikasi ]]> + + + Komisioner KPU Banten Ahmad Suja'i memberikan klarifikasi terkait simulasi pencoblosan calon (paslon) presiden dan wakil presiden menggunakan 2 gambar paslon. ]]> + + + + Komisioner KPU Banten Ahmad Suja'i memberikan klarifikasi terkait simulasi pencoblosan calon (paslon) presiden dan wakil presiden menggunakan 2 gambar paslon. ]]> + +https://news.detik.com/pemilu/d-7123018/gelar-simulasi-pencoblosan-pilpres-pakai-2-paslon-kpu-banten-klarifikasi + + +https://news.detik.com/detiktv/d-7123017/potret-miris-warga-gaza-hadapi-musim-dingin-di-kamp-pengungsian +Wed, 03 Jan 2024 19:11:57 +0700 + +<![CDATA[ Potret Miris Warga Gaza Hadapi Musim Dingin di Kamp Pengungsian ]]> + + + Warga Gaza harus menghadapi musim dingin di kamp pengungsian di Rafah. Kehidupan mereka miris lantaran tak adanya tempat berlindung yang layak. ]]> + + + + Warga Gaza harus menghadapi musim dingin di kamp pengungsian di Rafah. Kehidupan mereka miris lantaran tak adanya tempat berlindung yang layak. ]]> + +https://news.detik.com/detiktv/d-7123017/potret-miris-warga-gaza-hadapi-musim-dingin-di-kamp-pengungsian + + +https://news.detik.com/pemilu/d-7123016/tkn-sebut-tak-ada-persiapan-khusus-prabowo-jelang-debat-ketiga +Wed, 03 Jan 2024 19:10:43 +0700 + +<![CDATA[ TKN Sebut Tak Ada Persiapan Khusus Prabowo Jelang Debat Ketiga ]]> + + + Tim Kampanye Nasional (TKN) menyampaikan capres nomor urut 2 Prabowo Subianto tidak ada persiapan khusus jelang debat ketiga Pilpres 2024. ]]> + + + + Tim Kampanye Nasional (TKN) menyampaikan capres nomor urut 2 Prabowo Subianto tidak ada persiapan khusus jelang debat ketiga Pilpres 2024. ]]> + +https://news.detik.com/pemilu/d-7123016/tkn-sebut-tak-ada-persiapan-khusus-prabowo-jelang-debat-ketiga + + +https://news.detik.com/pemilu/d-7123014/tkn-soal-viral-satpol-pp-garut-dukung-gibran-kalau-langgar-aturan-tindak +Wed, 03 Jan 2024 19:09:41 +0700 + +<![CDATA[ TKN soal Viral Satpol PP Garut Dukung Gibran: Kalau Langgar Aturan, Tindak ]]> + + + Viral sejumlah anggota Satpol PP Garut mendukung Gibran Rakabuming Raka. Sekretaris TKN Prabowo-Gibran, Nusron Wahid menyebut Satpol PP Garut harus ditindak. ]]> + + + + Viral sejumlah anggota Satpol PP Garut mendukung Gibran Rakabuming Raka. Sekretaris TKN Prabowo-Gibran, Nusron Wahid menyebut Satpol PP Garut harus ditindak. ]]> + +https://news.detik.com/pemilu/d-7123014/tkn-soal-viral-satpol-pp-garut-dukung-gibran-kalau-langgar-aturan-tindak + + +https://news.detik.com/detiktv/d-7123002/jokowi-resmikan-6-jembatan-di-lintas-utara-senilai-rp-292-miliar +Wed, 03 Jan 2024 18:57:35 +0700 + +<![CDATA[ Jokowi Resmikan 6 Jembatan di Lintas Utara Senilai Rp 292 Miliar ]]> + + + Presiden Jokowi meresmikan enam jembatan di jalur lintas utara Jawa Tengah. Total nilai konstruksinya mencapai Rp 292 miliar dan total investasi Rp705 miliar. ]]> + + + + Presiden Jokowi meresmikan enam jembatan di jalur lintas utara Jawa Tengah. Total nilai konstruksinya mencapai Rp 292 miliar dan total investasi Rp705 miliar. ]]> + +https://news.detik.com/detiktv/d-7123002/jokowi-resmikan-6-jembatan-di-lintas-utara-senilai-rp-292-miliar + + +https://news.detik.com/detiktv/d-7122989/megawati-tolak-beri-hadiah-sepeda-anak-sd-hafal-pancasila-malah-minta-rumah +Wed, 03 Jan 2024 18:51:42 +0700 + +<![CDATA[ Megawati Tolak Beri Hadiah Sepeda, Anak SD Hafal Pancasila Malah Minta Rumah ]]> + + + Ketum PDIP Megawati Soekarnoputri sempat bercengkrama dengan seorang anak SD. Bocah tersebut sempat minta hadiah rumah saat berhasil menghafalkan Pancasila. ]]> + + + + Ketum PDIP Megawati Soekarnoputri sempat bercengkrama dengan seorang anak SD. Bocah tersebut sempat minta hadiah rumah saat berhasil menghafalkan Pancasila. ]]> + +https://news.detik.com/detiktv/d-7122989/megawati-tolak-beri-hadiah-sepeda-anak-sd-hafal-pancasila-malah-minta-rumah + + +https://news.detik.com/berita/d-7122982/sleman-diterpa-hujan-angin-tenda-di-tebing-breksi-rusak +Wed, 03 Jan 2024 18:46:45 +0700 + +<![CDATA[ Sleman Diterpa Hujan-Angin, Tenda di Tebing Breksi Rusak ]]> + + + Hujan lebat disertai angin kencang melanda Sleman siang tadi. Akibatnya, rumah warga tertimpa pohon hingga bangunan di kawasan wisata Tebing Breksi rusak. ]]> + + + + Hujan lebat disertai angin kencang melanda Sleman siang tadi. Akibatnya, rumah warga tertimpa pohon hingga bangunan di kawasan wisata Tebing Breksi rusak. ]]> + +https://news.detik.com/berita/d-7122982/sleman-diterpa-hujan-angin-tenda-di-tebing-breksi-rusak + + +https://news.detik.com/pemilu/d-7122967/ppln-kuala-lumpur-buka-suara-soal-viral-wni-ngaku-tak-terdaftar-dpt-pemilu +Wed, 03 Jan 2024 18:36:14 +0700 + +<![CDATA[ PPLN Kuala Lumpur Buka Suara soal Viral WNI Ngaku Tak Terdaftar DPT Pemilu ]]> + + + PPLN Kuala Lumpur menanggapi soal video viral yang bernarasikan WNI di Kuala Lumpur tidak termuat dalam DPT Pemilu 2024. Begini penjelasannya. ]]> + + + + PPLN Kuala Lumpur menanggapi soal video viral yang bernarasikan WNI di Kuala Lumpur tidak termuat dalam DPT Pemilu 2024. Begini penjelasannya. ]]> + +https://news.detik.com/pemilu/d-7122967/ppln-kuala-lumpur-buka-suara-soal-viral-wni-ngaku-tak-terdaftar-dpt-pemilu + + +https://news.detik.com/foto-news/d-7122246/delapan-rumah-di-taman-sari-jakbar-hangus-terbakar +Wed, 03 Jan 2024 18:34:45 +0700 + +<![CDATA[ Delapan Rumah di Taman Sari Jakbar Hangus Terbakar ]]> + + + Kebakaran melanda permukiman warga di Jalan Keagungan, Taman Sari, Jakarta Barat, Selasa (2/1/2024) malam. Kebakaran itu menghanguskan 8 rumah. ]]> + + + + Kebakaran melanda permukiman warga di Jalan Keagungan, Taman Sari, Jakarta Barat, Selasa (2/1/2024) malam. Kebakaran itu menghanguskan 8 rumah. ]]> + +https://news.detik.com/foto-news/d-7122246/delapan-rumah-di-taman-sari-jakbar-hangus-terbakar + + +https://news.detik.com/berita/d-7122963/putra-bungsu-paku-alam-x-akan-menikah-jokowi-hingga-3-capres-diundang +Wed, 03 Jan 2024 18:34:07 +0700 + +<![CDATA[ Putra Bungsu Paku Alam X Akan Menikah, Jokowi hingga 3 Capres Diundang ]]> + + + Pura Pakualaman akan menggelar hajat putra bungsu Kanjeng Gusti Pangeran Adipati Aryo Paku Alam X. Presiden Jokowi dan 3 capres akan diundang. ]]> + + + + Pura Pakualaman akan menggelar hajat putra bungsu Kanjeng Gusti Pangeran Adipati Aryo Paku Alam X. Presiden Jokowi dan 3 capres akan diundang. ]]> + +https://news.detik.com/berita/d-7122963/putra-bungsu-paku-alam-x-akan-menikah-jokowi-hingga-3-capres-diundang + + +https://news.detik.com/berita/d-7122961/polisi-pria-di-jaksel-cabuli-anak-tiri-berulang-kali-selama-1-5-tahun +Wed, 03 Jan 2024 18:33:19 +0700 + +<![CDATA[ Polisi: Pria di Jaksel Cabuli Anak Tiri Berulang Kali Selama 1,5 Tahun ]]> + + + Pria di Pesanggrahan, Jakarta Selatan (Jaksel), inisial H (42) tega mencabuli anak tirinya, SRP (12), berulang kali selama 1,5 tahun. ]]> + + + + Pria di Pesanggrahan, Jakarta Selatan (Jaksel), inisial H (42) tega mencabuli anak tirinya, SRP (12), berulang kali selama 1,5 tahun. ]]> + +https://news.detik.com/berita/d-7122961/polisi-pria-di-jaksel-cabuli-anak-tiri-berulang-kali-selama-1-5-tahun + + +https://news.detik.com/berita/d-7122956/keji-pria-di-jaksel-perkosa-anak-tiri-pelaku-ditangkap-polisi +Wed, 03 Jan 2024 18:30:23 +0700 + +<![CDATA[ Keji! Pria di Jaksel Perkosa Anak Tiri, Pelaku Ditangkap Polisi ]]> + + + Seorang pria di Pesanggrahan, Jakarta Selatan, tega memperkosa anak tirinya. Korban yang masih duduk di kelas 6 SD itu mengalami trauma berat. ]]> + + + + Seorang pria di Pesanggrahan, Jakarta Selatan, tega memperkosa anak tirinya. Korban yang masih duduk di kelas 6 SD itu mengalami trauma berat. ]]> + +https://news.detik.com/berita/d-7122956/keji-pria-di-jaksel-perkosa-anak-tiri-pelaku-ditangkap-polisi + + +https://news.detik.com/foto-news/d-7123111/momen-relawan-erick-thohir-deklarasi-dukung-prabowo-gibran +Wed, 03 Jan 2024 18:22:09 +0700 + +<![CDATA[ Momen Relawan Erick Thohir Deklarasi Dukung Prabowo-Gibran ]]> + + + Sejumlah relawan Erick Thohir mendeklarasikan dukungan terhadap Prabowo-Gibran. Sosok keduanya dinilai bisa membuat Indonesia lebih maju. ]]> + + + + Sejumlah relawan Erick Thohir mendeklarasikan dukungan terhadap Prabowo-Gibran. Sosok keduanya dinilai bisa membuat Indonesia lebih maju. ]]> + +https://news.detik.com/foto-news/d-7123111/momen-relawan-erick-thohir-deklarasi-dukung-prabowo-gibran + + +https://news.detik.com/berita/d-7122943/jokowi-kunjungi-pabrik-teh-di-tegal-karyawan-tak-sangka-bertemu-presiden +Wed, 03 Jan 2024 18:20:30 +0700 + +<![CDATA[ Jokowi Kunjungi Pabrik Teh di Tegal, Karyawan Tak Sangka Bertemu Presiden ]]> + + + Presiden Jokowi mengunjungi pabrik teh di Kabupaten Tegal, Jawa Tengah. Kedatangan Jokowi disambut para karyawan pabrik. ]]> + + + + Presiden Jokowi mengunjungi pabrik teh di Kabupaten Tegal, Jawa Tengah. Kedatangan Jokowi disambut para karyawan pabrik. ]]> + +https://news.detik.com/berita/d-7122943/jokowi-kunjungi-pabrik-teh-di-tegal-karyawan-tak-sangka-bertemu-presiden + + +https://news.detik.com/bbc-world/d-7122937/begini-cara-awak-japan-airlines-evakuasi-ratusan-penumpang-tanpa-korban-jiwa +Wed, 03 Jan 2024 18:17:06 +0700 + +<![CDATA[ Begini Cara Awak Japan Airlines Evakuasi Ratusan Penumpang Tanpa Korban Jiwa ]]> + + + Seluruh penumpang pesawat Japan Airlines selamat dari maut pasca-tabrakan di Bandara Haneda, Tokyo, pada Selasa (2/1). Apa faktor utama keberhasilannya? ]]> + + + + Seluruh penumpang pesawat Japan Airlines selamat dari maut pasca-tabrakan di Bandara Haneda, Tokyo, pada Selasa (2/1). Apa faktor utama keberhasilannya? ]]> + +https://news.detik.com/bbc-world/d-7122937/begini-cara-awak-japan-airlines-evakuasi-ratusan-penumpang-tanpa-korban-jiwa + + +https://news.detik.com/pemilu/d-7122925/cak-imin-klaim-jabar-jadi-kekuatan-minimal-menang-50-persen +Wed, 03 Jan 2024 18:10:23 +0700 + +<![CDATA[ Cak Imin Klaim Jabar Jadi Kekuatan: Minimal Menang 50 Persen ]]> + + + Cak Imin menyebut Jawa Barat sebagai salah satu basis kekuatan pasangan AMIN. Cak Imin menargetkan kemenangan minimal 50%. ]]> + + + + Cak Imin menyebut Jawa Barat sebagai salah satu basis kekuatan pasangan AMIN. Cak Imin menargetkan kemenangan minimal 50%. ]]> + +https://news.detik.com/pemilu/d-7122925/cak-imin-klaim-jabar-jadi-kekuatan-minimal-menang-50-persen + + +https://news.detik.com/detiktv/d-7122919/tpn-ganjar-mahfud-bantah-usul-penghentian-program-bansos +Wed, 03 Jan 2024 18:09:16 +0700 + +<![CDATA[ TPN Ganjar-Mahfud Bantah Usul Penghentian Program Bansos ]]> + + + Tim Pemenangan Nasional (TPN) Ganjar-Mahfud meluruskan peryataan soal penundaan bansos. ]]> + + + + Tim Pemenangan Nasional (TPN) Ganjar-Mahfud meluruskan peryataan soal penundaan bansos. ]]> + +https://news.detik.com/detiktv/d-7122919/tpn-ganjar-mahfud-bantah-usul-penghentian-program-bansos + + +https://news.detik.com/internasional/d-7122915/5-berita-terpopuler-internasional-hari-ini +Wed, 03 Jan 2024 18:06:06 +0700 + +<![CDATA[ 5 Berita Terpopuler Internasional Hari Ini ]]> + + + Jumlah korban tewas akibat gempa bumi di Jepang bertambah menjadi 62 orang. Hamas mengakui wakil pemimpinnya, Saleh al-Aruri, tewas di Lebanon. ]]> + + + + Jumlah korban tewas akibat gempa bumi di Jepang bertambah menjadi 62 orang. Hamas mengakui wakil pemimpinnya, Saleh al-Aruri, tewas di Lebanon. ]]> + +https://news.detik.com/internasional/d-7122915/5-berita-terpopuler-internasional-hari-ini + + +https://news.detik.com/foto-news/d-7122201/penampakan-rumah-rusak-akibat-gempa-di-sumedang +Wed, 03 Jan 2024 18:05:26 +0700 + +<![CDATA[ Penampakan Rumah Rusak Akibat Gempa di Sumedang ]]> + + + Gempa bumi berkekuatan magnitudo (M) 4,8 menimbulkan kerusakan khususnya rumah di Sumedang, Jawa Barat. Ini penampakannya. ]]> + + + + Gempa bumi berkekuatan magnitudo (M) 4,8 menimbulkan kerusakan khususnya rumah di Sumedang, Jawa Barat. Ini penampakannya. ]]> + +https://news.detik.com/foto-news/d-7122201/penampakan-rumah-rusak-akibat-gempa-di-sumedang + + +https://news.detik.com/berita/d-7122908/sri-mulyani-kenang-komentar-rizal-ramli-soal-sepatu-hijau-stabilo +Wed, 03 Jan 2024 18:01:53 +0700 + +<![CDATA[ Sri Mulyani Kenang Komentar Rizal Ramli soal 'Sepatu Hijau Stabilo' ]]> + + + Menteri Keuangan Sri Mulyani Indrawati melayat ke rumah duka almarhum Rizal Ramli. Ini kenangan Sri Mulyani mengenai sosok Rizal Ramli. ]]> + + + + Menteri Keuangan Sri Mulyani Indrawati melayat ke rumah duka almarhum Rizal Ramli. Ini kenangan Sri Mulyani mengenai sosok Rizal Ramli. ]]> + +https://news.detik.com/berita/d-7122908/sri-mulyani-kenang-komentar-rizal-ramli-soal-sepatu-hijau-stabilo + + +https://news.detik.com/bbc-world/d-7122906/penuturan-penumpang-japan-airlines-selamat-dari-pesawat-yang-terbakar +Wed, 03 Jan 2024 18:01:29 +0700 + +<![CDATA[ Penuturan Penumpang Japan Airlines Selamat dari Pesawat yang Terbakar ]]> + + + Insiden terbakarnya Japan Airlines dengan nomor penerbangan JAL516 dan bagaimana para penumpangnya selamat adalah sebuah kisah yang luar biasa. ]]> + + + + Insiden terbakarnya Japan Airlines dengan nomor penerbangan JAL516 dan bagaimana para penumpangnya selamat adalah sebuah kisah yang luar biasa. ]]> + +https://news.detik.com/bbc-world/d-7122906/penuturan-penumpang-japan-airlines-selamat-dari-pesawat-yang-terbakar + + +https://news.detik.com/dw/d-7122900/penyelidikan-penyebab-tabrakan-japan-airlines-fokus-di-landasan-pacu +Wed, 03 Jan 2024 17:55:04 +0700 + +<![CDATA[ Penyelidikan Penyebab Tabrakan Japan Airlines Fokus di Landasan Pacu ]]> + + + Penyelidikan mencari tahu penyebab tabrakan pesawat Japan Airlines dengan pesawat Penjaga Pantai Jepang akan fokus pada masalah keselamatan di landasan pacu. ]]> + + + + Penyelidikan mencari tahu penyebab tabrakan pesawat Japan Airlines dengan pesawat Penjaga Pantai Jepang akan fokus pada masalah keselamatan di landasan pacu. ]]> + +https://news.detik.com/dw/d-7122900/penyelidikan-penyebab-tabrakan-japan-airlines-fokus-di-landasan-pacu + + +https://news.detik.com/bbc-world/d-7122892/upaya-penyelamatan-korban-gempa-jepang-terhambat-rumah-roboh-jalan-rusak +Wed, 03 Jan 2024 17:47:26 +0700 + +<![CDATA[ Upaya Penyelamatan Korban Gempa Jepang Terhambat Rumah Roboh-Jalan Rusak ]]> + + + Upaya penyelamatan terus berlanjut di Jepang setelah sedikitnya 62 orang meninggal akibat gempa dahsyat yang melanda negara itu. ]]> + + + + Upaya penyelamatan terus berlanjut di Jepang setelah sedikitnya 62 orang meninggal akibat gempa dahsyat yang melanda negara itu. ]]> + +https://news.detik.com/bbc-world/d-7122892/upaya-penyelamatan-korban-gempa-jepang-terhambat-rumah-roboh-jalan-rusak + + +https://news.detik.com/pemilu/d-7122890/kala-megawati-tanya-pancasila-ke-anak-kecil-saat-hadiri-rapat-tpn-ganjar +Wed, 03 Jan 2024 17:45:29 +0700 + +<![CDATA[ Kala Megawati Tanya Pancasila ke Anak Kecil saat Hadiri Rapat TPN Ganjar ]]> + + + Ketum PDIP Megawati Soekarnoputri menghadiri rapat TPN Ganjar-Mahfud. Sebelum masuk ruang rapat, Megawati sempat bertanya Pancasila kepada seorang anak kecil. ]]> + + + + Ketum PDIP Megawati Soekarnoputri menghadiri rapat TPN Ganjar-Mahfud. Sebelum masuk ruang rapat, Megawati sempat bertanya Pancasila kepada seorang anak kecil. ]]> + +https://news.detik.com/pemilu/d-7122890/kala-megawati-tanya-pancasila-ke-anak-kecil-saat-hadiri-rapat-tpn-ganjar + + +https://news.detik.com/pemilu/d-7122888/kpu-rapat-dengan-timses-paslon-media-penyelenggara-finalisasi-debat-ke-3 +Wed, 03 Jan 2024 17:43:04 +0700 + +<![CDATA[ KPU Rapat dengan Timses Paslon-Media Penyelenggara, Finalisasi Debat ke-3 ]]> + + + KPU RI menggelar rapat bersama tim pasangan calon sore ini. Rapat tersebut membahas terkait finalisasi lokasi hingga layout debat ketiga Pilpres 2024. ]]> + + + + KPU RI menggelar rapat bersama tim pasangan calon sore ini. Rapat tersebut membahas terkait finalisasi lokasi hingga layout debat ketiga Pilpres 2024. ]]> + +https://news.detik.com/pemilu/d-7122888/kpu-rapat-dengan-timses-paslon-media-penyelenggara-finalisasi-debat-ke-3 + + +https://news.detik.com/pemilu/d-7122884/tkn-cak-imin-tak-ingin-pertahanan-indonesia-disegani +Wed, 03 Jan 2024 17:41:52 +0700 + +<![CDATA[ TKN: Cak Imin Tak Ingin Pertahanan Indonesia Disegani ]]> + + + Cak Imin menyoroti utang pemerintah soal alat perang padahal tak dalam kondisi perang. Jubir TKN Bobby menilai Cak Imin tidak ingin pertahanan RI disegani. ]]> + + + + Cak Imin menyoroti utang pemerintah soal alat perang padahal tak dalam kondisi perang. Jubir TKN Bobby menilai Cak Imin tidak ingin pertahanan RI disegani. ]]> + +https://news.detik.com/pemilu/d-7122884/tkn-cak-imin-tak-ingin-pertahanan-indonesia-disegani + + + diff --git a/search/lunr.js b/search/lunr.js new file mode 100644 index 00000000..aca0a167 --- /dev/null +++ b/search/lunr.js @@ -0,0 +1,3475 @@ +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + */ + +;(function(){ + +/** + * A convenience function for configuring and constructing + * a new lunr Index. + * + * A lunr.Builder instance is created and the pipeline setup + * with a trimmer, stop word filter and stemmer. + * + * This builder object is yielded to the configuration function + * that is passed as a parameter, allowing the list of fields + * and other builder parameters to be customised. + * + * All documents _must_ be added within the passed config function. + * + * @example + * var idx = lunr(function () { + * this.field('title') + * this.field('body') + * this.ref('id') + * + * documents.forEach(function (doc) { + * this.add(doc) + * }, this) + * }) + * + * @see {@link lunr.Builder} + * @see {@link lunr.Pipeline} + * @see {@link lunr.trimmer} + * @see {@link lunr.stopWordFilter} + * @see {@link lunr.stemmer} + * @namespace {function} lunr + */ +var lunr = function (config) { + var builder = new lunr.Builder + + builder.pipeline.add( + lunr.trimmer, + lunr.stopWordFilter, + lunr.stemmer + ) + + builder.searchPipeline.add( + lunr.stemmer + ) + + config.call(builder, builder) + return builder.build() +} + +lunr.version = "2.3.9" +/*! + * lunr.utils + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * A namespace containing utils for the rest of the lunr library + * @namespace lunr.utils + */ +lunr.utils = {} + +/** + * Print a warning message to the console. + * + * @param {String} message The message to be printed. + * @memberOf lunr.utils + * @function + */ +lunr.utils.warn = (function (global) { + /* eslint-disable no-console */ + return function (message) { + if (global.console && console.warn) { + console.warn(message) + } + } + /* eslint-enable no-console */ +})(this) + +/** + * Convert an object to a string. + * + * In the case of `null` and `undefined` the function returns + * the empty string, in all other cases the result of calling + * `toString` on the passed object is returned. + * + * @param {Any} obj The object to convert to a string. + * @return {String} string representation of the passed object. + * @memberOf lunr.utils + */ +lunr.utils.asString = function (obj) { + if (obj === void 0 || obj === null) { + return "" + } else { + return obj.toString() + } +} + +/** + * Clones an object. + * + * Will create a copy of an existing object such that any mutations + * on the copy cannot affect the original. + * + * Only shallow objects are supported, passing a nested object to this + * function will cause a TypeError. + * + * Objects with primitives, and arrays of primitives are supported. + * + * @param {Object} obj The object to clone. + * @return {Object} a clone of the passed object. + * @throws {TypeError} when a nested object is passed. + * @memberOf Utils + */ +lunr.utils.clone = function (obj) { + if (obj === null || obj === undefined) { + return obj + } + + var clone = Object.create(null), + keys = Object.keys(obj) + + for (var i = 0; i < keys.length; i++) { + var key = keys[i], + val = obj[key] + + if (Array.isArray(val)) { + clone[key] = val.slice() + continue + } + + if (typeof val === 'string' || + typeof val === 'number' || + typeof val === 'boolean') { + clone[key] = val + continue + } + + throw new TypeError("clone is not deep and does not support nested objects") + } + + return clone +} +lunr.FieldRef = function (docRef, fieldName, stringValue) { + this.docRef = docRef + this.fieldName = fieldName + this._stringValue = stringValue +} + +lunr.FieldRef.joiner = "/" + +lunr.FieldRef.fromString = function (s) { + var n = s.indexOf(lunr.FieldRef.joiner) + + if (n === -1) { + throw "malformed field ref string" + } + + var fieldRef = s.slice(0, n), + docRef = s.slice(n + 1) + + return new lunr.FieldRef (docRef, fieldRef, s) +} + +lunr.FieldRef.prototype.toString = function () { + if (this._stringValue == undefined) { + this._stringValue = this.fieldName + lunr.FieldRef.joiner + this.docRef + } + + return this._stringValue +} +/*! + * lunr.Set + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * A lunr set. + * + * @constructor + */ +lunr.Set = function (elements) { + this.elements = Object.create(null) + + if (elements) { + this.length = elements.length + + for (var i = 0; i < this.length; i++) { + this.elements[elements[i]] = true + } + } else { + this.length = 0 + } +} + +/** + * A complete set that contains all elements. + * + * @static + * @readonly + * @type {lunr.Set} + */ +lunr.Set.complete = { + intersect: function (other) { + return other + }, + + union: function () { + return this + }, + + contains: function () { + return true + } +} + +/** + * An empty set that contains no elements. + * + * @static + * @readonly + * @type {lunr.Set} + */ +lunr.Set.empty = { + intersect: function () { + return this + }, + + union: function (other) { + return other + }, + + contains: function () { + return false + } +} + +/** + * Returns true if this set contains the specified object. + * + * @param {object} object - Object whose presence in this set is to be tested. + * @returns {boolean} - True if this set contains the specified object. + */ +lunr.Set.prototype.contains = function (object) { + return !!this.elements[object] +} + +/** + * Returns a new set containing only the elements that are present in both + * this set and the specified set. + * + * @param {lunr.Set} other - set to intersect with this set. + * @returns {lunr.Set} a new set that is the intersection of this and the specified set. + */ + +lunr.Set.prototype.intersect = function (other) { + var a, b, elements, intersection = [] + + if (other === lunr.Set.complete) { + return this + } + + if (other === lunr.Set.empty) { + return other + } + + if (this.length < other.length) { + a = this + b = other + } else { + a = other + b = this + } + + elements = Object.keys(a.elements) + + for (var i = 0; i < elements.length; i++) { + var element = elements[i] + if (element in b.elements) { + intersection.push(element) + } + } + + return new lunr.Set (intersection) +} + +/** + * Returns a new set combining the elements of this and the specified set. + * + * @param {lunr.Set} other - set to union with this set. + * @return {lunr.Set} a new set that is the union of this and the specified set. + */ + +lunr.Set.prototype.union = function (other) { + if (other === lunr.Set.complete) { + return lunr.Set.complete + } + + if (other === lunr.Set.empty) { + return this + } + + return new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements))) +} +/** + * A function to calculate the inverse document frequency for + * a posting. This is shared between the builder and the index + * + * @private + * @param {object} posting - The posting for a given term + * @param {number} documentCount - The total number of documents. + */ +lunr.idf = function (posting, documentCount) { + var documentsWithTerm = 0 + + for (var fieldName in posting) { + if (fieldName == '_index') continue // Ignore the term index, its not a field + documentsWithTerm += Object.keys(posting[fieldName]).length + } + + var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5) + + return Math.log(1 + Math.abs(x)) +} + +/** + * A token wraps a string representation of a token + * as it is passed through the text processing pipeline. + * + * @constructor + * @param {string} [str=''] - The string token being wrapped. + * @param {object} [metadata={}] - Metadata associated with this token. + */ +lunr.Token = function (str, metadata) { + this.str = str || "" + this.metadata = metadata || {} +} + +/** + * Returns the token string that is being wrapped by this object. + * + * @returns {string} + */ +lunr.Token.prototype.toString = function () { + return this.str +} + +/** + * A token update function is used when updating or optionally + * when cloning a token. + * + * @callback lunr.Token~updateFunction + * @param {string} str - The string representation of the token. + * @param {Object} metadata - All metadata associated with this token. + */ + +/** + * Applies the given function to the wrapped string token. + * + * @example + * token.update(function (str, metadata) { + * return str.toUpperCase() + * }) + * + * @param {lunr.Token~updateFunction} fn - A function to apply to the token string. + * @returns {lunr.Token} + */ +lunr.Token.prototype.update = function (fn) { + this.str = fn(this.str, this.metadata) + return this +} + +/** + * Creates a clone of this token. Optionally a function can be + * applied to the cloned token. + * + * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token. + * @returns {lunr.Token} + */ +lunr.Token.prototype.clone = function (fn) { + fn = fn || function (s) { return s } + return new lunr.Token (fn(this.str, this.metadata), this.metadata) +} +/*! + * lunr.tokenizer + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * A function for splitting a string into tokens ready to be inserted into + * the search index. Uses `lunr.tokenizer.separator` to split strings, change + * the value of this property to change how strings are split into tokens. + * + * This tokenizer will convert its parameter to a string by calling `toString` and + * then will split this string on the character in `lunr.tokenizer.separator`. + * Arrays will have their elements converted to strings and wrapped in a lunr.Token. + * + * Optional metadata can be passed to the tokenizer, this metadata will be cloned and + * added as metadata to every token that is created from the object to be tokenized. + * + * @static + * @param {?(string|object|object[])} obj - The object to convert into tokens + * @param {?object} metadata - Optional metadata to associate with every token + * @returns {lunr.Token[]} + * @see {@link lunr.Pipeline} + */ +lunr.tokenizer = function (obj, metadata) { + if (obj == null || obj == undefined) { + return [] + } + + if (Array.isArray(obj)) { + return obj.map(function (t) { + return new lunr.Token( + lunr.utils.asString(t).toLowerCase(), + lunr.utils.clone(metadata) + ) + }) + } + + var str = obj.toString().toLowerCase(), + len = str.length, + tokens = [] + + for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) { + var char = str.charAt(sliceEnd), + sliceLength = sliceEnd - sliceStart + + if ((char.match(lunr.tokenizer.separator) || sliceEnd == len)) { + + if (sliceLength > 0) { + var tokenMetadata = lunr.utils.clone(metadata) || {} + tokenMetadata["position"] = [sliceStart, sliceLength] + tokenMetadata["index"] = tokens.length + + tokens.push( + new lunr.Token ( + str.slice(sliceStart, sliceEnd), + tokenMetadata + ) + ) + } + + sliceStart = sliceEnd + 1 + } + + } + + return tokens +} + +/** + * The separator used to split a string into tokens. Override this property to change the behaviour of + * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens. + * + * @static + * @see lunr.tokenizer + */ +lunr.tokenizer.separator = /[\s\-]+/ +/*! + * lunr.Pipeline + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * lunr.Pipelines maintain an ordered list of functions to be applied to all + * tokens in documents entering the search index and queries being ran against + * the index. + * + * An instance of lunr.Index created with the lunr shortcut will contain a + * pipeline with a stop word filter and an English language stemmer. Extra + * functions can be added before or after either of these functions or these + * default functions can be removed. + * + * When run the pipeline will call each function in turn, passing a token, the + * index of that token in the original list of all tokens and finally a list of + * all the original tokens. + * + * The output of functions in the pipeline will be passed to the next function + * in the pipeline. To exclude a token from entering the index the function + * should return undefined, the rest of the pipeline will not be called with + * this token. + * + * For serialisation of pipelines to work, all functions used in an instance of + * a pipeline should be registered with lunr.Pipeline. Registered functions can + * then be loaded. If trying to load a serialised pipeline that uses functions + * that are not registered an error will be thrown. + * + * If not planning on serialising the pipeline then registering pipeline functions + * is not necessary. + * + * @constructor + */ +lunr.Pipeline = function () { + this._stack = [] +} + +lunr.Pipeline.registeredFunctions = Object.create(null) + +/** + * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token + * string as well as all known metadata. A pipeline function can mutate the token string + * or mutate (or add) metadata for a given token. + * + * A pipeline function can indicate that the passed token should be discarded by returning + * null, undefined or an empty string. This token will not be passed to any downstream pipeline + * functions and will not be added to the index. + * + * Multiple tokens can be returned by returning an array of tokens. Each token will be passed + * to any downstream pipeline functions and all will returned tokens will be added to the index. + * + * Any number of pipeline functions may be chained together using a lunr.Pipeline. + * + * @interface lunr.PipelineFunction + * @param {lunr.Token} token - A token from the document being processed. + * @param {number} i - The index of this token in the complete list of tokens for this document/field. + * @param {lunr.Token[]} tokens - All tokens for this document/field. + * @returns {(?lunr.Token|lunr.Token[])} + */ + +/** + * Register a function with the pipeline. + * + * Functions that are used in the pipeline should be registered if the pipeline + * needs to be serialised, or a serialised pipeline needs to be loaded. + * + * Registering a function does not add it to a pipeline, functions must still be + * added to instances of the pipeline for them to be used when running a pipeline. + * + * @param {lunr.PipelineFunction} fn - The function to check for. + * @param {String} label - The label to register this function with + */ +lunr.Pipeline.registerFunction = function (fn, label) { + if (label in this.registeredFunctions) { + lunr.utils.warn('Overwriting existing registered function: ' + label) + } + + fn.label = label + lunr.Pipeline.registeredFunctions[fn.label] = fn +} + +/** + * Warns if the function is not registered as a Pipeline function. + * + * @param {lunr.PipelineFunction} fn - The function to check for. + * @private + */ +lunr.Pipeline.warnIfFunctionNotRegistered = function (fn) { + var isRegistered = fn.label && (fn.label in this.registeredFunctions) + + if (!isRegistered) { + lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\n', fn) + } +} + +/** + * Loads a previously serialised pipeline. + * + * All functions to be loaded must already be registered with lunr.Pipeline. + * If any function from the serialised data has not been registered then an + * error will be thrown. + * + * @param {Object} serialised - The serialised pipeline to load. + * @returns {lunr.Pipeline} + */ +lunr.Pipeline.load = function (serialised) { + var pipeline = new lunr.Pipeline + + serialised.forEach(function (fnName) { + var fn = lunr.Pipeline.registeredFunctions[fnName] + + if (fn) { + pipeline.add(fn) + } else { + throw new Error('Cannot load unregistered function: ' + fnName) + } + }) + + return pipeline +} + +/** + * Adds new functions to the end of the pipeline. + * + * Logs a warning if the function has not been registered. + * + * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline. + */ +lunr.Pipeline.prototype.add = function () { + var fns = Array.prototype.slice.call(arguments) + + fns.forEach(function (fn) { + lunr.Pipeline.warnIfFunctionNotRegistered(fn) + this._stack.push(fn) + }, this) +} + +/** + * Adds a single function after a function that already exists in the + * pipeline. + * + * Logs a warning if the function has not been registered. + * + * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline. + * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline. + */ +lunr.Pipeline.prototype.after = function (existingFn, newFn) { + lunr.Pipeline.warnIfFunctionNotRegistered(newFn) + + var pos = this._stack.indexOf(existingFn) + if (pos == -1) { + throw new Error('Cannot find existingFn') + } + + pos = pos + 1 + this._stack.splice(pos, 0, newFn) +} + +/** + * Adds a single function before a function that already exists in the + * pipeline. + * + * Logs a warning if the function has not been registered. + * + * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline. + * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline. + */ +lunr.Pipeline.prototype.before = function (existingFn, newFn) { + lunr.Pipeline.warnIfFunctionNotRegistered(newFn) + + var pos = this._stack.indexOf(existingFn) + if (pos == -1) { + throw new Error('Cannot find existingFn') + } + + this._stack.splice(pos, 0, newFn) +} + +/** + * Removes a function from the pipeline. + * + * @param {lunr.PipelineFunction} fn The function to remove from the pipeline. + */ +lunr.Pipeline.prototype.remove = function (fn) { + var pos = this._stack.indexOf(fn) + if (pos == -1) { + return + } + + this._stack.splice(pos, 1) +} + +/** + * Runs the current list of functions that make up the pipeline against the + * passed tokens. + * + * @param {Array} tokens The tokens to run through the pipeline. + * @returns {Array} + */ +lunr.Pipeline.prototype.run = function (tokens) { + var stackLength = this._stack.length + + for (var i = 0; i < stackLength; i++) { + var fn = this._stack[i] + var memo = [] + + for (var j = 0; j < tokens.length; j++) { + var result = fn(tokens[j], j, tokens) + + if (result === null || result === void 0 || result === '') continue + + if (Array.isArray(result)) { + for (var k = 0; k < result.length; k++) { + memo.push(result[k]) + } + } else { + memo.push(result) + } + } + + tokens = memo + } + + return tokens +} + +/** + * Convenience method for passing a string through a pipeline and getting + * strings out. This method takes care of wrapping the passed string in a + * token and mapping the resulting tokens back to strings. + * + * @param {string} str - The string to pass through the pipeline. + * @param {?object} metadata - Optional metadata to associate with the token + * passed to the pipeline. + * @returns {string[]} + */ +lunr.Pipeline.prototype.runString = function (str, metadata) { + var token = new lunr.Token (str, metadata) + + return this.run([token]).map(function (t) { + return t.toString() + }) +} + +/** + * Resets the pipeline by removing any existing processors. + * + */ +lunr.Pipeline.prototype.reset = function () { + this._stack = [] +} + +/** + * Returns a representation of the pipeline ready for serialisation. + * + * Logs a warning if the function has not been registered. + * + * @returns {Array} + */ +lunr.Pipeline.prototype.toJSON = function () { + return this._stack.map(function (fn) { + lunr.Pipeline.warnIfFunctionNotRegistered(fn) + + return fn.label + }) +} +/*! + * lunr.Vector + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * A vector is used to construct the vector space of documents and queries. These + * vectors support operations to determine the similarity between two documents or + * a document and a query. + * + * Normally no parameters are required for initializing a vector, but in the case of + * loading a previously dumped vector the raw elements can be provided to the constructor. + * + * For performance reasons vectors are implemented with a flat array, where an elements + * index is immediately followed by its value. E.g. [index, value, index, value]. This + * allows the underlying array to be as sparse as possible and still offer decent + * performance when being used for vector calculations. + * + * @constructor + * @param {Number[]} [elements] - The flat list of element index and element value pairs. + */ +lunr.Vector = function (elements) { + this._magnitude = 0 + this.elements = elements || [] +} + + +/** + * Calculates the position within the vector to insert a given index. + * + * This is used internally by insert and upsert. If there are duplicate indexes then + * the position is returned as if the value for that index were to be updated, but it + * is the callers responsibility to check whether there is a duplicate at that index + * + * @param {Number} insertIdx - The index at which the element should be inserted. + * @returns {Number} + */ +lunr.Vector.prototype.positionForIndex = function (index) { + // For an empty vector the tuple can be inserted at the beginning + if (this.elements.length == 0) { + return 0 + } + + var start = 0, + end = this.elements.length / 2, + sliceLength = end - start, + pivotPoint = Math.floor(sliceLength / 2), + pivotIndex = this.elements[pivotPoint * 2] + + while (sliceLength > 1) { + if (pivotIndex < index) { + start = pivotPoint + } + + if (pivotIndex > index) { + end = pivotPoint + } + + if (pivotIndex == index) { + break + } + + sliceLength = end - start + pivotPoint = start + Math.floor(sliceLength / 2) + pivotIndex = this.elements[pivotPoint * 2] + } + + if (pivotIndex == index) { + return pivotPoint * 2 + } + + if (pivotIndex > index) { + return pivotPoint * 2 + } + + if (pivotIndex < index) { + return (pivotPoint + 1) * 2 + } +} + +/** + * Inserts an element at an index within the vector. + * + * Does not allow duplicates, will throw an error if there is already an entry + * for this index. + * + * @param {Number} insertIdx - The index at which the element should be inserted. + * @param {Number} val - The value to be inserted into the vector. + */ +lunr.Vector.prototype.insert = function (insertIdx, val) { + this.upsert(insertIdx, val, function () { + throw "duplicate index" + }) +} + +/** + * Inserts or updates an existing index within the vector. + * + * @param {Number} insertIdx - The index at which the element should be inserted. + * @param {Number} val - The value to be inserted into the vector. + * @param {function} fn - A function that is called for updates, the existing value and the + * requested value are passed as arguments + */ +lunr.Vector.prototype.upsert = function (insertIdx, val, fn) { + this._magnitude = 0 + var position = this.positionForIndex(insertIdx) + + if (this.elements[position] == insertIdx) { + this.elements[position + 1] = fn(this.elements[position + 1], val) + } else { + this.elements.splice(position, 0, insertIdx, val) + } +} + +/** + * Calculates the magnitude of this vector. + * + * @returns {Number} + */ +lunr.Vector.prototype.magnitude = function () { + if (this._magnitude) return this._magnitude + + var sumOfSquares = 0, + elementsLength = this.elements.length + + for (var i = 1; i < elementsLength; i += 2) { + var val = this.elements[i] + sumOfSquares += val * val + } + + return this._magnitude = Math.sqrt(sumOfSquares) +} + +/** + * Calculates the dot product of this vector and another vector. + * + * @param {lunr.Vector} otherVector - The vector to compute the dot product with. + * @returns {Number} + */ +lunr.Vector.prototype.dot = function (otherVector) { + var dotProduct = 0, + a = this.elements, b = otherVector.elements, + aLen = a.length, bLen = b.length, + aVal = 0, bVal = 0, + i = 0, j = 0 + + while (i < aLen && j < bLen) { + aVal = a[i], bVal = b[j] + if (aVal < bVal) { + i += 2 + } else if (aVal > bVal) { + j += 2 + } else if (aVal == bVal) { + dotProduct += a[i + 1] * b[j + 1] + i += 2 + j += 2 + } + } + + return dotProduct +} + +/** + * Calculates the similarity between this vector and another vector. + * + * @param {lunr.Vector} otherVector - The other vector to calculate the + * similarity with. + * @returns {Number} + */ +lunr.Vector.prototype.similarity = function (otherVector) { + return this.dot(otherVector) / this.magnitude() || 0 +} + +/** + * Converts the vector to an array of the elements within the vector. + * + * @returns {Number[]} + */ +lunr.Vector.prototype.toArray = function () { + var output = new Array (this.elements.length / 2) + + for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) { + output[j] = this.elements[i] + } + + return output +} + +/** + * A JSON serializable representation of the vector. + * + * @returns {Number[]} + */ +lunr.Vector.prototype.toJSON = function () { + return this.elements +} +/* eslint-disable */ +/*! + * lunr.stemmer + * Copyright (C) 2020 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + */ + +/** + * lunr.stemmer is an english language stemmer, this is a JavaScript + * implementation of the PorterStemmer taken from http://tartarus.org/~martin + * + * @static + * @implements {lunr.PipelineFunction} + * @param {lunr.Token} token - The string to stem + * @returns {lunr.Token} + * @see {@link lunr.Pipeline} + * @function + */ +lunr.stemmer = (function(){ + var step2list = { + "ational" : "ate", + "tional" : "tion", + "enci" : "ence", + "anci" : "ance", + "izer" : "ize", + "bli" : "ble", + "alli" : "al", + "entli" : "ent", + "eli" : "e", + "ousli" : "ous", + "ization" : "ize", + "ation" : "ate", + "ator" : "ate", + "alism" : "al", + "iveness" : "ive", + "fulness" : "ful", + "ousness" : "ous", + "aliti" : "al", + "iviti" : "ive", + "biliti" : "ble", + "logi" : "log" + }, + + step3list = { + "icate" : "ic", + "ative" : "", + "alize" : "al", + "iciti" : "ic", + "ical" : "ic", + "ful" : "", + "ness" : "" + }, + + c = "[^aeiou]", // consonant + v = "[aeiouy]", // vowel + C = c + "[^aeiouy]*", // consonant sequence + V = v + "[aeiou]*", // vowel sequence + + mgr0 = "^(" + C + ")?" + V + C, // [C]VC... is m>0 + meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$", // [C]VC[V] is m=1 + mgr1 = "^(" + C + ")?" + V + C + V + C, // [C]VCVC... is m>1 + s_v = "^(" + C + ")?" + v; // vowel in stem + + var re_mgr0 = new RegExp(mgr0); + var re_mgr1 = new RegExp(mgr1); + var re_meq1 = new RegExp(meq1); + var re_s_v = new RegExp(s_v); + + var re_1a = /^(.+?)(ss|i)es$/; + var re2_1a = /^(.+?)([^s])s$/; + var re_1b = /^(.+?)eed$/; + var re2_1b = /^(.+?)(ed|ing)$/; + var re_1b_2 = /.$/; + var re2_1b_2 = /(at|bl|iz)$/; + var re3_1b_2 = new RegExp("([^aeiouylsz])\\1$"); + var re4_1b_2 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + + var re_1c = /^(.+?[^aeiou])y$/; + var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + + var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + + var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + var re2_4 = /^(.+?)(s|t)(ion)$/; + + var re_5 = /^(.+?)e$/; + var re_5_1 = /ll$/; + var re3_5 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + + var porterStemmer = function porterStemmer(w) { + var stem, + suffix, + firstch, + re, + re2, + re3, + re4; + + if (w.length < 3) { return w; } + + firstch = w.substr(0,1); + if (firstch == "y") { + w = firstch.toUpperCase() + w.substr(1); + } + + // Step 1a + re = re_1a + re2 = re2_1a; + + if (re.test(w)) { w = w.replace(re,"$1$2"); } + else if (re2.test(w)) { w = w.replace(re2,"$1$2"); } + + // Step 1b + re = re_1b; + re2 = re2_1b; + if (re.test(w)) { + var fp = re.exec(w); + re = re_mgr0; + if (re.test(fp[1])) { + re = re_1b_2; + w = w.replace(re,""); + } + } else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = re_s_v; + if (re2.test(stem)) { + w = stem; + re2 = re2_1b_2; + re3 = re3_1b_2; + re4 = re4_1b_2; + if (re2.test(w)) { w = w + "e"; } + else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,""); } + else if (re4.test(w)) { w = w + "e"; } + } + } + + // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say) + re = re_1c; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + w = stem + "i"; + } + + // Step 2 + re = re_2; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = re_mgr0; + if (re.test(stem)) { + w = stem + step2list[suffix]; + } + } + + // Step 3 + re = re_3; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = re_mgr0; + if (re.test(stem)) { + w = stem + step3list[suffix]; + } + } + + // Step 4 + re = re_4; + re2 = re2_4; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = re_mgr1; + if (re.test(stem)) { + w = stem; + } + } else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = re_mgr1; + if (re2.test(stem)) { + w = stem; + } + } + + // Step 5 + re = re_5; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = re_mgr1; + re2 = re_meq1; + re3 = re3_5; + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) { + w = stem; + } + } + + re = re_5_1; + re2 = re_mgr1; + if (re.test(w) && re2.test(w)) { + re = re_1b_2; + w = w.replace(re,""); + } + + // and turn initial Y back to y + + if (firstch == "y") { + w = firstch.toLowerCase() + w.substr(1); + } + + return w; + }; + + return function (token) { + return token.update(porterStemmer); + } +})(); + +lunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer') +/*! + * lunr.stopWordFilter + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * lunr.generateStopWordFilter builds a stopWordFilter function from the provided + * list of stop words. + * + * The built in lunr.stopWordFilter is built using this generator and can be used + * to generate custom stopWordFilters for applications or non English languages. + * + * @function + * @param {Array} token The token to pass through the filter + * @returns {lunr.PipelineFunction} + * @see lunr.Pipeline + * @see lunr.stopWordFilter + */ +lunr.generateStopWordFilter = function (stopWords) { + var words = stopWords.reduce(function (memo, stopWord) { + memo[stopWord] = stopWord + return memo + }, {}) + + return function (token) { + if (token && words[token.toString()] !== token.toString()) return token + } +} + +/** + * lunr.stopWordFilter is an English language stop word list filter, any words + * contained in the list will not be passed through the filter. + * + * This is intended to be used in the Pipeline. If the token does not pass the + * filter then undefined will be returned. + * + * @function + * @implements {lunr.PipelineFunction} + * @params {lunr.Token} token - A token to check for being a stop word. + * @returns {lunr.Token} + * @see {@link lunr.Pipeline} + */ +lunr.stopWordFilter = lunr.generateStopWordFilter([ + 'a', + 'able', + 'about', + 'across', + 'after', + 'all', + 'almost', + 'also', + 'am', + 'among', + 'an', + 'and', + 'any', + 'are', + 'as', + 'at', + 'be', + 'because', + 'been', + 'but', + 'by', + 'can', + 'cannot', + 'could', + 'dear', + 'did', + 'do', + 'does', + 'either', + 'else', + 'ever', + 'every', + 'for', + 'from', + 'get', + 'got', + 'had', + 'has', + 'have', + 'he', + 'her', + 'hers', + 'him', + 'his', + 'how', + 'however', + 'i', + 'if', + 'in', + 'into', + 'is', + 'it', + 'its', + 'just', + 'least', + 'let', + 'like', + 'likely', + 'may', + 'me', + 'might', + 'most', + 'must', + 'my', + 'neither', + 'no', + 'nor', + 'not', + 'of', + 'off', + 'often', + 'on', + 'only', + 'or', + 'other', + 'our', + 'own', + 'rather', + 'said', + 'say', + 'says', + 'she', + 'should', + 'since', + 'so', + 'some', + 'than', + 'that', + 'the', + 'their', + 'them', + 'then', + 'there', + 'these', + 'they', + 'this', + 'tis', + 'to', + 'too', + 'twas', + 'us', + 'wants', + 'was', + 'we', + 'were', + 'what', + 'when', + 'where', + 'which', + 'while', + 'who', + 'whom', + 'why', + 'will', + 'with', + 'would', + 'yet', + 'you', + 'your' +]) + +lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter') +/*! + * lunr.trimmer + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * lunr.trimmer is a pipeline function for trimming non word + * characters from the beginning and end of tokens before they + * enter the index. + * + * This implementation may not work correctly for non latin + * characters and should either be removed or adapted for use + * with languages with non-latin characters. + * + * @static + * @implements {lunr.PipelineFunction} + * @param {lunr.Token} token The token to pass through the filter + * @returns {lunr.Token} + * @see lunr.Pipeline + */ +lunr.trimmer = function (token) { + return token.update(function (s) { + return s.replace(/^\W+/, '').replace(/\W+$/, '') + }) +} + +lunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer') +/*! + * lunr.TokenSet + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * A token set is used to store the unique list of all tokens + * within an index. Token sets are also used to represent an + * incoming query to the index, this query token set and index + * token set are then intersected to find which tokens to look + * up in the inverted index. + * + * A token set can hold multiple tokens, as in the case of the + * index token set, or it can hold a single token as in the + * case of a simple query token set. + * + * Additionally token sets are used to perform wildcard matching. + * Leading, contained and trailing wildcards are supported, and + * from this edit distance matching can also be provided. + * + * Token sets are implemented as a minimal finite state automata, + * where both common prefixes and suffixes are shared between tokens. + * This helps to reduce the space used for storing the token set. + * + * @constructor + */ +lunr.TokenSet = function () { + this.final = false + this.edges = {} + this.id = lunr.TokenSet._nextId + lunr.TokenSet._nextId += 1 +} + +/** + * Keeps track of the next, auto increment, identifier to assign + * to a new tokenSet. + * + * TokenSets require a unique identifier to be correctly minimised. + * + * @private + */ +lunr.TokenSet._nextId = 1 + +/** + * Creates a TokenSet instance from the given sorted array of words. + * + * @param {String[]} arr - A sorted array of strings to create the set from. + * @returns {lunr.TokenSet} + * @throws Will throw an error if the input array is not sorted. + */ +lunr.TokenSet.fromArray = function (arr) { + var builder = new lunr.TokenSet.Builder + + for (var i = 0, len = arr.length; i < len; i++) { + builder.insert(arr[i]) + } + + builder.finish() + return builder.root +} + +/** + * Creates a token set from a query clause. + * + * @private + * @param {Object} clause - A single clause from lunr.Query. + * @param {string} clause.term - The query clause term. + * @param {number} [clause.editDistance] - The optional edit distance for the term. + * @returns {lunr.TokenSet} + */ +lunr.TokenSet.fromClause = function (clause) { + if ('editDistance' in clause) { + return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance) + } else { + return lunr.TokenSet.fromString(clause.term) + } +} + +/** + * Creates a token set representing a single string with a specified + * edit distance. + * + * Insertions, deletions, substitutions and transpositions are each + * treated as an edit distance of 1. + * + * Increasing the allowed edit distance will have a dramatic impact + * on the performance of both creating and intersecting these TokenSets. + * It is advised to keep the edit distance less than 3. + * + * @param {string} str - The string to create the token set from. + * @param {number} editDistance - The allowed edit distance to match. + * @returns {lunr.Vector} + */ +lunr.TokenSet.fromFuzzyString = function (str, editDistance) { + var root = new lunr.TokenSet + + var stack = [{ + node: root, + editsRemaining: editDistance, + str: str + }] + + while (stack.length) { + var frame = stack.pop() + + // no edit + if (frame.str.length > 0) { + var char = frame.str.charAt(0), + noEditNode + + if (char in frame.node.edges) { + noEditNode = frame.node.edges[char] + } else { + noEditNode = new lunr.TokenSet + frame.node.edges[char] = noEditNode + } + + if (frame.str.length == 1) { + noEditNode.final = true + } + + stack.push({ + node: noEditNode, + editsRemaining: frame.editsRemaining, + str: frame.str.slice(1) + }) + } + + if (frame.editsRemaining == 0) { + continue + } + + // insertion + if ("*" in frame.node.edges) { + var insertionNode = frame.node.edges["*"] + } else { + var insertionNode = new lunr.TokenSet + frame.node.edges["*"] = insertionNode + } + + if (frame.str.length == 0) { + insertionNode.final = true + } + + stack.push({ + node: insertionNode, + editsRemaining: frame.editsRemaining - 1, + str: frame.str + }) + + // deletion + // can only do a deletion if we have enough edits remaining + // and if there are characters left to delete in the string + if (frame.str.length > 1) { + stack.push({ + node: frame.node, + editsRemaining: frame.editsRemaining - 1, + str: frame.str.slice(1) + }) + } + + // deletion + // just removing the last character from the str + if (frame.str.length == 1) { + frame.node.final = true + } + + // substitution + // can only do a substitution if we have enough edits remaining + // and if there are characters left to substitute + if (frame.str.length >= 1) { + if ("*" in frame.node.edges) { + var substitutionNode = frame.node.edges["*"] + } else { + var substitutionNode = new lunr.TokenSet + frame.node.edges["*"] = substitutionNode + } + + if (frame.str.length == 1) { + substitutionNode.final = true + } + + stack.push({ + node: substitutionNode, + editsRemaining: frame.editsRemaining - 1, + str: frame.str.slice(1) + }) + } + + // transposition + // can only do a transposition if there are edits remaining + // and there are enough characters to transpose + if (frame.str.length > 1) { + var charA = frame.str.charAt(0), + charB = frame.str.charAt(1), + transposeNode + + if (charB in frame.node.edges) { + transposeNode = frame.node.edges[charB] + } else { + transposeNode = new lunr.TokenSet + frame.node.edges[charB] = transposeNode + } + + if (frame.str.length == 1) { + transposeNode.final = true + } + + stack.push({ + node: transposeNode, + editsRemaining: frame.editsRemaining - 1, + str: charA + frame.str.slice(2) + }) + } + } + + return root +} + +/** + * Creates a TokenSet from a string. + * + * The string may contain one or more wildcard characters (*) + * that will allow wildcard matching when intersecting with + * another TokenSet. + * + * @param {string} str - The string to create a TokenSet from. + * @returns {lunr.TokenSet} + */ +lunr.TokenSet.fromString = function (str) { + var node = new lunr.TokenSet, + root = node + + /* + * Iterates through all characters within the passed string + * appending a node for each character. + * + * When a wildcard character is found then a self + * referencing edge is introduced to continually match + * any number of any characters. + */ + for (var i = 0, len = str.length; i < len; i++) { + var char = str[i], + final = (i == len - 1) + + if (char == "*") { + node.edges[char] = node + node.final = final + + } else { + var next = new lunr.TokenSet + next.final = final + + node.edges[char] = next + node = next + } + } + + return root +} + +/** + * Converts this TokenSet into an array of strings + * contained within the TokenSet. + * + * This is not intended to be used on a TokenSet that + * contains wildcards, in these cases the results are + * undefined and are likely to cause an infinite loop. + * + * @returns {string[]} + */ +lunr.TokenSet.prototype.toArray = function () { + var words = [] + + var stack = [{ + prefix: "", + node: this + }] + + while (stack.length) { + var frame = stack.pop(), + edges = Object.keys(frame.node.edges), + len = edges.length + + if (frame.node.final) { + /* In Safari, at this point the prefix is sometimes corrupted, see: + * https://github.com/olivernn/lunr.js/issues/279 Calling any + * String.prototype method forces Safari to "cast" this string to what + * it's supposed to be, fixing the bug. */ + frame.prefix.charAt(0) + words.push(frame.prefix) + } + + for (var i = 0; i < len; i++) { + var edge = edges[i] + + stack.push({ + prefix: frame.prefix.concat(edge), + node: frame.node.edges[edge] + }) + } + } + + return words +} + +/** + * Generates a string representation of a TokenSet. + * + * This is intended to allow TokenSets to be used as keys + * in objects, largely to aid the construction and minimisation + * of a TokenSet. As such it is not designed to be a human + * friendly representation of the TokenSet. + * + * @returns {string} + */ +lunr.TokenSet.prototype.toString = function () { + // NOTE: Using Object.keys here as this.edges is very likely + // to enter 'hash-mode' with many keys being added + // + // avoiding a for-in loop here as it leads to the function + // being de-optimised (at least in V8). From some simple + // benchmarks the performance is comparable, but allowing + // V8 to optimize may mean easy performance wins in the future. + + if (this._str) { + return this._str + } + + var str = this.final ? '1' : '0', + labels = Object.keys(this.edges).sort(), + len = labels.length + + for (var i = 0; i < len; i++) { + var label = labels[i], + node = this.edges[label] + + str = str + label + node.id + } + + return str +} + +/** + * Returns a new TokenSet that is the intersection of + * this TokenSet and the passed TokenSet. + * + * This intersection will take into account any wildcards + * contained within the TokenSet. + * + * @param {lunr.TokenSet} b - An other TokenSet to intersect with. + * @returns {lunr.TokenSet} + */ +lunr.TokenSet.prototype.intersect = function (b) { + var output = new lunr.TokenSet, + frame = undefined + + var stack = [{ + qNode: b, + output: output, + node: this + }] + + while (stack.length) { + frame = stack.pop() + + // NOTE: As with the #toString method, we are using + // Object.keys and a for loop instead of a for-in loop + // as both of these objects enter 'hash' mode, causing + // the function to be de-optimised in V8 + var qEdges = Object.keys(frame.qNode.edges), + qLen = qEdges.length, + nEdges = Object.keys(frame.node.edges), + nLen = nEdges.length + + for (var q = 0; q < qLen; q++) { + var qEdge = qEdges[q] + + for (var n = 0; n < nLen; n++) { + var nEdge = nEdges[n] + + if (nEdge == qEdge || qEdge == '*') { + var node = frame.node.edges[nEdge], + qNode = frame.qNode.edges[qEdge], + final = node.final && qNode.final, + next = undefined + + if (nEdge in frame.output.edges) { + // an edge already exists for this character + // no need to create a new node, just set the finality + // bit unless this node is already final + next = frame.output.edges[nEdge] + next.final = next.final || final + + } else { + // no edge exists yet, must create one + // set the finality bit and insert it + // into the output + next = new lunr.TokenSet + next.final = final + frame.output.edges[nEdge] = next + } + + stack.push({ + qNode: qNode, + output: next, + node: node + }) + } + } + } + } + + return output +} +lunr.TokenSet.Builder = function () { + this.previousWord = "" + this.root = new lunr.TokenSet + this.uncheckedNodes = [] + this.minimizedNodes = {} +} + +lunr.TokenSet.Builder.prototype.insert = function (word) { + var node, + commonPrefix = 0 + + if (word < this.previousWord) { + throw new Error ("Out of order word insertion") + } + + for (var i = 0; i < word.length && i < this.previousWord.length; i++) { + if (word[i] != this.previousWord[i]) break + commonPrefix++ + } + + this.minimize(commonPrefix) + + if (this.uncheckedNodes.length == 0) { + node = this.root + } else { + node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child + } + + for (var i = commonPrefix; i < word.length; i++) { + var nextNode = new lunr.TokenSet, + char = word[i] + + node.edges[char] = nextNode + + this.uncheckedNodes.push({ + parent: node, + char: char, + child: nextNode + }) + + node = nextNode + } + + node.final = true + this.previousWord = word +} + +lunr.TokenSet.Builder.prototype.finish = function () { + this.minimize(0) +} + +lunr.TokenSet.Builder.prototype.minimize = function (downTo) { + for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) { + var node = this.uncheckedNodes[i], + childKey = node.child.toString() + + if (childKey in this.minimizedNodes) { + node.parent.edges[node.char] = this.minimizedNodes[childKey] + } else { + // Cache the key for this node since + // we know it can't change anymore + node.child._str = childKey + + this.minimizedNodes[childKey] = node.child + } + + this.uncheckedNodes.pop() + } +} +/*! + * lunr.Index + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * An index contains the built index of all documents and provides a query interface + * to the index. + * + * Usually instances of lunr.Index will not be created using this constructor, instead + * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be + * used to load previously built and serialized indexes. + * + * @constructor + * @param {Object} attrs - The attributes of the built search index. + * @param {Object} attrs.invertedIndex - An index of term/field to document reference. + * @param {Object} attrs.fieldVectors - Field vectors + * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens. + * @param {string[]} attrs.fields - The names of indexed document fields. + * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms. + */ +lunr.Index = function (attrs) { + this.invertedIndex = attrs.invertedIndex + this.fieldVectors = attrs.fieldVectors + this.tokenSet = attrs.tokenSet + this.fields = attrs.fields + this.pipeline = attrs.pipeline +} + +/** + * A result contains details of a document matching a search query. + * @typedef {Object} lunr.Index~Result + * @property {string} ref - The reference of the document this result represents. + * @property {number} score - A number between 0 and 1 representing how similar this document is to the query. + * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match. + */ + +/** + * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple + * query language which itself is parsed into an instance of lunr.Query. + * + * For programmatically building queries it is advised to directly use lunr.Query, the query language + * is best used for human entered text rather than program generated text. + * + * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported + * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello' + * or 'world', though those that contain both will rank higher in the results. + * + * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can + * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding + * wildcards will increase the number of documents that will be found but can also have a negative + * impact on query performance, especially with wildcards at the beginning of a term. + * + * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term + * hello in the title field will match this query. Using a field not present in the index will lead + * to an error being thrown. + * + * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term + * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported + * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2. + * Avoid large values for edit distance to improve query performance. + * + * Each term also supports a presence modifier. By default a term's presence in document is optional, however + * this can be changed to either required or prohibited. For a term's presence to be required in a document the + * term should be prefixed with a '+', e.g. `+foo bar` is a search for documents that must contain 'foo' and + * optionally contain 'bar'. Conversely a leading '-' sets the terms presence to prohibited, i.e. it must not + * appear in a document, e.g. `-foo bar` is a search for documents that do not contain 'foo' but may contain 'bar'. + * + * To escape special characters the backslash character '\' can be used, this allows searches to include + * characters that would normally be considered modifiers, e.g. `foo\~2` will search for a term "foo~2" instead + * of attempting to apply a boost of 2 to the search term "foo". + * + * @typedef {string} lunr.Index~QueryString + * @example Simple single term query + * hello + * @example Multiple term query + * hello world + * @example term scoped to a field + * title:hello + * @example term with a boost of 10 + * hello^10 + * @example term with an edit distance of 2 + * hello~2 + * @example terms with presence modifiers + * -foo +bar baz + */ + +/** + * Performs a search against the index using lunr query syntax. + * + * Results will be returned sorted by their score, the most relevant results + * will be returned first. For details on how the score is calculated, please see + * the {@link https://lunrjs.com/guides/searching.html#scoring|guide}. + * + * For more programmatic querying use lunr.Index#query. + * + * @param {lunr.Index~QueryString} queryString - A string containing a lunr query. + * @throws {lunr.QueryParseError} If the passed query string cannot be parsed. + * @returns {lunr.Index~Result[]} + */ +lunr.Index.prototype.search = function (queryString) { + return this.query(function (query) { + var parser = new lunr.QueryParser(queryString, query) + parser.parse() + }) +} + +/** + * A query builder callback provides a query object to be used to express + * the query to perform on the index. + * + * @callback lunr.Index~queryBuilder + * @param {lunr.Query} query - The query object to build up. + * @this lunr.Query + */ + +/** + * Performs a query against the index using the yielded lunr.Query object. + * + * If performing programmatic queries against the index, this method is preferred + * over lunr.Index#search so as to avoid the additional query parsing overhead. + * + * A query object is yielded to the supplied function which should be used to + * express the query to be run against the index. + * + * Note that although this function takes a callback parameter it is _not_ an + * asynchronous operation, the callback is just yielded a query object to be + * customized. + * + * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query. + * @returns {lunr.Index~Result[]} + */ +lunr.Index.prototype.query = function (fn) { + // for each query clause + // * process terms + // * expand terms from token set + // * find matching documents and metadata + // * get document vectors + // * score documents + + var query = new lunr.Query(this.fields), + matchingFields = Object.create(null), + queryVectors = Object.create(null), + termFieldCache = Object.create(null), + requiredMatches = Object.create(null), + prohibitedMatches = Object.create(null) + + /* + * To support field level boosts a query vector is created per + * field. An empty vector is eagerly created to support negated + * queries. + */ + for (var i = 0; i < this.fields.length; i++) { + queryVectors[this.fields[i]] = new lunr.Vector + } + + fn.call(query, query) + + for (var i = 0; i < query.clauses.length; i++) { + /* + * Unless the pipeline has been disabled for this term, which is + * the case for terms with wildcards, we need to pass the clause + * term through the search pipeline. A pipeline returns an array + * of processed terms. Pipeline functions may expand the passed + * term, which means we may end up performing multiple index lookups + * for a single query term. + */ + var clause = query.clauses[i], + terms = null, + clauseMatches = lunr.Set.empty + + if (clause.usePipeline) { + terms = this.pipeline.runString(clause.term, { + fields: clause.fields + }) + } else { + terms = [clause.term] + } + + for (var m = 0; m < terms.length; m++) { + var term = terms[m] + + /* + * Each term returned from the pipeline needs to use the same query + * clause object, e.g. the same boost and or edit distance. The + * simplest way to do this is to re-use the clause object but mutate + * its term property. + */ + clause.term = term + + /* + * From the term in the clause we create a token set which will then + * be used to intersect the indexes token set to get a list of terms + * to lookup in the inverted index + */ + var termTokenSet = lunr.TokenSet.fromClause(clause), + expandedTerms = this.tokenSet.intersect(termTokenSet).toArray() + + /* + * If a term marked as required does not exist in the tokenSet it is + * impossible for the search to return any matches. We set all the field + * scoped required matches set to empty and stop examining any further + * clauses. + */ + if (expandedTerms.length === 0 && clause.presence === lunr.Query.presence.REQUIRED) { + for (var k = 0; k < clause.fields.length; k++) { + var field = clause.fields[k] + requiredMatches[field] = lunr.Set.empty + } + + break + } + + for (var j = 0; j < expandedTerms.length; j++) { + /* + * For each term get the posting and termIndex, this is required for + * building the query vector. + */ + var expandedTerm = expandedTerms[j], + posting = this.invertedIndex[expandedTerm], + termIndex = posting._index + + for (var k = 0; k < clause.fields.length; k++) { + /* + * For each field that this query term is scoped by (by default + * all fields are in scope) we need to get all the document refs + * that have this term in that field. + * + * The posting is the entry in the invertedIndex for the matching + * term from above. + */ + var field = clause.fields[k], + fieldPosting = posting[field], + matchingDocumentRefs = Object.keys(fieldPosting), + termField = expandedTerm + "/" + field, + matchingDocumentsSet = new lunr.Set(matchingDocumentRefs) + + /* + * if the presence of this term is required ensure that the matching + * documents are added to the set of required matches for this clause. + * + */ + if (clause.presence == lunr.Query.presence.REQUIRED) { + clauseMatches = clauseMatches.union(matchingDocumentsSet) + + if (requiredMatches[field] === undefined) { + requiredMatches[field] = lunr.Set.complete + } + } + + /* + * if the presence of this term is prohibited ensure that the matching + * documents are added to the set of prohibited matches for this field, + * creating that set if it does not yet exist. + */ + if (clause.presence == lunr.Query.presence.PROHIBITED) { + if (prohibitedMatches[field] === undefined) { + prohibitedMatches[field] = lunr.Set.empty + } + + prohibitedMatches[field] = prohibitedMatches[field].union(matchingDocumentsSet) + + /* + * Prohibited matches should not be part of the query vector used for + * similarity scoring and no metadata should be extracted so we continue + * to the next field + */ + continue + } + + /* + * The query field vector is populated using the termIndex found for + * the term and a unit value with the appropriate boost applied. + * Using upsert because there could already be an entry in the vector + * for the term we are working with. In that case we just add the scores + * together. + */ + queryVectors[field].upsert(termIndex, clause.boost, function (a, b) { return a + b }) + + /** + * If we've already seen this term, field combo then we've already collected + * the matching documents and metadata, no need to go through all that again + */ + if (termFieldCache[termField]) { + continue + } + + for (var l = 0; l < matchingDocumentRefs.length; l++) { + /* + * All metadata for this term/field/document triple + * are then extracted and collected into an instance + * of lunr.MatchData ready to be returned in the query + * results + */ + var matchingDocumentRef = matchingDocumentRefs[l], + matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field), + metadata = fieldPosting[matchingDocumentRef], + fieldMatch + + if ((fieldMatch = matchingFields[matchingFieldRef]) === undefined) { + matchingFields[matchingFieldRef] = new lunr.MatchData (expandedTerm, field, metadata) + } else { + fieldMatch.add(expandedTerm, field, metadata) + } + + } + + termFieldCache[termField] = true + } + } + } + + /** + * If the presence was required we need to update the requiredMatches field sets. + * We do this after all fields for the term have collected their matches because + * the clause terms presence is required in _any_ of the fields not _all_ of the + * fields. + */ + if (clause.presence === lunr.Query.presence.REQUIRED) { + for (var k = 0; k < clause.fields.length; k++) { + var field = clause.fields[k] + requiredMatches[field] = requiredMatches[field].intersect(clauseMatches) + } + } + } + + /** + * Need to combine the field scoped required and prohibited + * matching documents into a global set of required and prohibited + * matches + */ + var allRequiredMatches = lunr.Set.complete, + allProhibitedMatches = lunr.Set.empty + + for (var i = 0; i < this.fields.length; i++) { + var field = this.fields[i] + + if (requiredMatches[field]) { + allRequiredMatches = allRequiredMatches.intersect(requiredMatches[field]) + } + + if (prohibitedMatches[field]) { + allProhibitedMatches = allProhibitedMatches.union(prohibitedMatches[field]) + } + } + + var matchingFieldRefs = Object.keys(matchingFields), + results = [], + matches = Object.create(null) + + /* + * If the query is negated (contains only prohibited terms) + * we need to get _all_ fieldRefs currently existing in the + * index. This is only done when we know that the query is + * entirely prohibited terms to avoid any cost of getting all + * fieldRefs unnecessarily. + * + * Additionally, blank MatchData must be created to correctly + * populate the results. + */ + if (query.isNegated()) { + matchingFieldRefs = Object.keys(this.fieldVectors) + + for (var i = 0; i < matchingFieldRefs.length; i++) { + var matchingFieldRef = matchingFieldRefs[i] + var fieldRef = lunr.FieldRef.fromString(matchingFieldRef) + matchingFields[matchingFieldRef] = new lunr.MatchData + } + } + + for (var i = 0; i < matchingFieldRefs.length; i++) { + /* + * Currently we have document fields that match the query, but we + * need to return documents. The matchData and scores are combined + * from multiple fields belonging to the same document. + * + * Scores are calculated by field, using the query vectors created + * above, and combined into a final document score using addition. + */ + var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]), + docRef = fieldRef.docRef + + if (!allRequiredMatches.contains(docRef)) { + continue + } + + if (allProhibitedMatches.contains(docRef)) { + continue + } + + var fieldVector = this.fieldVectors[fieldRef], + score = queryVectors[fieldRef.fieldName].similarity(fieldVector), + docMatch + + if ((docMatch = matches[docRef]) !== undefined) { + docMatch.score += score + docMatch.matchData.combine(matchingFields[fieldRef]) + } else { + var match = { + ref: docRef, + score: score, + matchData: matchingFields[fieldRef] + } + matches[docRef] = match + results.push(match) + } + } + + /* + * Sort the results objects by score, highest first. + */ + return results.sort(function (a, b) { + return b.score - a.score + }) +} + +/** + * Prepares the index for JSON serialization. + * + * The schema for this JSON blob will be described in a + * separate JSON schema file. + * + * @returns {Object} + */ +lunr.Index.prototype.toJSON = function () { + var invertedIndex = Object.keys(this.invertedIndex) + .sort() + .map(function (term) { + return [term, this.invertedIndex[term]] + }, this) + + var fieldVectors = Object.keys(this.fieldVectors) + .map(function (ref) { + return [ref, this.fieldVectors[ref].toJSON()] + }, this) + + return { + version: lunr.version, + fields: this.fields, + fieldVectors: fieldVectors, + invertedIndex: invertedIndex, + pipeline: this.pipeline.toJSON() + } +} + +/** + * Loads a previously serialized lunr.Index + * + * @param {Object} serializedIndex - A previously serialized lunr.Index + * @returns {lunr.Index} + */ +lunr.Index.load = function (serializedIndex) { + var attrs = {}, + fieldVectors = {}, + serializedVectors = serializedIndex.fieldVectors, + invertedIndex = Object.create(null), + serializedInvertedIndex = serializedIndex.invertedIndex, + tokenSetBuilder = new lunr.TokenSet.Builder, + pipeline = lunr.Pipeline.load(serializedIndex.pipeline) + + if (serializedIndex.version != lunr.version) { + lunr.utils.warn("Version mismatch when loading serialised index. Current version of lunr '" + lunr.version + "' does not match serialized index '" + serializedIndex.version + "'") + } + + for (var i = 0; i < serializedVectors.length; i++) { + var tuple = serializedVectors[i], + ref = tuple[0], + elements = tuple[1] + + fieldVectors[ref] = new lunr.Vector(elements) + } + + for (var i = 0; i < serializedInvertedIndex.length; i++) { + var tuple = serializedInvertedIndex[i], + term = tuple[0], + posting = tuple[1] + + tokenSetBuilder.insert(term) + invertedIndex[term] = posting + } + + tokenSetBuilder.finish() + + attrs.fields = serializedIndex.fields + + attrs.fieldVectors = fieldVectors + attrs.invertedIndex = invertedIndex + attrs.tokenSet = tokenSetBuilder.root + attrs.pipeline = pipeline + + return new lunr.Index(attrs) +} +/*! + * lunr.Builder + * Copyright (C) 2020 Oliver Nightingale + */ + +/** + * lunr.Builder performs indexing on a set of documents and + * returns instances of lunr.Index ready for querying. + * + * All configuration of the index is done via the builder, the + * fields to index, the document reference, the text processing + * pipeline and document scoring parameters are all set on the + * builder before indexing. + * + * @constructor + * @property {string} _ref - Internal reference to the document reference field. + * @property {string[]} _fields - Internal reference to the document fields to index. + * @property {object} invertedIndex - The inverted index maps terms to document fields. + * @property {object} documentTermFrequencies - Keeps track of document term frequencies. + * @property {object} documentLengths - Keeps track of the length of documents added to the index. + * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing. + * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing. + * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index. + * @property {number} documentCount - Keeps track of the total number of documents indexed. + * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75. + * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2. + * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space. + * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index. + */ +lunr.Builder = function () { + this._ref = "id" + this._fields = Object.create(null) + this._documents = Object.create(null) + this.invertedIndex = Object.create(null) + this.fieldTermFrequencies = {} + this.fieldLengths = {} + this.tokenizer = lunr.tokenizer + this.pipeline = new lunr.Pipeline + this.searchPipeline = new lunr.Pipeline + this.documentCount = 0 + this._b = 0.75 + this._k1 = 1.2 + this.termIndex = 0 + this.metadataWhitelist = [] +} + +/** + * Sets the document field used as the document reference. Every document must have this field. + * The type of this field in the document should be a string, if it is not a string it will be + * coerced into a string by calling toString. + * + * The default ref is 'id'. + * + * The ref should _not_ be changed during indexing, it should be set before any documents are + * added to the index. Changing it during indexing can lead to inconsistent results. + * + * @param {string} ref - The name of the reference field in the document. + */ +lunr.Builder.prototype.ref = function (ref) { + this._ref = ref +} + +/** + * A function that is used to extract a field from a document. + * + * Lunr expects a field to be at the top level of a document, if however the field + * is deeply nested within a document an extractor function can be used to extract + * the right field for indexing. + * + * @callback fieldExtractor + * @param {object} doc - The document being added to the index. + * @returns {?(string|object|object[])} obj - The object that will be indexed for this field. + * @example Extracting a nested field + * function (doc) { return doc.nested.field } + */ + +/** + * Adds a field to the list of document fields that will be indexed. Every document being + * indexed should have this field. Null values for this field in indexed documents will + * not cause errors but will limit the chance of that document being retrieved by searches. + * + * All fields should be added before adding documents to the index. Adding fields after + * a document has been indexed will have no effect on already indexed documents. + * + * Fields can be boosted at build time. This allows terms within that field to have more + * importance when ranking search results. Use a field boost to specify that matches within + * one field are more important than other fields. + * + * @param {string} fieldName - The name of a field to index in all documents. + * @param {object} attributes - Optional attributes associated with this field. + * @param {number} [attributes.boost=1] - Boost applied to all terms within this field. + * @param {fieldExtractor} [attributes.extractor] - Function to extract a field from a document. + * @throws {RangeError} fieldName cannot contain unsupported characters '/' + */ +lunr.Builder.prototype.field = function (fieldName, attributes) { + if (/\//.test(fieldName)) { + throw new RangeError ("Field '" + fieldName + "' contains illegal character '/'") + } + + this._fields[fieldName] = attributes || {} +} + +/** + * A parameter to tune the amount of field length normalisation that is applied when + * calculating relevance scores. A value of 0 will completely disable any normalisation + * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b + * will be clamped to the range 0 - 1. + * + * @param {number} number - The value to set for this tuning parameter. + */ +lunr.Builder.prototype.b = function (number) { + if (number < 0) { + this._b = 0 + } else if (number > 1) { + this._b = 1 + } else { + this._b = number + } +} + +/** + * A parameter that controls the speed at which a rise in term frequency results in term + * frequency saturation. The default value is 1.2. Setting this to a higher value will give + * slower saturation levels, a lower value will result in quicker saturation. + * + * @param {number} number - The value to set for this tuning parameter. + */ +lunr.Builder.prototype.k1 = function (number) { + this._k1 = number +} + +/** + * Adds a document to the index. + * + * Before adding fields to the index the index should have been fully setup, with the document + * ref and all fields to index already having been specified. + * + * The document must have a field name as specified by the ref (by default this is 'id') and + * it should have all fields defined for indexing, though null or undefined values will not + * cause errors. + * + * Entire documents can be boosted at build time. Applying a boost to a document indicates that + * this document should rank higher in search results than other documents. + * + * @param {object} doc - The document to add to the index. + * @param {object} attributes - Optional attributes associated with this document. + * @param {number} [attributes.boost=1] - Boost applied to all terms within this document. + */ +lunr.Builder.prototype.add = function (doc, attributes) { + var docRef = doc[this._ref], + fields = Object.keys(this._fields) + + this._documents[docRef] = attributes || {} + this.documentCount += 1 + + for (var i = 0; i < fields.length; i++) { + var fieldName = fields[i], + extractor = this._fields[fieldName].extractor, + field = extractor ? extractor(doc) : doc[fieldName], + tokens = this.tokenizer(field, { + fields: [fieldName] + }), + terms = this.pipeline.run(tokens), + fieldRef = new lunr.FieldRef (docRef, fieldName), + fieldTerms = Object.create(null) + + this.fieldTermFrequencies[fieldRef] = fieldTerms + this.fieldLengths[fieldRef] = 0 + + // store the length of this field for this document + this.fieldLengths[fieldRef] += terms.length + + // calculate term frequencies for this field + for (var j = 0; j < terms.length; j++) { + var term = terms[j] + + if (fieldTerms[term] == undefined) { + fieldTerms[term] = 0 + } + + fieldTerms[term] += 1 + + // add to inverted index + // create an initial posting if one doesn't exist + if (this.invertedIndex[term] == undefined) { + var posting = Object.create(null) + posting["_index"] = this.termIndex + this.termIndex += 1 + + for (var k = 0; k < fields.length; k++) { + posting[fields[k]] = Object.create(null) + } + + this.invertedIndex[term] = posting + } + + // add an entry for this term/fieldName/docRef to the invertedIndex + if (this.invertedIndex[term][fieldName][docRef] == undefined) { + this.invertedIndex[term][fieldName][docRef] = Object.create(null) + } + + // store all whitelisted metadata about this token in the + // inverted index + for (var l = 0; l < this.metadataWhitelist.length; l++) { + var metadataKey = this.metadataWhitelist[l], + metadata = term.metadata[metadataKey] + + if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) { + this.invertedIndex[term][fieldName][docRef][metadataKey] = [] + } + + this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata) + } + } + + } +} + +/** + * Calculates the average document length for this index + * + * @private + */ +lunr.Builder.prototype.calculateAverageFieldLengths = function () { + + var fieldRefs = Object.keys(this.fieldLengths), + numberOfFields = fieldRefs.length, + accumulator = {}, + documentsWithField = {} + + for (var i = 0; i < numberOfFields; i++) { + var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]), + field = fieldRef.fieldName + + documentsWithField[field] || (documentsWithField[field] = 0) + documentsWithField[field] += 1 + + accumulator[field] || (accumulator[field] = 0) + accumulator[field] += this.fieldLengths[fieldRef] + } + + var fields = Object.keys(this._fields) + + for (var i = 0; i < fields.length; i++) { + var fieldName = fields[i] + accumulator[fieldName] = accumulator[fieldName] / documentsWithField[fieldName] + } + + this.averageFieldLength = accumulator +} + +/** + * Builds a vector space model of every document using lunr.Vector + * + * @private + */ +lunr.Builder.prototype.createFieldVectors = function () { + var fieldVectors = {}, + fieldRefs = Object.keys(this.fieldTermFrequencies), + fieldRefsLength = fieldRefs.length, + termIdfCache = Object.create(null) + + for (var i = 0; i < fieldRefsLength; i++) { + var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]), + fieldName = fieldRef.fieldName, + fieldLength = this.fieldLengths[fieldRef], + fieldVector = new lunr.Vector, + termFrequencies = this.fieldTermFrequencies[fieldRef], + terms = Object.keys(termFrequencies), + termsLength = terms.length + + + var fieldBoost = this._fields[fieldName].boost || 1, + docBoost = this._documents[fieldRef.docRef].boost || 1 + + for (var j = 0; j < termsLength; j++) { + var term = terms[j], + tf = termFrequencies[term], + termIndex = this.invertedIndex[term]._index, + idf, score, scoreWithPrecision + + if (termIdfCache[term] === undefined) { + idf = lunr.idf(this.invertedIndex[term], this.documentCount) + termIdfCache[term] = idf + } else { + idf = termIdfCache[term] + } + + score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[fieldName])) + tf) + score *= fieldBoost + score *= docBoost + scoreWithPrecision = Math.round(score * 1000) / 1000 + // Converts 1.23456789 to 1.234. + // Reducing the precision so that the vectors take up less + // space when serialised. Doing it now so that they behave + // the same before and after serialisation. Also, this is + // the fastest approach to reducing a number's precision in + // JavaScript. + + fieldVector.insert(termIndex, scoreWithPrecision) + } + + fieldVectors[fieldRef] = fieldVector + } + + this.fieldVectors = fieldVectors +} + +/** + * Creates a token set of all tokens in the index using lunr.TokenSet + * + * @private + */ +lunr.Builder.prototype.createTokenSet = function () { + this.tokenSet = lunr.TokenSet.fromArray( + Object.keys(this.invertedIndex).sort() + ) +} + +/** + * Builds the index, creating an instance of lunr.Index. + * + * This completes the indexing process and should only be called + * once all documents have been added to the index. + * + * @returns {lunr.Index} + */ +lunr.Builder.prototype.build = function () { + this.calculateAverageFieldLengths() + this.createFieldVectors() + this.createTokenSet() + + return new lunr.Index({ + invertedIndex: this.invertedIndex, + fieldVectors: this.fieldVectors, + tokenSet: this.tokenSet, + fields: Object.keys(this._fields), + pipeline: this.searchPipeline + }) +} + +/** + * Applies a plugin to the index builder. + * + * A plugin is a function that is called with the index builder as its context. + * Plugins can be used to customise or extend the behaviour of the index + * in some way. A plugin is just a function, that encapsulated the custom + * behaviour that should be applied when building the index. + * + * The plugin function will be called with the index builder as its argument, additional + * arguments can also be passed when calling use. The function will be called + * with the index builder as its context. + * + * @param {Function} plugin The plugin to apply. + */ +lunr.Builder.prototype.use = function (fn) { + var args = Array.prototype.slice.call(arguments, 1) + args.unshift(this) + fn.apply(this, args) +} +/** + * Contains and collects metadata about a matching document. + * A single instance of lunr.MatchData is returned as part of every + * lunr.Index~Result. + * + * @constructor + * @param {string} term - The term this match data is associated with + * @param {string} field - The field in which the term was found + * @param {object} metadata - The metadata recorded about this term in this field + * @property {object} metadata - A cloned collection of metadata associated with this document. + * @see {@link lunr.Index~Result} + */ +lunr.MatchData = function (term, field, metadata) { + var clonedMetadata = Object.create(null), + metadataKeys = Object.keys(metadata || {}) + + // Cloning the metadata to prevent the original + // being mutated during match data combination. + // Metadata is kept in an array within the inverted + // index so cloning the data can be done with + // Array#slice + for (var i = 0; i < metadataKeys.length; i++) { + var key = metadataKeys[i] + clonedMetadata[key] = metadata[key].slice() + } + + this.metadata = Object.create(null) + + if (term !== undefined) { + this.metadata[term] = Object.create(null) + this.metadata[term][field] = clonedMetadata + } +} + +/** + * An instance of lunr.MatchData will be created for every term that matches a + * document. However only one instance is required in a lunr.Index~Result. This + * method combines metadata from another instance of lunr.MatchData with this + * objects metadata. + * + * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one. + * @see {@link lunr.Index~Result} + */ +lunr.MatchData.prototype.combine = function (otherMatchData) { + var terms = Object.keys(otherMatchData.metadata) + + for (var i = 0; i < terms.length; i++) { + var term = terms[i], + fields = Object.keys(otherMatchData.metadata[term]) + + if (this.metadata[term] == undefined) { + this.metadata[term] = Object.create(null) + } + + for (var j = 0; j < fields.length; j++) { + var field = fields[j], + keys = Object.keys(otherMatchData.metadata[term][field]) + + if (this.metadata[term][field] == undefined) { + this.metadata[term][field] = Object.create(null) + } + + for (var k = 0; k < keys.length; k++) { + var key = keys[k] + + if (this.metadata[term][field][key] == undefined) { + this.metadata[term][field][key] = otherMatchData.metadata[term][field][key] + } else { + this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key]) + } + + } + } + } +} + +/** + * Add metadata for a term/field pair to this instance of match data. + * + * @param {string} term - The term this match data is associated with + * @param {string} field - The field in which the term was found + * @param {object} metadata - The metadata recorded about this term in this field + */ +lunr.MatchData.prototype.add = function (term, field, metadata) { + if (!(term in this.metadata)) { + this.metadata[term] = Object.create(null) + this.metadata[term][field] = metadata + return + } + + if (!(field in this.metadata[term])) { + this.metadata[term][field] = metadata + return + } + + var metadataKeys = Object.keys(metadata) + + for (var i = 0; i < metadataKeys.length; i++) { + var key = metadataKeys[i] + + if (key in this.metadata[term][field]) { + this.metadata[term][field][key] = this.metadata[term][field][key].concat(metadata[key]) + } else { + this.metadata[term][field][key] = metadata[key] + } + } +} +/** + * A lunr.Query provides a programmatic way of defining queries to be performed + * against a {@link lunr.Index}. + * + * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method + * so the query object is pre-initialized with the right index fields. + * + * @constructor + * @property {lunr.Query~Clause[]} clauses - An array of query clauses. + * @property {string[]} allFields - An array of all available fields in a lunr.Index. + */ +lunr.Query = function (allFields) { + this.clauses = [] + this.allFields = allFields +} + +/** + * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause. + * + * This allows wildcards to be added to the beginning and end of a term without having to manually do any string + * concatenation. + * + * The wildcard constants can be bitwise combined to select both leading and trailing wildcards. + * + * @constant + * @default + * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour + * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists + * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists + * @see lunr.Query~Clause + * @see lunr.Query#clause + * @see lunr.Query#term + * @example query term with trailing wildcard + * query.term('foo', { wildcard: lunr.Query.wildcard.TRAILING }) + * @example query term with leading and trailing wildcard + * query.term('foo', { + * wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING + * }) + */ + +lunr.Query.wildcard = new String ("*") +lunr.Query.wildcard.NONE = 0 +lunr.Query.wildcard.LEADING = 1 +lunr.Query.wildcard.TRAILING = 2 + +/** + * Constants for indicating what kind of presence a term must have in matching documents. + * + * @constant + * @enum {number} + * @see lunr.Query~Clause + * @see lunr.Query#clause + * @see lunr.Query#term + * @example query term with required presence + * query.term('foo', { presence: lunr.Query.presence.REQUIRED }) + */ +lunr.Query.presence = { + /** + * Term's presence in a document is optional, this is the default value. + */ + OPTIONAL: 1, + + /** + * Term's presence in a document is required, documents that do not contain + * this term will not be returned. + */ + REQUIRED: 2, + + /** + * Term's presence in a document is prohibited, documents that do contain + * this term will not be returned. + */ + PROHIBITED: 3 +} + +/** + * A single clause in a {@link lunr.Query} contains a term and details on how to + * match that term against a {@link lunr.Index}. + * + * @typedef {Object} lunr.Query~Clause + * @property {string[]} fields - The fields in an index this clause should be matched against. + * @property {number} [boost=1] - Any boost that should be applied when matching this clause. + * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be. + * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline. + * @property {number} [wildcard=lunr.Query.wildcard.NONE] - Whether the term should have wildcards appended or prepended. + * @property {number} [presence=lunr.Query.presence.OPTIONAL] - The terms presence in any matching documents. + */ + +/** + * Adds a {@link lunr.Query~Clause} to this query. + * + * Unless the clause contains the fields to be matched all fields will be matched. In addition + * a default boost of 1 is applied to the clause. + * + * @param {lunr.Query~Clause} clause - The clause to add to this query. + * @see lunr.Query~Clause + * @returns {lunr.Query} + */ +lunr.Query.prototype.clause = function (clause) { + if (!('fields' in clause)) { + clause.fields = this.allFields + } + + if (!('boost' in clause)) { + clause.boost = 1 + } + + if (!('usePipeline' in clause)) { + clause.usePipeline = true + } + + if (!('wildcard' in clause)) { + clause.wildcard = lunr.Query.wildcard.NONE + } + + if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) { + clause.term = "*" + clause.term + } + + if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) { + clause.term = "" + clause.term + "*" + } + + if (!('presence' in clause)) { + clause.presence = lunr.Query.presence.OPTIONAL + } + + this.clauses.push(clause) + + return this +} + +/** + * A negated query is one in which every clause has a presence of + * prohibited. These queries require some special processing to return + * the expected results. + * + * @returns boolean + */ +lunr.Query.prototype.isNegated = function () { + for (var i = 0; i < this.clauses.length; i++) { + if (this.clauses[i].presence != lunr.Query.presence.PROHIBITED) { + return false + } + } + + return true +} + +/** + * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause} + * to the list of clauses that make up this query. + * + * The term is used as is, i.e. no tokenization will be performed by this method. Instead conversion + * to a token or token-like string should be done before calling this method. + * + * The term will be converted to a string by calling `toString`. Multiple terms can be passed as an + * array, each term in the array will share the same options. + * + * @param {object|object[]} term - The term(s) to add to the query. + * @param {object} [options] - Any additional properties to add to the query clause. + * @returns {lunr.Query} + * @see lunr.Query#clause + * @see lunr.Query~Clause + * @example adding a single term to a query + * query.term("foo") + * @example adding a single term to a query and specifying search fields, term boost and automatic trailing wildcard + * query.term("foo", { + * fields: ["title"], + * boost: 10, + * wildcard: lunr.Query.wildcard.TRAILING + * }) + * @example using lunr.tokenizer to convert a string to tokens before using them as terms + * query.term(lunr.tokenizer("foo bar")) + */ +lunr.Query.prototype.term = function (term, options) { + if (Array.isArray(term)) { + term.forEach(function (t) { this.term(t, lunr.utils.clone(options)) }, this) + return this + } + + var clause = options || {} + clause.term = term.toString() + + this.clause(clause) + + return this +} +lunr.QueryParseError = function (message, start, end) { + this.name = "QueryParseError" + this.message = message + this.start = start + this.end = end +} + +lunr.QueryParseError.prototype = new Error +lunr.QueryLexer = function (str) { + this.lexemes = [] + this.str = str + this.length = str.length + this.pos = 0 + this.start = 0 + this.escapeCharPositions = [] +} + +lunr.QueryLexer.prototype.run = function () { + var state = lunr.QueryLexer.lexText + + while (state) { + state = state(this) + } +} + +lunr.QueryLexer.prototype.sliceString = function () { + var subSlices = [], + sliceStart = this.start, + sliceEnd = this.pos + + for (var i = 0; i < this.escapeCharPositions.length; i++) { + sliceEnd = this.escapeCharPositions[i] + subSlices.push(this.str.slice(sliceStart, sliceEnd)) + sliceStart = sliceEnd + 1 + } + + subSlices.push(this.str.slice(sliceStart, this.pos)) + this.escapeCharPositions.length = 0 + + return subSlices.join('') +} + +lunr.QueryLexer.prototype.emit = function (type) { + this.lexemes.push({ + type: type, + str: this.sliceString(), + start: this.start, + end: this.pos + }) + + this.start = this.pos +} + +lunr.QueryLexer.prototype.escapeCharacter = function () { + this.escapeCharPositions.push(this.pos - 1) + this.pos += 1 +} + +lunr.QueryLexer.prototype.next = function () { + if (this.pos >= this.length) { + return lunr.QueryLexer.EOS + } + + var char = this.str.charAt(this.pos) + this.pos += 1 + return char +} + +lunr.QueryLexer.prototype.width = function () { + return this.pos - this.start +} + +lunr.QueryLexer.prototype.ignore = function () { + if (this.start == this.pos) { + this.pos += 1 + } + + this.start = this.pos +} + +lunr.QueryLexer.prototype.backup = function () { + this.pos -= 1 +} + +lunr.QueryLexer.prototype.acceptDigitRun = function () { + var char, charCode + + do { + char = this.next() + charCode = char.charCodeAt(0) + } while (charCode > 47 && charCode < 58) + + if (char != lunr.QueryLexer.EOS) { + this.backup() + } +} + +lunr.QueryLexer.prototype.more = function () { + return this.pos < this.length +} + +lunr.QueryLexer.EOS = 'EOS' +lunr.QueryLexer.FIELD = 'FIELD' +lunr.QueryLexer.TERM = 'TERM' +lunr.QueryLexer.EDIT_DISTANCE = 'EDIT_DISTANCE' +lunr.QueryLexer.BOOST = 'BOOST' +lunr.QueryLexer.PRESENCE = 'PRESENCE' + +lunr.QueryLexer.lexField = function (lexer) { + lexer.backup() + lexer.emit(lunr.QueryLexer.FIELD) + lexer.ignore() + return lunr.QueryLexer.lexText +} + +lunr.QueryLexer.lexTerm = function (lexer) { + if (lexer.width() > 1) { + lexer.backup() + lexer.emit(lunr.QueryLexer.TERM) + } + + lexer.ignore() + + if (lexer.more()) { + return lunr.QueryLexer.lexText + } +} + +lunr.QueryLexer.lexEditDistance = function (lexer) { + lexer.ignore() + lexer.acceptDigitRun() + lexer.emit(lunr.QueryLexer.EDIT_DISTANCE) + return lunr.QueryLexer.lexText +} + +lunr.QueryLexer.lexBoost = function (lexer) { + lexer.ignore() + lexer.acceptDigitRun() + lexer.emit(lunr.QueryLexer.BOOST) + return lunr.QueryLexer.lexText +} + +lunr.QueryLexer.lexEOS = function (lexer) { + if (lexer.width() > 0) { + lexer.emit(lunr.QueryLexer.TERM) + } +} + +// This matches the separator used when tokenising fields +// within a document. These should match otherwise it is +// not possible to search for some tokens within a document. +// +// It is possible for the user to change the separator on the +// tokenizer so it _might_ clash with any other of the special +// characters already used within the search string, e.g. :. +// +// This means that it is possible to change the separator in +// such a way that makes some words unsearchable using a search +// string. +lunr.QueryLexer.termSeparator = lunr.tokenizer.separator + +lunr.QueryLexer.lexText = function (lexer) { + while (true) { + var char = lexer.next() + + if (char == lunr.QueryLexer.EOS) { + return lunr.QueryLexer.lexEOS + } + + // Escape character is '\' + if (char.charCodeAt(0) == 92) { + lexer.escapeCharacter() + continue + } + + if (char == ":") { + return lunr.QueryLexer.lexField + } + + if (char == "~") { + lexer.backup() + if (lexer.width() > 0) { + lexer.emit(lunr.QueryLexer.TERM) + } + return lunr.QueryLexer.lexEditDistance + } + + if (char == "^") { + lexer.backup() + if (lexer.width() > 0) { + lexer.emit(lunr.QueryLexer.TERM) + } + return lunr.QueryLexer.lexBoost + } + + // "+" indicates term presence is required + // checking for length to ensure that only + // leading "+" are considered + if (char == "+" && lexer.width() === 1) { + lexer.emit(lunr.QueryLexer.PRESENCE) + return lunr.QueryLexer.lexText + } + + // "-" indicates term presence is prohibited + // checking for length to ensure that only + // leading "-" are considered + if (char == "-" && lexer.width() === 1) { + lexer.emit(lunr.QueryLexer.PRESENCE) + return lunr.QueryLexer.lexText + } + + if (char.match(lunr.QueryLexer.termSeparator)) { + return lunr.QueryLexer.lexTerm + } + } +} + +lunr.QueryParser = function (str, query) { + this.lexer = new lunr.QueryLexer (str) + this.query = query + this.currentClause = {} + this.lexemeIdx = 0 +} + +lunr.QueryParser.prototype.parse = function () { + this.lexer.run() + this.lexemes = this.lexer.lexemes + + var state = lunr.QueryParser.parseClause + + while (state) { + state = state(this) + } + + return this.query +} + +lunr.QueryParser.prototype.peekLexeme = function () { + return this.lexemes[this.lexemeIdx] +} + +lunr.QueryParser.prototype.consumeLexeme = function () { + var lexeme = this.peekLexeme() + this.lexemeIdx += 1 + return lexeme +} + +lunr.QueryParser.prototype.nextClause = function () { + var completedClause = this.currentClause + this.query.clause(completedClause) + this.currentClause = {} +} + +lunr.QueryParser.parseClause = function (parser) { + var lexeme = parser.peekLexeme() + + if (lexeme == undefined) { + return + } + + switch (lexeme.type) { + case lunr.QueryLexer.PRESENCE: + return lunr.QueryParser.parsePresence + case lunr.QueryLexer.FIELD: + return lunr.QueryParser.parseField + case lunr.QueryLexer.TERM: + return lunr.QueryParser.parseTerm + default: + var errorMessage = "expected either a field or a term, found " + lexeme.type + + if (lexeme.str.length >= 1) { + errorMessage += " with value '" + lexeme.str + "'" + } + + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } +} + +lunr.QueryParser.parsePresence = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + switch (lexeme.str) { + case "-": + parser.currentClause.presence = lunr.Query.presence.PROHIBITED + break + case "+": + parser.currentClause.presence = lunr.Query.presence.REQUIRED + break + default: + var errorMessage = "unrecognised presence operator'" + lexeme.str + "'" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + var errorMessage = "expecting term or field, found nothing" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.FIELD: + return lunr.QueryParser.parseField + case lunr.QueryLexer.TERM: + return lunr.QueryParser.parseTerm + default: + var errorMessage = "expecting term or field, found '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } +} + +lunr.QueryParser.parseField = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + if (parser.query.allFields.indexOf(lexeme.str) == -1) { + var possibleFields = parser.query.allFields.map(function (f) { return "'" + f + "'" }).join(', '), + errorMessage = "unrecognised field '" + lexeme.str + "', possible fields: " + possibleFields + + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + parser.currentClause.fields = [lexeme.str] + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + var errorMessage = "expecting term, found nothing" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.TERM: + return lunr.QueryParser.parseTerm + default: + var errorMessage = "expecting term, found '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } +} + +lunr.QueryParser.parseTerm = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + parser.currentClause.term = lexeme.str.toLowerCase() + + if (lexeme.str.indexOf("*") != -1) { + parser.currentClause.usePipeline = false + } + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + parser.nextClause() + return + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.TERM: + parser.nextClause() + return lunr.QueryParser.parseTerm + case lunr.QueryLexer.FIELD: + parser.nextClause() + return lunr.QueryParser.parseField + case lunr.QueryLexer.EDIT_DISTANCE: + return lunr.QueryParser.parseEditDistance + case lunr.QueryLexer.BOOST: + return lunr.QueryParser.parseBoost + case lunr.QueryLexer.PRESENCE: + parser.nextClause() + return lunr.QueryParser.parsePresence + default: + var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } +} + +lunr.QueryParser.parseEditDistance = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + var editDistance = parseInt(lexeme.str, 10) + + if (isNaN(editDistance)) { + var errorMessage = "edit distance must be numeric" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + parser.currentClause.editDistance = editDistance + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + parser.nextClause() + return + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.TERM: + parser.nextClause() + return lunr.QueryParser.parseTerm + case lunr.QueryLexer.FIELD: + parser.nextClause() + return lunr.QueryParser.parseField + case lunr.QueryLexer.EDIT_DISTANCE: + return lunr.QueryParser.parseEditDistance + case lunr.QueryLexer.BOOST: + return lunr.QueryParser.parseBoost + case lunr.QueryLexer.PRESENCE: + parser.nextClause() + return lunr.QueryParser.parsePresence + default: + var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } +} + +lunr.QueryParser.parseBoost = function (parser) { + var lexeme = parser.consumeLexeme() + + if (lexeme == undefined) { + return + } + + var boost = parseInt(lexeme.str, 10) + + if (isNaN(boost)) { + var errorMessage = "boost must be numeric" + throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end) + } + + parser.currentClause.boost = boost + + var nextLexeme = parser.peekLexeme() + + if (nextLexeme == undefined) { + parser.nextClause() + return + } + + switch (nextLexeme.type) { + case lunr.QueryLexer.TERM: + parser.nextClause() + return lunr.QueryParser.parseTerm + case lunr.QueryLexer.FIELD: + parser.nextClause() + return lunr.QueryParser.parseField + case lunr.QueryLexer.EDIT_DISTANCE: + return lunr.QueryParser.parseEditDistance + case lunr.QueryLexer.BOOST: + return lunr.QueryParser.parseBoost + case lunr.QueryLexer.PRESENCE: + parser.nextClause() + return lunr.QueryParser.parsePresence + default: + var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'" + throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end) + } +} + + /** + * export the module via AMD, CommonJS or as a browser global + * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js + */ + ;(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(factory) + } else if (typeof exports === 'object') { + /** + * Node. Does not work with strict CommonJS, but + * only CommonJS-like environments that support module.exports, + * like Node. + */ + module.exports = factory() + } else { + // Browser globals (root is window) + root.lunr = factory() + } + }(this, function () { + /** + * Just return a value to define the module export. + * This example returns an object, but the module + * can return a function as the exported value. + */ + return lunr + })) +})(); diff --git a/search/main.js b/search/main.js new file mode 100644 index 00000000..a5e469d7 --- /dev/null +++ b/search/main.js @@ -0,0 +1,109 @@ +function getSearchTermFromLocation() { + var sPageURL = window.location.search.substring(1); + var sURLVariables = sPageURL.split('&'); + for (var i = 0; i < sURLVariables.length; i++) { + var sParameterName = sURLVariables[i].split('='); + if (sParameterName[0] == 'q') { + return decodeURIComponent(sParameterName[1].replace(/\+/g, '%20')); + } + } +} + +function joinUrl (base, path) { + if (path.substring(0, 1) === "/") { + // path starts with `/`. Thus it is absolute. + return path; + } + if (base.substring(base.length-1) === "/") { + // base ends with `/` + return base + path; + } + return base + "/" + path; +} + +function escapeHtml (value) { + return value.replace(/&/g, '&') + .replace(/"/g, '"') + .replace(//g, '>'); +} + +function formatResult (location, title, summary) { + return '

'+ escapeHtml(title) + '

' + escapeHtml(summary) +'

'; +} + +function displayResults (results) { + var search_results = document.getElementById("mkdocs-search-results"); + while (search_results.firstChild) { + search_results.removeChild(search_results.firstChild); + } + if (results.length > 0){ + for (var i=0; i < results.length; i++){ + var result = results[i]; + var html = formatResult(result.location, result.title, result.summary); + search_results.insertAdjacentHTML('beforeend', html); + } + } else { + var noResultsText = search_results.getAttribute('data-no-results-text'); + if (!noResultsText) { + noResultsText = "No results found"; + } + search_results.insertAdjacentHTML('beforeend', '

' + noResultsText + '

'); + } +} + +function doSearch () { + var query = document.getElementById('mkdocs-search-query').value; + if (query.length > min_search_length) { + if (!window.Worker) { + displayResults(search(query)); + } else { + searchWorker.postMessage({query: query}); + } + } else { + // Clear results for short queries + displayResults([]); + } +} + +function initSearch () { + var search_input = document.getElementById('mkdocs-search-query'); + if (search_input) { + search_input.addEventListener("keyup", doSearch); + } + var term = getSearchTermFromLocation(); + if (term) { + search_input.value = term; + doSearch(); + } +} + +function onWorkerMessage (e) { + if (e.data.allowSearch) { + initSearch(); + } else if (e.data.results) { + var results = e.data.results; + displayResults(results); + } else if (e.data.config) { + min_search_length = e.data.config.min_search_length-1; + } +} + +if (!window.Worker) { + console.log('Web Worker API not supported'); + // load index in main thread + $.getScript(joinUrl(base_url, "search/worker.js")).done(function () { + console.log('Loaded worker'); + init(); + window.postMessage = function (msg) { + onWorkerMessage({data: msg}); + }; + }).fail(function (jqxhr, settings, exception) { + console.error('Could not load worker.js'); + }); +} else { + // Wrap search in a web worker + var searchWorker = new Worker(joinUrl(base_url, "search/worker.js")); + searchWorker.postMessage({init: true}); + searchWorker.onmessage = onWorkerMessage; +} diff --git a/search/search_index.json b/search/search_index.json new file mode 100644 index 00000000..62e7ab36 --- /dev/null +++ b/search/search_index.json @@ -0,0 +1 @@ +{"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"","title":"Home"},{"location":"about/","text":"Belajarpython \u00b7 Belajarpython adalah situs kolaboratif tutorial pemrograman Python bahasa Indonesia Ikuti Tutorial: Mulai belajar bahasa pemrograman python dari tingkat dasar dengan tutorial yang dikhususkan untuk pemula agar lebih cepat mempelajari bahasa pemrograman python. Baca Artikel: Baca artikel terbaru dan terpopuler tentang bahasa pemrograman python dengan beragam topik. Artikel dibuat oleh komunitas dan ditujukan untuk komunitas. Ajukan Pertanyaan: Ajukan setiap pertanyaan yang anda temui tentang bahasa pemrograman python. Setiap orang di komunitas akan segera menyelesaikan setiap pertanyaan pengguna. Kontribusi Belajarpython adalah situs terbuka (open source) yang dikembangkan oleh developer untuk developer. Semua orang baik dari kalangan :trollface: developer, :man: mahasiswa, :older_woman: pengajar, bahkan :baby: anak kecil yang baru mempelajari bahasa pemrograman python bisa ikut memberikan :heart: kontribusinya disini Code of Conduct Belajarpython telah mengadopsi Kode Etik yang kami harapkan akan diikuti oleh peserta proyek terbuka ini. Mohon baca full text so that you can understand what actions will and will not be tolerated. Panduan Kontribusi Baca panduan kontribusi dari kami untuk mempelajari tentang proses pengembangan konten disini. Good First Issues Untuk membantu Anda membuat kaki Anda basah dan membuat Anda terbiasa dengan proses kontribusi kami, kami memiliki daftar good first issues yang mengandung bug yang memiliki lingkup yang relatif terbatas. Ini adalah tempat yang bagus untuk memulai. License Belajarpython is MIT licensed .","title":"About"},{"location":"about/#belajarpython","text":"Belajarpython adalah situs kolaboratif tutorial pemrograman Python bahasa Indonesia Ikuti Tutorial: Mulai belajar bahasa pemrograman python dari tingkat dasar dengan tutorial yang dikhususkan untuk pemula agar lebih cepat mempelajari bahasa pemrograman python. Baca Artikel: Baca artikel terbaru dan terpopuler tentang bahasa pemrograman python dengan beragam topik. Artikel dibuat oleh komunitas dan ditujukan untuk komunitas. Ajukan Pertanyaan: Ajukan setiap pertanyaan yang anda temui tentang bahasa pemrograman python. Setiap orang di komunitas akan segera menyelesaikan setiap pertanyaan pengguna.","title":"Belajarpython ·"},{"location":"about/#kontribusi","text":"Belajarpython adalah situs terbuka (open source) yang dikembangkan oleh developer untuk developer. Semua orang baik dari kalangan :trollface: developer, :man: mahasiswa, :older_woman: pengajar, bahkan :baby: anak kecil yang baru mempelajari bahasa pemrograman python bisa ikut memberikan :heart: kontribusinya disini","title":"Kontribusi"},{"location":"about/#code-of-conduct","text":"Belajarpython telah mengadopsi Kode Etik yang kami harapkan akan diikuti oleh peserta proyek terbuka ini. Mohon baca full text so that you can understand what actions will and will not be tolerated.","title":"Code of Conduct"},{"location":"about/#panduan-kontribusi","text":"Baca panduan kontribusi dari kami untuk mempelajari tentang proses pengembangan konten disini.","title":"Panduan Kontribusi"},{"location":"about/#good-first-issues","text":"Untuk membantu Anda membuat kaki Anda basah dan membuat Anda terbiasa dengan proses kontribusi kami, kami memiliki daftar good first issues yang mengandung bug yang memiliki lingkup yang relatif terbatas. Ini adalah tempat yang bagus untuk memulai.","title":"Good First Issues"},{"location":"about/#license","text":"Belajarpython is MIT licensed .","title":"License"},{"location":"article/","text":"TUTORIAL Tutorial Membaca dan Menulis File Dengan Python INFO, TUTORIAL 3 Library Python Terpopuler Untuk Data Science INFO 5 Tren Teratas Tentang Python Minggu ini di Github BERITA Python Melesat di Daftar Bahasa Pemrograman Yang Paling Populer TUTORIAL Sastrawi, Natural Language Processing Mudah Dengan Python","title":"Article"},{"location":"artikel/","text":"{% for post in site.posts %} {{ post.category | upcase }} {{ post.title }} {% endfor %}","title":"Artikel"},{"location":"contribute/","text":"Sebelumnya, terimakasih banyak karena telah meluangkan waktu Anda untuk ikut berkontribusi! Belajarpython adalah situs terbuka (open source) yang dikembangkan oleh developer untuk developer. Semua orang baik dari kalangan :trollface: developer, :man: mahasiswa, :older_woman: pengajar, bahkan :baby: anak kecil yang baru mempelajari bahasa pemrograman python bisa ikut memberikan :heart: kontribusinya di sini. Di bawah ini adalah panduan untuk berkontribusi di Belajarpython, di mana website-nya sendiri dikelola oleh Developer Belajarpython di github. Yang akan disampaikan di bawah ini bukanlah peraturan, melainkan panduan (guidelines). Gunakan penilaian terbaik Anda, dan jangan ragu untuk mengajukan perubahan pada setiap dokumen dalam permintaan penarikan (pull request). Table Of Contents Code of Conduct Apa yang harus saya ketahui sebelum saya mulai berkontribusi? * Tutorial * Artikel Bagaimana cara berkontribusi? * Meyempurnakan Tutorial * Menulis Artikel * Melaporkan Bugs Code of Conduct Proyek ini dan semua orang yang berpartisipasi di dalamnya diatur oleh Code of Conduct Belajarpython . Dengan berpartisipasi, Anda diharapkan untuk menjunjung nilai ini. Tolong laporkan perilaku yang tidak dapat diterima ke master@belajarpython.com . Apa yang harus saya ketahui sebelum saya mulai berkontribusi? Belajarpython adalah situs terbuka sederhana untuk mempelajari bahasa pemrograman python, untuk saat ini situs terdiri dari dua bagian dasar, yaitu Tutorial dan Artikel . Setiap konten dari masing-masing bagian tersebut bebas untuk dimodifikasi oleh semua orang. Konten artikel dan tutorial dapat diakses melalui menu navigasi di bagian kanan atas pada setiap halaman. Tutorial Pada bagian tutorial menjelaskan tentang bagaimana cara memulai belajar bahasa pemrograman python untuk pemula, mulai dari bagian pengenalan, instalasi, dasar-dasar sampai ke bagian pembuatan website sederhana dengan menggunakan python. Artikel Pada bagian artikel, dibahas semua hal tentang tips trik, tutorial penggunaan python untuk membuat berbagai aplikasi, berita tentang python dan hal-hal menarik lainya tentang bahasa pemrograman python. Setiap artikel/posting dibuat oleh satu orang dan bisa diperbaiki (improve) oleh semua orang. Bagaimana cara berkontribusi Untuk mulai berkontribusi di belajarpython Anda harus menggunakan akun Github. Jika anda belum mempunyai akun Github, silahkan untuk membuatnya terlebih dahulu. Menyempurnakan Tutorial Setiap tutorial yang ada di website belajarpython belum sepenuhnya mudah dipahami oleh setiap pembaca. Anda bisa menyempurnakan setiap tutorial. 1. Klik link Edit tutorial ini yang berada di bagian bawah setiap tutorial. Klik tombol hijau Fork this repository and propose changes Edit bagian tutorial yang ingin anda sempurnakan. Jika sudah Klik tombol hijai Propose file change Berikan keterangan perubahan file dan Klik tombol Create pull request Klik Create pull request Menulis Artikel Setiap orang bisa menulis artikel apapun yang berhubungan dengan bahasa pemrograman python. Setiap artikel yang Anda sumbangkan akan sangat berguna bagi orang lain yang ingin mempelajari bahasa pemrograman python. 1. Masuk ke repositori Belajarpython di github, klik folder _posts , klik tombol Create new file atau klik link ini https://github.com/belajarpythoncom/belajarpython.com/new/master/_posts Tuliskan nama file dengan format tahun-bulan-tanggal-judul.md Tulis artikel dengan template di bawah ini. --- layout: article title: Tulis judul artikel di sini date: 2018-05-09 16:16:01 -0600 categories: tulis kategori di sini --- --- Tulis konten artikel di sini... Klik tombol Propose new file Klik tombol Create pull request Melaporkan Bugs Anda bisa melaporkan bug dan masalah website Belajarpython di Issue github. Jika ada pertanyaan terkait 'Kontribusi di Belajarpython' Silahkan kirim email ke purwanto1337@gmail.com","title":"Kontribusi di Belajarpython"},{"location":"contribute/#table-of-contents","text":"Code of Conduct Apa yang harus saya ketahui sebelum saya mulai berkontribusi? * Tutorial * Artikel Bagaimana cara berkontribusi? * Meyempurnakan Tutorial * Menulis Artikel * Melaporkan Bugs","title":"Table Of Contents"},{"location":"contribute/#code-of-conduct","text":"Proyek ini dan semua orang yang berpartisipasi di dalamnya diatur oleh Code of Conduct Belajarpython . Dengan berpartisipasi, Anda diharapkan untuk menjunjung nilai ini. Tolong laporkan perilaku yang tidak dapat diterima ke master@belajarpython.com .","title":"Code of Conduct"},{"location":"contribute/#apa-yang-harus-saya-ketahui-sebelum-saya-mulai-berkontribusi","text":"Belajarpython adalah situs terbuka sederhana untuk mempelajari bahasa pemrograman python, untuk saat ini situs terdiri dari dua bagian dasar, yaitu Tutorial dan Artikel . Setiap konten dari masing-masing bagian tersebut bebas untuk dimodifikasi oleh semua orang. Konten artikel dan tutorial dapat diakses melalui menu navigasi di bagian kanan atas pada setiap halaman.","title":"Apa yang harus saya ketahui sebelum saya mulai berkontribusi?"},{"location":"contribute/#tutorial","text":"Pada bagian tutorial menjelaskan tentang bagaimana cara memulai belajar bahasa pemrograman python untuk pemula, mulai dari bagian pengenalan, instalasi, dasar-dasar sampai ke bagian pembuatan website sederhana dengan menggunakan python.","title":"Tutorial"},{"location":"contribute/#artikel","text":"Pada bagian artikel, dibahas semua hal tentang tips trik, tutorial penggunaan python untuk membuat berbagai aplikasi, berita tentang python dan hal-hal menarik lainya tentang bahasa pemrograman python. Setiap artikel/posting dibuat oleh satu orang dan bisa diperbaiki (improve) oleh semua orang.","title":"Artikel"},{"location":"contribute/#bagaimana-cara-berkontribusi","text":"Untuk mulai berkontribusi di belajarpython Anda harus menggunakan akun Github. Jika anda belum mempunyai akun Github, silahkan untuk membuatnya terlebih dahulu.","title":"Bagaimana cara berkontribusi"},{"location":"contribute/#menyempurnakan-tutorial","text":"Setiap tutorial yang ada di website belajarpython belum sepenuhnya mudah dipahami oleh setiap pembaca. Anda bisa menyempurnakan setiap tutorial. 1. Klik link Edit tutorial ini yang berada di bagian bawah setiap tutorial. Klik tombol hijau Fork this repository and propose changes Edit bagian tutorial yang ingin anda sempurnakan. Jika sudah Klik tombol hijai Propose file change Berikan keterangan perubahan file dan Klik tombol Create pull request Klik Create pull request","title":"Menyempurnakan Tutorial"},{"location":"contribute/#menulis-artikel","text":"Setiap orang bisa menulis artikel apapun yang berhubungan dengan bahasa pemrograman python. Setiap artikel yang Anda sumbangkan akan sangat berguna bagi orang lain yang ingin mempelajari bahasa pemrograman python. 1. Masuk ke repositori Belajarpython di github, klik folder _posts , klik tombol Create new file atau klik link ini https://github.com/belajarpythoncom/belajarpython.com/new/master/_posts Tuliskan nama file dengan format tahun-bulan-tanggal-judul.md Tulis artikel dengan template di bawah ini. --- layout: article title: Tulis judul artikel di sini date: 2018-05-09 16:16:01 -0600 categories: tulis kategori di sini --- --- Tulis konten artikel di sini... Klik tombol Propose new file Klik tombol Create pull request","title":"Menulis Artikel"},{"location":"contribute/#melaporkan-bugs","text":"Anda bisa melaporkan bug dan masalah website Belajarpython di Issue github. Jika ada pertanyaan terkait 'Kontribusi di Belajarpython' Silahkan kirim email ke purwanto1337@gmail.com","title":"Melaporkan Bugs"},{"location":"tutorial/","text":"{% for tut in site.tutorial %} {{ tut.title | jsonify }},{{ tut.order }} {% endfor %}","title":"Tutorial"},{"location":"2018/05/sastrawi-natural-language-processing-bahasa-indonesia/","text":"Sastrawi adalah perpustakaan PHP sederhana yang memungkinkan Anda untuk mengurangi kata-kata yang terinfleksi dalam Bahasa Indonesia (Bahasa Indonesia) ke bentuk dasarnya (batang) Stemming adalah proses mengubah kata berimbuhan menjadi kata dasar. Contoh: menahan => tahan berbalas-balasan => balas Contoh kasus Misalnya sebuah blog post berisi: Rakyat memenuhi halaman gedung untuk menyuarakan isi hatinya. Pencarian dengan query di bawah ini tidak akan menemukan post di atas SELECT * FROM posts WHERE content LIKE '%suara%' Proses stemming dapat membantu menemukan dokumen yang sedang dicari yaitu dengan menanggalkan imbuhan-imbuhan hingga hanya menyisakan kata dasar seperti berikut: rakyat penuh halaman gedung suara isi hati Lalu kata kunci pencarian juga dijadikan kata dasar: Bersuara => suara Penggunaan # import StemmerFactory class from Sastrawi.Stemmer.StemmerFactory import StemmerFactory # create stemmer factory = StemmerFactory() stemmer = factory.create_stemmer() # stemming process sentence = 'Perekonomian Indonesia sedang dalam pertumbuhan yang membanggakan' output = stemmer.stem(sentence) print(output) # ekonomi indonesia sedang dalam tumbuh yang bangga print(stemmer.stem('Mereka meniru-nirukannya')) # mereka tiru Untuk lebih lengkapnya silahkan lihat di Github penulis: Purwanto https://github.com/purwnt","title":"Sastrawi, Natural Language Processing Mudah Dengan Python"},{"location":"2018/05/sastrawi-natural-language-processing-bahasa-indonesia/#contoh-kasus","text":"Misalnya sebuah blog post berisi: Rakyat memenuhi halaman gedung untuk menyuarakan isi hatinya. Pencarian dengan query di bawah ini tidak akan menemukan post di atas SELECT * FROM posts WHERE content LIKE '%suara%' Proses stemming dapat membantu menemukan dokumen yang sedang dicari yaitu dengan menanggalkan imbuhan-imbuhan hingga hanya menyisakan kata dasar seperti berikut: rakyat penuh halaman gedung suara isi hati Lalu kata kunci pencarian juga dijadikan kata dasar: Bersuara => suara","title":"Contoh kasus"},{"location":"2018/05/sastrawi-natural-language-processing-bahasa-indonesia/#penggunaan","text":"# import StemmerFactory class from Sastrawi.Stemmer.StemmerFactory import StemmerFactory # create stemmer factory = StemmerFactory() stemmer = factory.create_stemmer() # stemming process sentence = 'Perekonomian Indonesia sedang dalam pertumbuhan yang membanggakan' output = stemmer.stem(sentence) print(output) # ekonomi indonesia sedang dalam tumbuh yang bangga print(stemmer.stem('Mereka meniru-nirukannya')) # mereka tiru Untuk lebih lengkapnya silahkan lihat di Github penulis: Purwanto https://github.com/purwnt","title":"Penggunaan"},{"location":"2018/09/2020-10-26-Source-untuk-belajar-python/","text":"Python menjadi salah satu bahasa pemrograman yang paling diminati saat ini. seperti dilansir dari situs The Redmonk python menduduki peringkat kedua setelah javascript. Karena banyaknya pengguna bahasa python, mungkin ini yang membuat developer python lebih semangat untuk meningkatkan performa bahasa python. Supaya tidak ketinggalan tren python mau tidak mau ya kita harus terus belajar, maka dari itu di artikel ini saya ingin mencoba berbagi beberapa referensi sumber yang saya gunakan untuk belajar bahasa python. Ps: kalian bisa menambahkan sumber lain yang kalian punya ke artikel ini. 1. realpython.com realpython.com adalah situs belajar pemrograman python berbahasa Inggris. Di situs ini kamu bisa mengikuti tutorial untuk project-project kecil, kamu bisa baca artikel tentang bahasa pemrograman, kamu juga bisa subscribe email realpython jika kamu ingin dikirimi email berita terbaru tentang bahasa pemrograman python. Ada juga video kursus nya sehingga kamu bisa belajar python step-by-step. Lalu ada Kuis dimana kamu bisa mengecek progress skill python kamu. Dan yang paling bagus menurutku adalah fitur learning path di situs ini, jadi kamu bisa fokus belajar ke bidang keahlian yang ingin kamu tekuni misalkan kamu ingin menjadi python web developer atau data scientist. 2. belajarpython.com kalau tadi sudah yang berbahasa Inggris, kayaknya kita juga harus memiliki sumber referensi belajar yang menggunakan bahasa sehari-hari kita sendiri. Salah satunya adalah situs dimana artikel ini dibuat yaitu belajarpython.com. Di situs ini kamu bisa belajar dengan mengikuti tutorial yang sudah dibuat hasil dari kontribusi para kontributor (situs ini open source) dan membaca artikel tentang python, yang pasti itu semua ditulis dengan bahasa Indonesia jadi jangan takut untuk belajar pemrogaman karena merasa tidak bisa bahasa Inggris. mungkin baru sedikit sumber yang bisa saya berikan karena situs ini yang sudah saya coba langsung. Jika teman-teman memiliki sumber lain silahkan masukkan ke artikel ini. Mari kita saling berbagi!.","title":"Source untuk belajar python"},{"location":"2018/09/2020-10-26-Source-untuk-belajar-python/#1-realpythoncom","text":"realpython.com adalah situs belajar pemrograman python berbahasa Inggris. Di situs ini kamu bisa mengikuti tutorial untuk project-project kecil, kamu bisa baca artikel tentang bahasa pemrograman, kamu juga bisa subscribe email realpython jika kamu ingin dikirimi email berita terbaru tentang bahasa pemrograman python. Ada juga video kursus nya sehingga kamu bisa belajar python step-by-step. Lalu ada Kuis dimana kamu bisa mengecek progress skill python kamu. Dan yang paling bagus menurutku adalah fitur learning path di situs ini, jadi kamu bisa fokus belajar ke bidang keahlian yang ingin kamu tekuni misalkan kamu ingin menjadi python web developer atau data scientist.","title":"1. realpython.com"},{"location":"2018/09/2020-10-26-Source-untuk-belajar-python/#2-belajarpythoncom","text":"kalau tadi sudah yang berbahasa Inggris, kayaknya kita juga harus memiliki sumber referensi belajar yang menggunakan bahasa sehari-hari kita sendiri. Salah satunya adalah situs dimana artikel ini dibuat yaitu belajarpython.com. Di situs ini kamu bisa belajar dengan mengikuti tutorial yang sudah dibuat hasil dari kontribusi para kontributor (situs ini open source) dan membaca artikel tentang python, yang pasti itu semua ditulis dengan bahasa Indonesia jadi jangan takut untuk belajar pemrogaman karena merasa tidak bisa bahasa Inggris. mungkin baru sedikit sumber yang bisa saya berikan karena situs ini yang sudah saya coba langsung. Jika teman-teman memiliki sumber lain silahkan masukkan ke artikel ini. Mari kita saling berbagi!.","title":"2. belajarpython.com"},{"location":"2018/09/3-library-python-terbaik-untuk-data-science/","text":"Banyaknya kelebihan pada pemrograman pythno seperti efisiensei, keterbacaan kode dan kecepatan telah membuat python menjadi bahasa pemrograman yang banyak digunakan oleh para data scientist. Pyton menjadi pilihan untuk pada data scientist dan machine learning engineer untuk mengembangkan model dan berbagai aplikasi terkait data science. Karena penggunaannya yang luas, Python memiliki banyak library yang memudahkan para ilmuwan data / data scientist untuk menyelesaikan tugas-tugas rumit tanpa banyak gangguan pengkodean. Berikut adalah 3 library Python yang paling banyak digunakan untuk data science. 1. NumPy NumPy (kependekan dari Numerical Python) adalah salah satu library teratas yang dilengkapi dengan sumber daya yang berguna untuk membantu para data scientist mengubah Python menjadi alat analisis dan pemodelan ilmiah yang kuat. Libary Open source terpopuler ini tersedia di bawah lisensi BSD. Ini adalah pustaka Python dasar untuk melakukan tugas dalam komputasi ilmiah. NumPy adalah bagian dari ekosistem berbasis Python yang lebih besar dari tool open source yang disebut SciPy. Perpustakaan memberdayakan Python dengan struktur data substansial untuk mudah melakukan perhitungan multi-dimensi (multi-dimensional arrays) dan perhitungan matrik. Selain penggunaannya dalam menyelesaikan persamaan aljabar linier (linear algebra equations) dan perhitungan matematis lainnya, NumPy juga digunakan sebagai wadah multi-dimensi serbaguna untuk berbagai jenis data generik. Lebih hebatnya, NumPy terintegrasi dengan bahasa pemrograman lain seperti C / C ++ dan Fortran. Fleksibilitas perpustakaan NumPy memungkinkannya untuk dengan mudah dan cepat bergabung dengan berbagai database dan tools. Sebagai contoh, mari kita lihat bagaimana NumPy (disingkat np) dapat digunakan untuk mengalikan dua matriks. Mari memulainya dengan meng-import library ini terlebih dahulu ( disini kita menggunakan Jupyter notebook untuk contoh) import numpy as np Selanjutnya, kita akan menggunakan fungsi eye() untuk menghasilkan matriks identitas dengan dimensi yang ditetapkan. matrix_one = np.eye(3) matrix_one Outputnya akan seperti dibawah ini : array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]) Mari hasilkan matriks 3x3 lainnya. Kita akan menggunakan fungsi arange([starting number], [stopping number]) untuk mengatur nomor. Perhatikan bahwa parameter pertama dalam fungsi adalah nomor awal yang akan didaftar dan nomor terakhir tidak termasuk dalam hasil yang dihasilkan. Juga, fungsi reshape() diterapkan untuk memodifikasi dimensi dari matriks yang dihasilkan secara original ke dimensi yang diinginkan. Agar matrik bisa \"multiply-able\", mereka harus memiliki dimensi yang sama. matrix_two = np.arange(1,10).reshape(3,3) matrix_two Outputnya akan seperti dibawah ini : array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) ``` Mari gunakan fungsi `dot()` untuk mengalikan dua matriks. ```python matrix_multiply = np.dot(matrix_one, matrix_two) matrix_multiply Outputnya akan seperti dibawah ini : array([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]) Kita telah berhasil melipatgandakan dua matriks tanpa menggunakan vanilla Python. Berikut ini seluruh kode untuk contoh ini: import numpy as np #menghasilkan a 3 by 3 identity matrix matrix_one = np.eye(3) matrix_one #menghasilkan 3 by 3 matrix lainya for perkalian matrix_two = np.arange(1,10).reshape(3,3) matrix_two #mengkalikan dua array matrix_multiply = np.dot(matrix_one, matrix_two) matrix_multiply 2. Pandas Pandas adalah library hebat lain yang dapat meningkatkan keterampilan Python Anda untuk data science. Sama seperti NumPy, Pandas milik keluarga perangkat lunak open source SciPy dan tersedia di bawah lisensi perangkat lunak bebas BSD. Pandas menawarkan alat serbaguna dan kuat untuk struktur data dan melakukan analisis data yang luas. Library ini berfungsi dengan baik dengan data dunia nyata yang tidak lengkap, tidak terstruktur, dan tidak teratur \u2014 dan dilengkapi dengan tool untuk membentuk, menggabungkan, menganalisis, dan memvisualisasikan datasets. Ada tiga jenis struktur data di library ini: Series: single-dimensional, array homogen DataFrame: two-dimensional dengan kolom yang diketik secara heterogen Panel: three-dimensional, array size-mutable Sebagai contoh, mari kita lihat bagaimana library Panda Python (disingkat pd) dapat digunakan untuk melakukan beberapa perhitungan statistik deskriptif. Mari mulai dengan mengimport library pandas ini. import pandas as pd Selanjutnya kita buat dictionary yang seri. d = {'Name':pd.Series(['Alfrick','Michael','Wendy','Paul','Dusan','George','Andreas', 'Irene','Sagar','Simon','James','Rose']), 'Years of Experience':pd.Series([5,9,1,4,3,4,7,9,6,8,3,1]), 'Programming Language':pd.Series(['Python','JavaScript','PHP','C++','Java','Scala','React','Ruby','Angular','PHP','Python','JavaScript']) } Selanjutnya buat Data Frame. df = pd.DataFrame(d) Output nya akan seperti dibawah ini : Name Programming Language Years of Experience 0 Alfrick Python 5 1 Michael JavaScript 9 2 Wendy PHP 1 3 Paul C++ 4 4 Dusan Java 3 5 George Scala 4 6 Andreas React 7 7 Irene Ruby 9 8 Sagar Angular 6 9 Simon PHP 8 10 James Python 3 11 Rose JavaScript 1 Berikut ini seluruh kode untuk contoh ini: import pandas as pd #creating a dictionary of series d = {'Name':pd.Series(['Alfrick','Michael','Wendy','Paul','Dusan','George','Andreas', 'Irene','Sagar','Simon','James','Rose']), 'Years of Experience':pd.Series([5,9,1,4,3,4,7,9,6,8,3,1]), 'Programming Language':pd.Series(['Python','JavaScript','PHP','C++','Java','Scala','React','Ruby','Angular','PHP','Python','JavaScript']) } #Create a DataFrame df = pd.DataFrame(d) print(df) 3. Matplotlib Matplotlib juga merupakan bagian dari paket inti SciPy dan ditawarkan di bawah lisensi BSD. Ini adalah library ilmiah Python populer yang digunakan untuk menghasilkan visualisasi yang sederhana dan kuat. Anda dapat menggunakan kerangka kerja Python untuk ilmu data untuk menghasilkan grafik, chart, histogram, dan bentuk dan gambar lain yang kreatif \u2014 tanpa perlu khawatir menulis banyak baris kode. Sebagai contoh, mari kita lihat bagaimana perpustakaan Matplotlib dapat digunakan untuk membuat bar chart sederhana. Mari memulainya dengan mengimport library from matplotlib import pyplot as plt Mari hasilkan nilai untuk sumbu x dan sumbu y. x = [2, 4, 6, 8, 10] y = [10, 11, 6, 7, 4] Mari kita sebut fungsi untuk mem-plot diagram batang. plt.bar(x,y) Selanjutnya kita tampilkan plot nya. plt.show() Berikut adalah tampilan chart bar: Berikut ini seluruh kode untuk contoh ini: #mengimport library Matplotlib Python from matplotlib import pyplot as plt #same as import matplotlib.pyplot as plt #menghasilkan nilai untuk x-axis x = [2, 4, 6, 8, 10] #menghasilkan nilai untuk y-axis y = [10, 11, 6, 7, 4] #memanggil function untuk plotting the bar chart plt.bar(x,y) #menampilkan the plot plt.show() Kesimpulan Bahasa pemrograman Python selalu melakukan pekerjaan yang baik dalam hal data dan persiapan, tetapi kurang untuk analisis dan pemodelan data ilmiah yang rumit. Untuk itulah munculnya library Python sangat membantu untuk mengisi celah ini. Dengan adanya library ini akan memungkinkan Anda untuk melakukan perhitungan matematis yang kompleks dan membuat model canggih yang membuat data Anda masuk akal. Selain dari 3 library diatas, adakah libary Python lainnya yang Anda tahu? Apa pengalamanmu dengan library tersebut? Silakan bagikan komentar Anda di bawah ini. Terimakasih. penulis: Purwanto https://github.com/purwnt *referensi: https://opensource.com","title":"3 Library Python Terbaik Untuk Data Science"},{"location":"2018/09/3-library-python-terbaik-untuk-data-science/#1-numpy","text":"NumPy (kependekan dari Numerical Python) adalah salah satu library teratas yang dilengkapi dengan sumber daya yang berguna untuk membantu para data scientist mengubah Python menjadi alat analisis dan pemodelan ilmiah yang kuat. Libary Open source terpopuler ini tersedia di bawah lisensi BSD. Ini adalah pustaka Python dasar untuk melakukan tugas dalam komputasi ilmiah. NumPy adalah bagian dari ekosistem berbasis Python yang lebih besar dari tool open source yang disebut SciPy. Perpustakaan memberdayakan Python dengan struktur data substansial untuk mudah melakukan perhitungan multi-dimensi (multi-dimensional arrays) dan perhitungan matrik. Selain penggunaannya dalam menyelesaikan persamaan aljabar linier (linear algebra equations) dan perhitungan matematis lainnya, NumPy juga digunakan sebagai wadah multi-dimensi serbaguna untuk berbagai jenis data generik. Lebih hebatnya, NumPy terintegrasi dengan bahasa pemrograman lain seperti C / C ++ dan Fortran. Fleksibilitas perpustakaan NumPy memungkinkannya untuk dengan mudah dan cepat bergabung dengan berbagai database dan tools. Sebagai contoh, mari kita lihat bagaimana NumPy (disingkat np) dapat digunakan untuk mengalikan dua matriks. Mari memulainya dengan meng-import library ini terlebih dahulu ( disini kita menggunakan Jupyter notebook untuk contoh) import numpy as np Selanjutnya, kita akan menggunakan fungsi eye() untuk menghasilkan matriks identitas dengan dimensi yang ditetapkan. matrix_one = np.eye(3) matrix_one Outputnya akan seperti dibawah ini : array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]) Mari hasilkan matriks 3x3 lainnya. Kita akan menggunakan fungsi arange([starting number], [stopping number]) untuk mengatur nomor. Perhatikan bahwa parameter pertama dalam fungsi adalah nomor awal yang akan didaftar dan nomor terakhir tidak termasuk dalam hasil yang dihasilkan. Juga, fungsi reshape() diterapkan untuk memodifikasi dimensi dari matriks yang dihasilkan secara original ke dimensi yang diinginkan. Agar matrik bisa \"multiply-able\", mereka harus memiliki dimensi yang sama. matrix_two = np.arange(1,10).reshape(3,3) matrix_two Outputnya akan seperti dibawah ini : array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) ``` Mari gunakan fungsi `dot()` untuk mengalikan dua matriks. ```python matrix_multiply = np.dot(matrix_one, matrix_two) matrix_multiply Outputnya akan seperti dibawah ini : array([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]) Kita telah berhasil melipatgandakan dua matriks tanpa menggunakan vanilla Python. Berikut ini seluruh kode untuk contoh ini: import numpy as np #menghasilkan a 3 by 3 identity matrix matrix_one = np.eye(3) matrix_one #menghasilkan 3 by 3 matrix lainya for perkalian matrix_two = np.arange(1,10).reshape(3,3) matrix_two #mengkalikan dua array matrix_multiply = np.dot(matrix_one, matrix_two) matrix_multiply","title":"1. NumPy"},{"location":"2018/09/3-library-python-terbaik-untuk-data-science/#2-pandas","text":"Pandas adalah library hebat lain yang dapat meningkatkan keterampilan Python Anda untuk data science. Sama seperti NumPy, Pandas milik keluarga perangkat lunak open source SciPy dan tersedia di bawah lisensi perangkat lunak bebas BSD. Pandas menawarkan alat serbaguna dan kuat untuk struktur data dan melakukan analisis data yang luas. Library ini berfungsi dengan baik dengan data dunia nyata yang tidak lengkap, tidak terstruktur, dan tidak teratur \u2014 dan dilengkapi dengan tool untuk membentuk, menggabungkan, menganalisis, dan memvisualisasikan datasets. Ada tiga jenis struktur data di library ini: Series: single-dimensional, array homogen DataFrame: two-dimensional dengan kolom yang diketik secara heterogen Panel: three-dimensional, array size-mutable Sebagai contoh, mari kita lihat bagaimana library Panda Python (disingkat pd) dapat digunakan untuk melakukan beberapa perhitungan statistik deskriptif. Mari mulai dengan mengimport library pandas ini. import pandas as pd Selanjutnya kita buat dictionary yang seri. d = {'Name':pd.Series(['Alfrick','Michael','Wendy','Paul','Dusan','George','Andreas', 'Irene','Sagar','Simon','James','Rose']), 'Years of Experience':pd.Series([5,9,1,4,3,4,7,9,6,8,3,1]), 'Programming Language':pd.Series(['Python','JavaScript','PHP','C++','Java','Scala','React','Ruby','Angular','PHP','Python','JavaScript']) } Selanjutnya buat Data Frame. df = pd.DataFrame(d) Output nya akan seperti dibawah ini : Name Programming Language Years of Experience 0 Alfrick Python 5 1 Michael JavaScript 9 2 Wendy PHP 1 3 Paul C++ 4 4 Dusan Java 3 5 George Scala 4 6 Andreas React 7 7 Irene Ruby 9 8 Sagar Angular 6 9 Simon PHP 8 10 James Python 3 11 Rose JavaScript 1 Berikut ini seluruh kode untuk contoh ini: import pandas as pd #creating a dictionary of series d = {'Name':pd.Series(['Alfrick','Michael','Wendy','Paul','Dusan','George','Andreas', 'Irene','Sagar','Simon','James','Rose']), 'Years of Experience':pd.Series([5,9,1,4,3,4,7,9,6,8,3,1]), 'Programming Language':pd.Series(['Python','JavaScript','PHP','C++','Java','Scala','React','Ruby','Angular','PHP','Python','JavaScript']) } #Create a DataFrame df = pd.DataFrame(d) print(df)","title":"2. Pandas"},{"location":"2018/09/3-library-python-terbaik-untuk-data-science/#3-matplotlib","text":"Matplotlib juga merupakan bagian dari paket inti SciPy dan ditawarkan di bawah lisensi BSD. Ini adalah library ilmiah Python populer yang digunakan untuk menghasilkan visualisasi yang sederhana dan kuat. Anda dapat menggunakan kerangka kerja Python untuk ilmu data untuk menghasilkan grafik, chart, histogram, dan bentuk dan gambar lain yang kreatif \u2014 tanpa perlu khawatir menulis banyak baris kode. Sebagai contoh, mari kita lihat bagaimana perpustakaan Matplotlib dapat digunakan untuk membuat bar chart sederhana. Mari memulainya dengan mengimport library from matplotlib import pyplot as plt Mari hasilkan nilai untuk sumbu x dan sumbu y. x = [2, 4, 6, 8, 10] y = [10, 11, 6, 7, 4] Mari kita sebut fungsi untuk mem-plot diagram batang. plt.bar(x,y) Selanjutnya kita tampilkan plot nya. plt.show() Berikut adalah tampilan chart bar: Berikut ini seluruh kode untuk contoh ini: #mengimport library Matplotlib Python from matplotlib import pyplot as plt #same as import matplotlib.pyplot as plt #menghasilkan nilai untuk x-axis x = [2, 4, 6, 8, 10] #menghasilkan nilai untuk y-axis y = [10, 11, 6, 7, 4] #memanggil function untuk plotting the bar chart plt.bar(x,y) #menampilkan the plot plt.show()","title":"3. Matplotlib"},{"location":"2018/09/3-library-python-terbaik-untuk-data-science/#kesimpulan","text":"Bahasa pemrograman Python selalu melakukan pekerjaan yang baik dalam hal data dan persiapan, tetapi kurang untuk analisis dan pemodelan data ilmiah yang rumit. Untuk itulah munculnya library Python sangat membantu untuk mengisi celah ini. Dengan adanya library ini akan memungkinkan Anda untuk melakukan perhitungan matematis yang kompleks dan membuat model canggih yang membuat data Anda masuk akal. Selain dari 3 library diatas, adakah libary Python lainnya yang Anda tahu? Apa pengalamanmu dengan library tersebut? Silakan bagikan komentar Anda di bawah ini. Terimakasih. penulis: Purwanto https://github.com/purwnt *referensi: https://opensource.com","title":"Kesimpulan"},{"location":"2018/09/5-tren-teratas-tentang-python-minggu-ini-di-github/","text":"Github adalah tempat berbagi proyek open source yang bisa digunakan secara bebas oleh semua orang. Terdapat proyek open source python disana. Berikut adalah project python teratas minggu ini (18 September 2018). TheAlgorithms / Python Semua algoritma yang diimplementasikan dengan Python (untuk edukasi) Ini hanya untuk tujuan demonstrasi. Ada banyak implementasi dalam pustaka standar Python yang jauh lebih baik untuk alasan kinerja. Artinya jika anda ingin menggunakanya untuk production diharapkan untuk tidak menggunakannya dari sini. GitHub - TheAlgorithms/Python: Kumpulan algoritma yang diimplementasikan dalam python mwouts / jupytext Notebook Jupyter sebagai dokumen Markdown, Julia, Python atau R skrip. Jupytext dapat mengonversi notebook ke dan dari Julia, Python dan R skrip (ekstensi .jl, .py dan .R), Dokumen markdown (ekstensi .md), Dokumen Markdown R (ekstensi .Rmd). Jupytext tersedia dari dalam Jupyter. Anda dapat bekerja seperti biasa di notebook Anda di Jupyter, dan simpan dan baca dalam format yang Anda pilih. GitHub - mwouts/jupytext: Jupyter notebooks sebagai dokumen Markdown, Julia, Python or R scripts donnemartin/system-design-primer Pelajari cara merancang sistem berskala besar. Persiapan untuk wawancara desain sistem. Termasuk Anki flashcards. Ringkasan berbagai topik desain sistem, termasuk pro dan kontra. Semuanya adalah trade-off. Setiap bagian berisi link ke resources yang lebih mendalam. GitHub - donnemartin/system-design-primer: Pelajari cara desain sistem skala besar TensorFlow Models Repositori ini berisi sejumlah model berbeda yang diterapkan di TensorFlow Model resmi adalah kumpulan contoh model yang menggunakan API tingkat tinggi TensorFlow. Mereka dimaksudkan untuk dipelihara dengan baik, diuji, dan terus diperbarui dengan API TensorFlow stabil terbaru. Mereka juga harus dioptimalkan untuk kinerja cepat sementara masih mudah dibaca. Kami terutama merekomendasikan pengguna TensorFlow yang lebih baru untuk memulai di sini. Model penelitian adalah kumpulan besar model yang diimplementasikan dalam TensorFlow oleh para peneliti. Mereka tidak secara resmi didukung atau tersedia di cabang rilis; terserah kepada masing-masing peneliti untuk mempertahankan model dan / atau memberikan dukungan pada masalah dan menarik permintaan. Folder sampel berisi cuplikan kode dan model yang lebih kecil yang menunjukkan fitur TensorFlow, termasuk kode yang disajikan di berbagai posting blog. Folder tutorial adalah kumpulan model yang dijelaskan dalam tutorial TensorFlow . tensorflow/tensorboard TensorBoard adalah rangkaian aplikasi web untuk memeriksa dan memahami alur dan grafik TensorFlow Anda. README ini memberikan ikhtisar tentang konsep-konsep kunci dalam TensorBoard, serta bagaimana menafsirkan visualisasi yang diberikan oleh TensorBoard. Untuk contoh mendalam menggunakan TensorBoard, lihat tutorial: TensorBoard: Visualizing Learning. Untuk informasi mendalam tentang Grafik Visualizer, lihat tutorial ini: TensorBoard: Grafik Visualisasi. Github - Tensorflow penulis gdkllr - referensi https://dev.to/kazup/top-10-of-python-weekly-trend-on-github-413n","title":"5 Tren Teratas Tentang Python Minggu ini di Github"},{"location":"2018/09/5-tren-teratas-tentang-python-minggu-ini-di-github/#thealgorithms-python","text":"Semua algoritma yang diimplementasikan dengan Python (untuk edukasi) Ini hanya untuk tujuan demonstrasi. Ada banyak implementasi dalam pustaka standar Python yang jauh lebih baik untuk alasan kinerja. Artinya jika anda ingin menggunakanya untuk production diharapkan untuk tidak menggunakannya dari sini. GitHub - TheAlgorithms/Python: Kumpulan algoritma yang diimplementasikan dalam python","title":"TheAlgorithms / Python"},{"location":"2018/09/5-tren-teratas-tentang-python-minggu-ini-di-github/#mwouts-jupytext","text":"Notebook Jupyter sebagai dokumen Markdown, Julia, Python atau R skrip. Jupytext dapat mengonversi notebook ke dan dari Julia, Python dan R skrip (ekstensi .jl, .py dan .R), Dokumen markdown (ekstensi .md), Dokumen Markdown R (ekstensi .Rmd). Jupytext tersedia dari dalam Jupyter. Anda dapat bekerja seperti biasa di notebook Anda di Jupyter, dan simpan dan baca dalam format yang Anda pilih. GitHub - mwouts/jupytext: Jupyter notebooks sebagai dokumen Markdown, Julia, Python or R scripts","title":"mwouts / jupytext"},{"location":"2018/09/5-tren-teratas-tentang-python-minggu-ini-di-github/#donnemartinsystem-design-primer","text":"Pelajari cara merancang sistem berskala besar. Persiapan untuk wawancara desain sistem. Termasuk Anki flashcards. Ringkasan berbagai topik desain sistem, termasuk pro dan kontra. Semuanya adalah trade-off. Setiap bagian berisi link ke resources yang lebih mendalam. GitHub - donnemartin/system-design-primer: Pelajari cara desain sistem skala besar","title":"donnemartin/system-design-primer"},{"location":"2018/09/5-tren-teratas-tentang-python-minggu-ini-di-github/#tensorflow-models","text":"Repositori ini berisi sejumlah model berbeda yang diterapkan di TensorFlow Model resmi adalah kumpulan contoh model yang menggunakan API tingkat tinggi TensorFlow. Mereka dimaksudkan untuk dipelihara dengan baik, diuji, dan terus diperbarui dengan API TensorFlow stabil terbaru. Mereka juga harus dioptimalkan untuk kinerja cepat sementara masih mudah dibaca. Kami terutama merekomendasikan pengguna TensorFlow yang lebih baru untuk memulai di sini. Model penelitian adalah kumpulan besar model yang diimplementasikan dalam TensorFlow oleh para peneliti. Mereka tidak secara resmi didukung atau tersedia di cabang rilis; terserah kepada masing-masing peneliti untuk mempertahankan model dan / atau memberikan dukungan pada masalah dan menarik permintaan. Folder sampel berisi cuplikan kode dan model yang lebih kecil yang menunjukkan fitur TensorFlow, termasuk kode yang disajikan di berbagai posting blog. Folder tutorial adalah kumpulan model yang dijelaskan dalam tutorial TensorFlow .","title":"TensorFlow Models"},{"location":"2018/09/5-tren-teratas-tentang-python-minggu-ini-di-github/#tensorflowtensorboard","text":"TensorBoard adalah rangkaian aplikasi web untuk memeriksa dan memahami alur dan grafik TensorFlow Anda. README ini memberikan ikhtisar tentang konsep-konsep kunci dalam TensorBoard, serta bagaimana menafsirkan visualisasi yang diberikan oleh TensorBoard. Untuk contoh mendalam menggunakan TensorBoard, lihat tutorial: TensorBoard: Visualizing Learning. Untuk informasi mendalam tentang Grafik Visualizer, lihat tutorial ini: TensorBoard: Grafik Visualisasi. Github - Tensorflow penulis gdkllr - referensi https://dev.to/kazup/top-10-of-python-weekly-trend-on-github-413n","title":"tensorflow/tensorboard"},{"location":"2018/09/python-melesat-di-daftar-bahasa-pemrograman-yang-paling-populer/","text":"Menurut Indeks Tiobe untuk September 2018, Java, C, dan Python adalah bahasa pemrograman paling populer di dunia. Bahasa populer lainnya termasuk Visual Basic .NET dan C ++, yang baru saja kehilangan tempat ketiga di peringkat ke Python. Tiobe mencatat bahwa ini adalah pertama kalinya dalam sejarah bahwa Python telah memasuki tiga bahasa pemrograman teratas dalam peringkat Tiobe. Tiobe menyatakan bahwa peningkatan signifikan Python dalam popularitas dapat dikaitkan dengan aksesibilitas dan kemudahan penggunaannya. Peringkat PYPL menunjukkan Python di bagian atas daftar, diikuti oleh Java dan JavaScript. Ranking Bahasa Pemrograman Populer Bulan September 22 bahasa pemrograman teratas untuk September 2018, menurut peringkat Tiobe Index dan PYPL, selengkapnya lihat gambar dibawah ini. Penulis gdkllr","title":"Python Melesat di Daftar Bahasa Pemrograman Yang Paling Populer"},{"location":"2018/09/python-melesat-di-daftar-bahasa-pemrograman-yang-paling-populer/#ranking-bahasa-pemrograman-populer-bulan-september","text":"22 bahasa pemrograman teratas untuk September 2018, menurut peringkat Tiobe Index dan PYPL, selengkapnya lihat gambar dibawah ini. Penulis gdkllr","title":"Ranking Bahasa Pemrograman Populer Bulan September"},{"location":"2019/10/membaca-menulis-file-python/","text":"Saat Anda ingin menyimpan data, Anda bisa menggunakan variabel . Tapi \"masa hidup\" variabel hanyalah selama program tersebut berjalan \u2014 data variabel dihapus saat program berhenti. Bagaimana jika Anda ingin menyimpan sesuatu selama jangka yang lebih panjang, sehingga bahkan setelah Anda mematikan komputer Anda, datanya tidak terhapus? Sehingga Anda bisa mengakses lagi datanya lain hari? Anda bisa menggunakan files (atau, sebagaimana sebagian orang menerjemahkannya, berkas). Berbeda dengan variabel yang datanya disimpan di memori utama ( main memory ), files (atau berkas) berurusan dengan memori sekunder ( secondary memory ). Data tidak hanya bakal tetap disimpan setelah komputer dimatikan dan bisa diakses lagi setelah komputer kembali dinyalakan, tetapi juga bisa disalin ke USB dan dipindahkan ke komputer lain. Text files File ada berbagai jenis, contohnya file biner ( binary file ), tapi tutorial ini bakal membicarakan file berisi teks ( text files ). Jika sebuah string terdiri dari rentetan karakter, maka sebuah text file terdiri dari rentetan baris ( line ). Baris-baris tersebut dipisahkan oleh sebuah special character , \\n , yang disebut newline . Jika Anda menge- print sebuah variabel string yang mengandung karakter newline \\n , Python bakal menginterpretasikan karakter tersebut sebagai sebuah perintah untuk menge- print sisa string setelahnya di baris baru. Sebagai contoh, print('Selamat\\npagi') bakal menghasilkan output: Selamat pagi Sedangkan print('selam\\nat pagi') bakal menghasilkan: selam at pagi Membuka file Untuk membuka sebuah file, perintah bisa diberikan agar Python berkomunikasi dengan sistem operasi komputer dan meminta filenya. Dalam contoh berikut, file helloworld.txt berada di folder yang sama dengan program Python tersebut. fread = open('helloworld.txt') Sistem operasi bakal kemudian mencari file yang dimaksud menurut alamat file yang telah diberikan, yaitu helloworld.txt . Jika file-nya ada dan Anda memiliki izin ( permission ) untuk membuka file tersebut, maka sistem komputer bakal mengembalikan apa yang namanya adalah sebuah file handle , yang dalam contoh di atas disimpan di dalam variabel fread . Jika file yang diminta tidak ada, akan terjadi error . Traceback (most recent call last): File \"\", line 1, in IOError: [Errno 2] No such file or directory: 'tidakada.txt' Karena open() tidak membaca langsung seluruh file, open() selalu memerlukan waktu yang sama tidak peduli besar file yang dibuka. Menggunakan input() , Anda bisa memberikan pengguna program kemampuan untuk memasukkan nama file sendiri. fname = input('File yang ingin dibuka: ') fread = open(fname) Tapi bagaimana jika pengguna meminta file yang tidak ada? Traceback (most recent call last): File \"q.py\", line 2, in fread = open(fname) FileNotFoundError: [Errno 2] No such file or directory: 'aa' Anda bisa menggunakan exception agar program tidak langsung error dan berhenti saat pengguna memasukkan input tidak valid. fname = input('File yang ingin dibuka: ') try: fread = open(fname) except: print('File yang diminta tidak ada.') Membaca file yang sudah ada File handle tidak berisi data file. Jika Anda menjalankan print(fread) , Anda bakal mendapatkan atau variasinya sebagai output. Tapi Anda bisa menggunakannya untuk membaca file baris demi baris dengan bantuan loop for . Sebagai contoh, program di bawah ini menghitung jumlah baris (termasuk baris kosong) yang ada di dalam file chairil-anwar-aku.txt . fread = open('chairil-anwar-aku.txt') count = 0 for line in fread: count += 1 print(count) Outputnya adalah 19 . Anda bisa mengecek isi tiap baris dengan memperlakukan line sebagai sebuah variabel berisi string yang memiliki sebuah karakter \\n di ujung belakangnya. Program di atas bisa dimodifikasi sehingga yang dihitung hanyalah baris yang tidak kosong ( .strip() menghapus semua karakter spasi dan \\n di kiri-kanan string): fread = open('chairil-anwar-aku.txt') count = 0 for line in fread: if len(line.strip()) > 0 : count += 1 print(count) Outputnya adalah 13 . Membuat dan menulis file baru Untuk membuat sebuah file, gunakan open() , tapi kali ini dengan dengan 'w' sebagai parameter kedua. fwrite = open('filebaru.txt', 'w') Jika file tersebut belum ada, maka bakal dibuat sebuah file baru. Jika sudah ada, maka file yang lama bakal dihapus. Metode .write() menambahkan data ke ujung akhir file. fwrite.write('Baris baru!\\n') Sebagai contoh, program berikut bakal menghasilkan file output-angka-segitiga.txt . fwrite = open('output-angka-segitiga.txt', 'w') n = 1 for i in range(2, 50): n += i fwrite.write(str(n) + '\\n') fwrite.close() Pastikan untuk menambahkan .close() ke akhir setelah selesai menulis ke file. File sebagai input/output File sangat membantu jika Anda mesti berurusan dengan data input atau output dalam jumlah yang banyak dan repot jika mesti di- input() atau di- print() satu-persatu. Sebagai contoh terakhir, program berikut menghasilkan output_daftar-provinsi.txt jika diberikan input daftar-provinsi.txt . while True: fname = input('Nama file input: ') try: fread = open(fname) break except: print('Tidak dapat menemukan file yang dimaksud, tolong cek lagi.\\nNama file input: ') nama = [] for line in fread: nama.append(line.strip()) nama = sorted(nama) fwrite = open('output_' + fname, 'w') for item in nama: fwrite.write(item + '\\n') fwrite.close() penulis: Emmanuella Rumanti https://github.com/amuritna","title":"Membaca dan Menulis File dengan Python"},{"location":"2019/10/membaca-menulis-file-python/#text-files","text":"File ada berbagai jenis, contohnya file biner ( binary file ), tapi tutorial ini bakal membicarakan file berisi teks ( text files ). Jika sebuah string terdiri dari rentetan karakter, maka sebuah text file terdiri dari rentetan baris ( line ). Baris-baris tersebut dipisahkan oleh sebuah special character , \\n , yang disebut newline . Jika Anda menge- print sebuah variabel string yang mengandung karakter newline \\n , Python bakal menginterpretasikan karakter tersebut sebagai sebuah perintah untuk menge- print sisa string setelahnya di baris baru. Sebagai contoh, print('Selamat\\npagi') bakal menghasilkan output: Selamat pagi Sedangkan print('selam\\nat pagi') bakal menghasilkan: selam at pagi","title":"Text files"},{"location":"2019/10/membaca-menulis-file-python/#membuka-file","text":"Untuk membuka sebuah file, perintah bisa diberikan agar Python berkomunikasi dengan sistem operasi komputer dan meminta filenya. Dalam contoh berikut, file helloworld.txt berada di folder yang sama dengan program Python tersebut. fread = open('helloworld.txt') Sistem operasi bakal kemudian mencari file yang dimaksud menurut alamat file yang telah diberikan, yaitu helloworld.txt . Jika file-nya ada dan Anda memiliki izin ( permission ) untuk membuka file tersebut, maka sistem komputer bakal mengembalikan apa yang namanya adalah sebuah file handle , yang dalam contoh di atas disimpan di dalam variabel fread . Jika file yang diminta tidak ada, akan terjadi error . Traceback (most recent call last): File \"\", line 1, in IOError: [Errno 2] No such file or directory: 'tidakada.txt' Karena open() tidak membaca langsung seluruh file, open() selalu memerlukan waktu yang sama tidak peduli besar file yang dibuka. Menggunakan input() , Anda bisa memberikan pengguna program kemampuan untuk memasukkan nama file sendiri. fname = input('File yang ingin dibuka: ') fread = open(fname) Tapi bagaimana jika pengguna meminta file yang tidak ada? Traceback (most recent call last): File \"q.py\", line 2, in fread = open(fname) FileNotFoundError: [Errno 2] No such file or directory: 'aa' Anda bisa menggunakan exception agar program tidak langsung error dan berhenti saat pengguna memasukkan input tidak valid. fname = input('File yang ingin dibuka: ') try: fread = open(fname) except: print('File yang diminta tidak ada.')","title":"Membuka file"},{"location":"2019/10/membaca-menulis-file-python/#membaca-file-yang-sudah-ada","text":"File handle tidak berisi data file. Jika Anda menjalankan print(fread) , Anda bakal mendapatkan atau variasinya sebagai output. Tapi Anda bisa menggunakannya untuk membaca file baris demi baris dengan bantuan loop for . Sebagai contoh, program di bawah ini menghitung jumlah baris (termasuk baris kosong) yang ada di dalam file chairil-anwar-aku.txt . fread = open('chairil-anwar-aku.txt') count = 0 for line in fread: count += 1 print(count) Outputnya adalah 19 . Anda bisa mengecek isi tiap baris dengan memperlakukan line sebagai sebuah variabel berisi string yang memiliki sebuah karakter \\n di ujung belakangnya. Program di atas bisa dimodifikasi sehingga yang dihitung hanyalah baris yang tidak kosong ( .strip() menghapus semua karakter spasi dan \\n di kiri-kanan string): fread = open('chairil-anwar-aku.txt') count = 0 for line in fread: if len(line.strip()) > 0 : count += 1 print(count) Outputnya adalah 13 .","title":"Membaca file yang sudah ada"},{"location":"2019/10/membaca-menulis-file-python/#membuat-dan-menulis-file-baru","text":"Untuk membuat sebuah file, gunakan open() , tapi kali ini dengan dengan 'w' sebagai parameter kedua. fwrite = open('filebaru.txt', 'w') Jika file tersebut belum ada, maka bakal dibuat sebuah file baru. Jika sudah ada, maka file yang lama bakal dihapus. Metode .write() menambahkan data ke ujung akhir file. fwrite.write('Baris baru!\\n') Sebagai contoh, program berikut bakal menghasilkan file output-angka-segitiga.txt . fwrite = open('output-angka-segitiga.txt', 'w') n = 1 for i in range(2, 50): n += i fwrite.write(str(n) + '\\n') fwrite.close() Pastikan untuk menambahkan .close() ke akhir setelah selesai menulis ke file.","title":"Membuat dan menulis file baru"},{"location":"2019/10/membaca-menulis-file-python/#file-sebagai-inputoutput","text":"File sangat membantu jika Anda mesti berurusan dengan data input atau output dalam jumlah yang banyak dan repot jika mesti di- input() atau di- print() satu-persatu. Sebagai contoh terakhir, program berikut menghasilkan output_daftar-provinsi.txt jika diberikan input daftar-provinsi.txt . while True: fname = input('Nama file input: ') try: fread = open(fname) break except: print('Tidak dapat menemukan file yang dimaksud, tolong cek lagi.\\nNama file input: ') nama = [] for line in fread: nama.append(line.strip()) nama = sorted(nama) fwrite = open('output_' + fname, 'w') for item in nama: fwrite.write(item + '\\n') fwrite.close() penulis: Emmanuella Rumanti https://github.com/amuritna","title":"File sebagai input/output"},{"location":"2020/10/source-untuk-belajar-python/","text":"Python menjadi salah satu bahasa pemrograman yang paling diminati saat ini. seperti dilansir dari situs The Redmonk python menduduki peringkat kedua setelah javascript. Karena banyaknya pengguna bahasa python, mungkin ini yang membuat developer python lebih semangat untuk meningkatkan performa bahasa python. Supaya tidak ketinggalan tren python mau tidak mau ya kita harus terus belajar, maka dari itu di artikel ini saya ingin mencoba berbagi beberapa referensi sumber yang saya gunakan untuk belajar bahasa python. Ps: kalian bisa menambahkan sumber lain yang kalian punya ke artikel ini. 1. realpython.com realpython.com adalah situs belajar pemrograman python berbahasa Inggris. Di situs ini kamu bisa mengikuti tutorial untuk project-project kecil, kamu bisa baca artikel tentang bahasa pemrograman, kamu juga bisa subscribe email realpython jika kamu ingin dikirimi email berita terbaru tentang bahasa pemrograman python. Ada juga video kursus nya sehingga kamu bisa belajar python step-by-step. Lalu ada Kuis dimana kamu bisa mengecek progress skill python kamu. Dan yang paling bagus menurutku adalah fitur learning path di situs ini, jadi kamu bisa fokus belajar ke bidang keahlian yang ingin kamu tekuni misalkan kamu ingin menjadi python web developer atau data scientist. 2. belajarpython.com kalau tadi sudah yang berbahasa Inggris, kayaknya kita juga harus memiliki sumber referensi belajar yang menggunakan bahasa sehari-hari kita sendiri. Salah satunya adalah situs dimana artikel ini dibuat yaitu belajarpython.com. Di situs ini kamu bisa belajar dengan mengikuti tutorial yang sudah dibuat hasil dari kontribusi para kontributor (situs ini open source) dan membaca artikel tentang python, yang pasti itu semua ditulis dengan bahasa Indonesia jadi jangan takut untuk belajar pemrogaman karena merasa tidak bisa bahasa Inggris. mungkin baru sedikit sumber yang bisa saya berikan karena situs ini yang sudah saya coba langsung. Jika teman-teman memiliki sumber lain silahkan masukkan ke artikel ini. Mari kita saling berbagi!.","title":"Source untuk belajar python"},{"location":"2020/10/source-untuk-belajar-python/#1-realpythoncom","text":"realpython.com adalah situs belajar pemrograman python berbahasa Inggris. Di situs ini kamu bisa mengikuti tutorial untuk project-project kecil, kamu bisa baca artikel tentang bahasa pemrograman, kamu juga bisa subscribe email realpython jika kamu ingin dikirimi email berita terbaru tentang bahasa pemrograman python. Ada juga video kursus nya sehingga kamu bisa belajar python step-by-step. Lalu ada Kuis dimana kamu bisa mengecek progress skill python kamu. Dan yang paling bagus menurutku adalah fitur learning path di situs ini, jadi kamu bisa fokus belajar ke bidang keahlian yang ingin kamu tekuni misalkan kamu ingin menjadi python web developer atau data scientist.","title":"1. realpython.com"},{"location":"2020/10/source-untuk-belajar-python/#2-belajarpythoncom","text":"kalau tadi sudah yang berbahasa Inggris, kayaknya kita juga harus memiliki sumber referensi belajar yang menggunakan bahasa sehari-hari kita sendiri. Salah satunya adalah situs dimana artikel ini dibuat yaitu belajarpython.com. Di situs ini kamu bisa belajar dengan mengikuti tutorial yang sudah dibuat hasil dari kontribusi para kontributor (situs ini open source) dan membaca artikel tentang python, yang pasti itu semua ditulis dengan bahasa Indonesia jadi jangan takut untuk belajar pemrogaman karena merasa tidak bisa bahasa Inggris. mungkin baru sedikit sumber yang bisa saya berikan karena situs ini yang sudah saya coba langsung. Jika teman-teman memiliki sumber lain silahkan masukkan ke artikel ini. Mari kita saling berbagi!.","title":"2. belajarpython.com"},{"location":"2021/10/cara-mempersing-api/","text":"Assalamualaikum wr.wb Terimakasih untuk belajarpython.com untuk bisa berbagi ilmu untuk seluruh insan yang mau belajar bahasa python ini, Ke hadiran saya ini ingin mengeshare cara memparsing data api... step Melakukan install 'requests' terlebih dahulu di terminal anda. $ pip install requests Setelah sudah melakukan insta requests, mari kita mainkan apinya hehe, semisal kita ingin memparsing data api dnslookup. import requests Url = 'https://api.hackertarget.com/dnslookup/?q={www.site.com}' req = requests.get(Url).text for x in req: print (x) Gimana mudah kan?, sekian dan terimakasih semoga admin di limpahkan rezekinya. Jika ada kesalahan kata mohon maaf wassalamualaikum wr.wb - penulis agung","title":"Memparsing api dengan method GET"},{"location":"2021/10/cara-mempersing-api/#step","text":"Melakukan install 'requests' terlebih dahulu di terminal anda. $ pip install requests Setelah sudah melakukan insta requests, mari kita mainkan apinya hehe, semisal kita ingin memparsing data api dnslookup. import requests Url = 'https://api.hackertarget.com/dnslookup/?q={www.site.com}' req = requests.get(Url).text for x in req: print (x) Gimana mudah kan?, sekian dan terimakasih semoga admin di limpahkan rezekinya. Jika ada kesalahan kata mohon maaf wassalamualaikum wr.wb - penulis agung","title":"step"},{"location":"2022/12/tutorial-membuat-bot-telegram-dengan-python/","text":"Telegram adalah aplikasi yang sangat populer. Salah satu keunggulan telegram dibanding aplikasi messenger lain adalah fitur bot. Disini akan dijelaskan cara membuat bot di telegram. Tapi sebelum kita mulai membuat bot, pastikan Anda sudah mengetahui beberapa requirement dibawah ini : - Pengetahuan dasar pemrograman Python - Akun telegram Pada tutorial ini kita akan membuat bot dari sangat awal, mengetahui lebih jauh tentang setup untuk memaksimalkan semua kekuatan dari Bot API dan membuat 'real-world application' Code/Project Semua snipet kode dan project terkait tutorial ini bisa anda temukan di repository ini project Apa itu Bot Telegram? Akun telegram simpel yang dioperasikan oleh aplikasi Tidak terlalu di desain untuk chatting Bisa digunakan untuk mempermudah: Belajar Bermain Mencari Menyebarkan Mengingatkan Mengkoneksikan Pengguna bisa berinteraksi ke bot dengan: Pesan Emoji Perintah/Command Inline requests Setup Bot Telegram Buka telegram, kemudian cari 'BotFather' Kirim perintah /start untuk mulai menghubungkan akun Anda Kirim perintah /help untuk menampilkan daftar bantuan yang tersedia Kirim perintah /newbot dan ikuti langkah selanjutnya Kirim perintah /mybots untuk menampilkan semua bot anda dan memilihnya Klik pada API Token","title":"Tutorial membuat bot telegram dengan python"},{"location":"2022/12/tutorial-membuat-bot-telegram-dengan-python/#codeproject","text":"Semua snipet kode dan project terkait tutorial ini bisa anda temukan di repository ini project","title":"Code/Project"},{"location":"2022/12/tutorial-membuat-bot-telegram-dengan-python/#apa-itu-bot-telegram","text":"Akun telegram simpel yang dioperasikan oleh aplikasi Tidak terlalu di desain untuk chatting Bisa digunakan untuk mempermudah: Belajar Bermain Mencari Menyebarkan Mengingatkan Mengkoneksikan Pengguna bisa berinteraksi ke bot dengan: Pesan Emoji Perintah/Command Inline requests","title":"Apa itu Bot Telegram?"},{"location":"2022/12/tutorial-membuat-bot-telegram-dengan-python/#setup-bot-telegram","text":"Buka telegram, kemudian cari 'BotFather' Kirim perintah /start untuk mulai menghubungkan akun Anda Kirim perintah /help untuk menampilkan daftar bantuan yang tersedia Kirim perintah /newbot dan ikuti langkah selanjutnya Kirim perintah /mybots untuk menampilkan semua bot anda dan memilihnya Klik pada API Token","title":"Setup Bot Telegram"},{"location":"2023/01/Apa-Beda-Database-SQL-dengan-Postgree/","text":"Bagi seorang web developer mungkin sudah tidak asing dengan perbedaan database SQL dengan Postgree, akan tetapi untuk orang awam keduanya merupakan sama-sama alat manajemen basis data yang akan sangat membantu dalam mengelola data-data secara benar dan efisien. Sebenarnya ada banyak pilihan sistem database yang bisa digunakan di layanan web hosting murah seperti DomaiNesia , akan tetapi database SQL dan postgree merupakan yang paling populer dan banyak digunakan oleh para web developer untuk membantu pekerjaan mereka supaya menjadi lebih mudah dan praktis. Pada kesempatan kali ini kami akan bahas tentang perbedaan database SQL dengan Postgree. Namun, sebelum itu kita akan bahas dulu apa itu database SQL dan postgree dan apa saja kelebihan dari masing-masing database tersebut. Apa itu MySQL? MySQL atau SQL merupakan sebuah relasional database manajemen sistem yang banyak digunakan oleh perusahaan-perusahaan besar seperti Spotify, YouTube dan bahkan Facebook. Sistem database ini mulai dikembangkan pada tahun 1994 dan mengalami perkembangan yang cukup pesat sehingga menjadi database yang tingkat skalabilitasnya sangat tinggi. SQL adalah database yang bisa digunakan untuk berbagai jenis sistem operasi seperti Linux, Windows atau Mac OS. Berikut adalah kelebihan dari database SQL: 1.Bersifat Open Source Kelebihan pertama dari SQL yaitu memiliki sifat open source sehingga penggunanya cukup terbuka untuk siapapun, begitu pula dengan pengembangannya. Meskipun sebenarnya sistem database ini berada di bawah kepemilikan Oracle akan tetapi sifatnya bebas digunakan. Jadi kamu tidak perlu membayar biaya apapun untuk memanfaatkan SQL. 2.Mudah Digunakan Kelebihan yang kedua yaitu mudah digunakan karena arsitektur database SQL cukup sederhana dan compact. Kamu bahkan bisa mempelajari SDL hanya dengan memahami command lines dasarnya. 3.Sifatnya Portable SQL dapat digunakan untuk berbagai jenis sistem operasi baik itu Windows, Linux sampai dengan Mac OS sehingga bagi kamu yang ingin mengembangkan aplikasi web dengan target berbagai macam platform maka SQL sangat direkomendasikan. Apa itu Postgree? Sebelum mengetahui perbedaan database SQL dengan postgree tidak ada salahnya juga kamu mempelajari terlebih dahulu apa itu postgree dan apa saja kelebihan yang dimilikinya sehingga banyak orang yang menggunakannya. Postgree sendiri merupakan sebuah manajemen database relasional yang berbasis open source dan memanfaatkan SQL sebagai bahasa query yang utama. Postgree memiliki pengguna lebih dari 5000 perusahaan termasuk Netflix, Redit dan Instagram. Berikut ini adalah kelebihan postgree: 1.Murah Kelebihan postgree yang pertama yaitu tidak terkait dengan lisensi apapun sehingga sistem database ini memiliki sifat open source. Hal itu berarti kamu bisa mengakses kode-kode postgree dengan mudah untuk kepentingan bisnismu. Karena bersifat open source membuat postgree cukup terjangkau dari segi harga karena tidak ada lisensi yang perlu dibayarkan. 2.Dukungan Komunitas Postgree didukung oleh komunitas yang cukup besar dan mendukung sehingga kamu tidak perlu khawatir apabila menemui kesulitan saat menggunakannya. Komunitas memiliki kontribusi cukup besar terhadap perkembangan postgree sehingga sejak tahun 90an postgree terus digunakan dari waktu ke waktu. 3.Ekstensibilitas Postgree memiliki fungsi atau kapabilitas tambahan sehingga arsitekturnya bisa diperluas. Saat kamu menginginkan fungsi tambahan, maka sistem postgree mampu mewujudkan hal itu sebagai langkah untuk menyesuaikan prosedur di database. Perbedaan Database SQL dengan Postgree Setelah membahas pengertian dari masing-masing database beserta dengan kelebihan-kelebihan yang dimilikinya, saatnya kita bahas mengenai perbedaan SQL dan postgree. 1.Fitur MVCC Perbedaan database SQL dengan Postgree bisa dilihat dari segi konkurensi. Postgree jauh lebih unggul di bidang konkurensi jika dibandingkan dengan SQL. Hal ini disebabkan karena postgree didukung oleh fitur MVCC atau multiversion concurrency control sehingga memungkinkan banyak orang sekaligus untuk melakukan interaksi dan juga mengakses database dalam waktu bersamaan. Hal itu membuat kinerja postgree menjadi jauh lebih efisien. Kapasitas Perbedaan database SQL dengan Postgree bisa dilihat dari segi kapasitas. Untuk segi kapasitas postgree jauh lebih unggul daripada SQL. Hal ini disebabkan karena postgree memang dirancang secara khusus untuk pengelolaan database berukuran besar. Postgree dapat mengelola data dengan jumlah sekitar 4 petabytes yang setara dengan 4000 TB. 2.Performa Untuk segi performa SQL jauh lebih unggul karena dipengaruhi oleh tingkat kecepatan yang jauh lebih baik dibanding dengan postgree. Tentu sebagai pengguna kamu akan jauh lebih menyukai database yang memiliki performa bagus, terutama untuk segi kecepatan. Dengan menggunakan SQL maka pengelolaan proses input dan akses data jauh terasa lebih cepat. Baik SQL maupun postgree, keduanya merupakan alat manajemen berbasis data yang akan sangat membantu pekerjaan kamu. Akan tetapi jika melihat perbedaan database SQL dengan Postgree pasti jauh lebih unggul postgree. Postgree merupakan versi terbaru dari SQL sehingga memiliki banyak fitur tambahan dan bisa diakses secara gratis. Postgree juga bisa dimanfaatkan menggunakan sistem operasi apapun. ADVERTORIAL","title":"Apa Beda Database SQL dengan Postgree?"},{"location":"2023/01/Apa-Beda-Database-SQL-dengan-Postgree/#apa-itu-mysql","text":"MySQL atau SQL merupakan sebuah relasional database manajemen sistem yang banyak digunakan oleh perusahaan-perusahaan besar seperti Spotify, YouTube dan bahkan Facebook. Sistem database ini mulai dikembangkan pada tahun 1994 dan mengalami perkembangan yang cukup pesat sehingga menjadi database yang tingkat skalabilitasnya sangat tinggi. SQL adalah database yang bisa digunakan untuk berbagai jenis sistem operasi seperti Linux, Windows atau Mac OS. Berikut adalah kelebihan dari database SQL:","title":"Apa itu MySQL?"},{"location":"2023/01/Apa-Beda-Database-SQL-dengan-Postgree/#1bersifat-open-source","text":"Kelebihan pertama dari SQL yaitu memiliki sifat open source sehingga penggunanya cukup terbuka untuk siapapun, begitu pula dengan pengembangannya. Meskipun sebenarnya sistem database ini berada di bawah kepemilikan Oracle akan tetapi sifatnya bebas digunakan. Jadi kamu tidak perlu membayar biaya apapun untuk memanfaatkan SQL.","title":"1.Bersifat Open Source"},{"location":"2023/01/Apa-Beda-Database-SQL-dengan-Postgree/#2mudah-digunakan","text":"Kelebihan yang kedua yaitu mudah digunakan karena arsitektur database SQL cukup sederhana dan compact. Kamu bahkan bisa mempelajari SDL hanya dengan memahami command lines dasarnya.","title":"2.Mudah Digunakan"},{"location":"2023/01/Apa-Beda-Database-SQL-dengan-Postgree/#3sifatnya-portable","text":"SQL dapat digunakan untuk berbagai jenis sistem operasi baik itu Windows, Linux sampai dengan Mac OS sehingga bagi kamu yang ingin mengembangkan aplikasi web dengan target berbagai macam platform maka SQL sangat direkomendasikan.","title":"3.Sifatnya Portable"},{"location":"2023/01/Apa-Beda-Database-SQL-dengan-Postgree/#apa-itu-postgree","text":"Sebelum mengetahui perbedaan database SQL dengan postgree tidak ada salahnya juga kamu mempelajari terlebih dahulu apa itu postgree dan apa saja kelebihan yang dimilikinya sehingga banyak orang yang menggunakannya. Postgree sendiri merupakan sebuah manajemen database relasional yang berbasis open source dan memanfaatkan SQL sebagai bahasa query yang utama. Postgree memiliki pengguna lebih dari 5000 perusahaan termasuk Netflix, Redit dan Instagram. Berikut ini adalah kelebihan postgree:","title":"Apa itu Postgree?"},{"location":"2023/01/Apa-Beda-Database-SQL-dengan-Postgree/#1murah","text":"Kelebihan postgree yang pertama yaitu tidak terkait dengan lisensi apapun sehingga sistem database ini memiliki sifat open source. Hal itu berarti kamu bisa mengakses kode-kode postgree dengan mudah untuk kepentingan bisnismu. Karena bersifat open source membuat postgree cukup terjangkau dari segi harga karena tidak ada lisensi yang perlu dibayarkan.","title":"1.Murah"},{"location":"2023/01/Apa-Beda-Database-SQL-dengan-Postgree/#2dukungan-komunitas","text":"Postgree didukung oleh komunitas yang cukup besar dan mendukung sehingga kamu tidak perlu khawatir apabila menemui kesulitan saat menggunakannya. Komunitas memiliki kontribusi cukup besar terhadap perkembangan postgree sehingga sejak tahun 90an postgree terus digunakan dari waktu ke waktu.","title":"2.Dukungan Komunitas"},{"location":"2023/01/Apa-Beda-Database-SQL-dengan-Postgree/#3ekstensibilitas","text":"Postgree memiliki fungsi atau kapabilitas tambahan sehingga arsitekturnya bisa diperluas. Saat kamu menginginkan fungsi tambahan, maka sistem postgree mampu mewujudkan hal itu sebagai langkah untuk menyesuaikan prosedur di database.","title":"3.Ekstensibilitas"},{"location":"2023/01/Apa-Beda-Database-SQL-dengan-Postgree/#perbedaan-database-sql-dengan-postgree","text":"Setelah membahas pengertian dari masing-masing database beserta dengan kelebihan-kelebihan yang dimilikinya, saatnya kita bahas mengenai perbedaan SQL dan postgree.","title":"Perbedaan Database SQL dengan Postgree"},{"location":"2023/01/Apa-Beda-Database-SQL-dengan-Postgree/#1fitur-mvcc","text":"Perbedaan database SQL dengan Postgree bisa dilihat dari segi konkurensi. Postgree jauh lebih unggul di bidang konkurensi jika dibandingkan dengan SQL. Hal ini disebabkan karena postgree didukung oleh fitur MVCC atau multiversion concurrency control sehingga memungkinkan banyak orang sekaligus untuk melakukan interaksi dan juga mengakses database dalam waktu bersamaan. Hal itu membuat kinerja postgree menjadi jauh lebih efisien. Kapasitas Perbedaan database SQL dengan Postgree bisa dilihat dari segi kapasitas. Untuk segi kapasitas postgree jauh lebih unggul daripada SQL. Hal ini disebabkan karena postgree memang dirancang secara khusus untuk pengelolaan database berukuran besar. Postgree dapat mengelola data dengan jumlah sekitar 4 petabytes yang setara dengan 4000 TB.","title":"1.Fitur MVCC"},{"location":"2023/01/Apa-Beda-Database-SQL-dengan-Postgree/#2performa","text":"Untuk segi performa SQL jauh lebih unggul karena dipengaruhi oleh tingkat kecepatan yang jauh lebih baik dibanding dengan postgree. Tentu sebagai pengguna kamu akan jauh lebih menyukai database yang memiliki performa bagus, terutama untuk segi kecepatan. Dengan menggunakan SQL maka pengelolaan proses input dan akses data jauh terasa lebih cepat. Baik SQL maupun postgree, keduanya merupakan alat manajemen berbasis data yang akan sangat membantu pekerjaan kamu. Akan tetapi jika melihat perbedaan database SQL dengan Postgree pasti jauh lebih unggul postgree. Postgree merupakan versi terbaru dari SQL sehingga memiliki banyak fitur tambahan dan bisa diakses secara gratis. Postgree juga bisa dimanfaatkan menggunakan sistem operasi apapun. ADVERTORIAL","title":"2.Performa"},{"location":"tutorial/akses-database-python/","text":"Standar Interface Python untuk database adalah Python DB-API. Kebanyakan Interface database Python mematuhi standar ini. Anda bisa memilih database yang tepat untuk aplikasi Anda. API Database Python mendukung berbagai macam server database seperti. - GadFly - mSQL - MySQL - PostgreSQL - Microsoft SQL Server 2000 - Informix - Interbase - Oracle - Sybase - SQLite Berikut adalah link untuk mempelajari lebih lengkap daftar antarmuka/interface database Python - Antarmuka dan API Database Python. Anda harus mendownload modul DB API terpisah untuk setiap database yang perlu Anda akses. Sebagai contoh, jika Anda perlu mengakses database Oracle dan juga database MySQL, Anda harus mendownload kedua modul database Oracle dan MySQL. API DB menyediakan standar minimal untuk bekerja dengan database menggunakan struktur dan sintaks Python sedapat mungkin. API ini meliputi: Mengimpor modul API. Mendapatkan koneksi dengan database. Menerbitkan pernyataan SQL dan prosedur tersimpan. Menutup koneksi Python memiliki dukungan built-in untuk SQLite. Pada bagian ini, kita akan mempelajari semua konsep menggunakan MySQL. Modul MySQLdb, antarmuka yang populer dengan MySQL tidak kompatibel dengan Python 3. Sebagai gantinya, kita akan menggunakan modul PyMySQL. Apa itu PyMySQL ? PyMySQL adalah sebuah antarmuka untuk menghubungkan ke server database MySQL dari Python. Ini mengimplementasikan API Database Python v2.0 dan berisi perpustakaan klien MySQL murni-Python. Tujuan PyMySQL adalah penggantian drop-in untuk MySQLdb. Anda dapat melihat dokumentasi lengkap penggunaan PyMySQL di https://pymysql.readthedocs.io/en/latest/ . Cara Instal PyMySQL Sebelum melanjutka, pastikan Anda telah menginstal PyMySQL di komputer Anda. Cukup ketik berikut ini di skrip Python Anda dan jalankan. import pymysql.cursors Jika menghasilkan hasil berikut, berarti modul MySQLdb tidak terpasang: Traceback (most recent call last): File \"test.py\", line 3, in Import PyMySQL ImportError: No module named PyMySQL Untuk menginstal modul PyMySQL silahkan gunakan command/perintah berikut di command prompt: python -m pip install PyMySQL Database Connection Sebelum terhubung ke database MySQL, pastikan beberapa hal dibawah ini : Anda telah membuat database TESTDB. Anda telah membuat tabel EMPLOYEE di TESTDB. Tabel ini memiliki bidang FIRST_NAME, LAST_NAME, AGE, SEX, dan INCOME. User ID \"testuser\" dan password \"test123\" diatur untuk mengakses TESTDB. Python modul PyMySQL terinstal dengan benar pada mesin Anda. Anda telah melalui tutorial MySQL untuk memahami Dasar-Dasar MySQL Berikut ini adalah contoh koneksi dengan database MySQL \"TESTDB\" import pymysql.cursors # Open database connection db = pymysql.connect(\"localhost\",\"testuser\",\"test123\",\"TESTDB\" ) # prepare a cursor object using cursor() method cursor = db.cursor() # execute SQL query using execute() method. cursor.execute(\"SELECT VERSION()\") # Fetch a single row using fetchone() method. data = cursor.fetchone() print (\"Database version : %s \" % data) # disconnect from server db.close() Membuat Tabel Database import pymysql.cursors # Open database connection db = pymysql.connect(\"localhost\",\"testuser\",\"test123\",\"TESTDB\" ) # prepare a cursor object using cursor() method cursor = db.cursor() # Drop table if it already exist using execute() method. cursor.execute(\"DROP TABLE IF EXISTS EMPLOYEE\") # Create table as per requirement sql = \"\"\"CREATE TABLE EMPLOYEE ( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT )\"\"\" cursor.execute(sql) # disconnect from server db.close() Operasi Insert Contoh berikut, mengeksekusi pernyataan SQL INSERT untuk membuat catatan di tabel EMPLOYEE import pymysql.cursors # Open database connection db = pymysql.connect(\"localhost\",\"testuser\",\"test123\",\"TESTDB\" ) # prepare a cursor object using cursor() method cursor = db.cursor() # Prepare SQL query to INSERT a record into the database. sql = \"\"\"INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Mac', 'Mohan', 20, 'M', 2000)\"\"\" try: # Execute the SQL command cursor.execute(sql) # Commit your changes in the database db.commit() except: # Rollback in case there is any error db.rollback() # disconnect from server db.close() Contoh di atas bisa dituliskan sebagai berikut untuk membuat query SQL secara dinamis import pymysql.cursors # Open database connection db = pymysql.connect(\"localhost\",\"testuser\",\"test123\",\"TESTDB\" ) # prepare a cursor object using cursor() method cursor = db.cursor() # Prepare SQL query to INSERT a record into the database. sql = \"INSERT INTO EMPLOYEE(FIRST_NAME, \\ LAST_NAME, AGE, SEX, INCOME) \\ VALUES ('%s', '%s', '%d', '%c', '%d' )\" % \\ ('Mac', 'Mohan', 20, 'M', 2000) try: # Execute the SQL command cursor.execute(sql) # Commit your changes in the database db.commit() except: # Rollback in case there is any error db.rollback() # disconnect from server db.close() Read Operation READ Operation pada database apapun berarti mengambil beberapa informasi berguna dari database. Setelah koneksi database terbentuk, Anda siap untuk membuat query ke dalam database ini. Anda bisa menggunakan metode fetchone() untuk mengambil satu record atau fetchall() metode untuk mengambil beberapa nilai dari tabel database. Fetchone () - Ini mengambil baris berikut dari kumpulan hasil query. Set hasil adalah objek yang dikembalikan saat objek kursor digunakan untuk query tabel. Fetchall () - Ini menjemput semua baris dalam kumpulan hasil. Jika beberapa baris telah diekstraksi dari himpunan hasil, maka akan diambil baris yang tersisa dari kumpulan hasil. Rowcount - Ini adalah atribut read-only dan mengembalikan jumlah baris yang dipengaruhi oleh metode execute (). Prosedur berikut menanyakan semua catatan dari tabel EMPLOYEE yang memiliki gaji lebih dari 1000 import pymysql.cursors # Open database connection db = pymysql.connect(\"localhost\",\"testuser\",\"test123\",\"TESTDB\" ) # prepare a cursor object using cursor() method cursor = db.cursor() # Prepare SQL query to INSERT a record into the database. sql = \"SELECT * FROM EMPLOYEE \\ WHERE INCOME > '%d'\" % (1000) try: # Execute the SQL command cursor.execute(sql) # Fetch all the rows in a list of lists. results = cursor.fetchall() for row in results: fname = row[0] lname = row[1] age = row[2] sex = row[3] income = row[4] # Now print fetched result print (\"fname = %s,lname = %s,age = %d,sex = %s,income = %d\" % \\ (fname, lname, age, sex, income )) except: print (\"Error: unable to fetch data\") # menutup koneksi ke server db.close() Setelah Anda eksekusi kode diatas, akan muncul hasil seperti dibawah ini : fname = Mac, lname = Mohan, age = 20, sex = M, income = 2000 Update Operation Operasi UPDATE pada database apapun berarti mengupdate satu atau lebih catatan, yang sudah tersedia di database. Prosedur berikut memperbarui semua catatan yang memiliki SEX sebagai 'M'. Di sini, kita meningkatkan UMUR semua laki-laki satu tahun. import pymysql.cursors # Open database connection db = pymysql.connect(\"localhost\",\"testuser\",\"test123\",\"TESTDB\" ) # prepare a cursor object using cursor() method cursor = db.cursor() # Prepare SQL query to UPDATE required records sql = \"UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'\" % ('M') try: # Execute the SQL command cursor.execute(sql) # Commit your changes in the database db.commit() except: # Rollback in case there is any error db.rollback() # disconnect from server db.close() Delete Operation Operasi DELETE diperlukan bila Anda ingin menghapus beberapa catatan dari database Anda. Berikut ini adalah prosedur untuk menghapus semua catatan dari EMPLOYEE dimana AGE lebih dari 20 import pymysql.cursors # Open database connection db = pymysql.connect(\"localhost\",\"testuser\",\"test123\",\"TESTDB\" ) # prepare a cursor object using cursor() method cursor = db.cursor() # Prepare SQL query to DELETE required records sql = \"DELETE FROM EMPLOYEE WHERE AGE > '%d'\" % (20) try: # Execute the SQL command cursor.execute(sql) # Commit your changes in the database db.commit() except: # Rollback in case there is any error db.rollback() # disconnect from server db.close() Selain itu masih ada beberapa operasi sebagai berikut : Commit Operation db.commit() Rollback Operation db.rollback() Disconnect Operation db.close() Jika Anda menginginkan dokumentasi yang lebih lengkap dari bahasa pemrograman python, silahkan buka dokumentasi resmi dari Python - Dokumentasi Lengkap Python Edit tutorial ini Networking Python","title":"Pengembangan Web Python"},{"location":"tutorial/akses-database-python/#apa-itu-pymysql","text":"PyMySQL adalah sebuah antarmuka untuk menghubungkan ke server database MySQL dari Python. Ini mengimplementasikan API Database Python v2.0 dan berisi perpustakaan klien MySQL murni-Python. Tujuan PyMySQL adalah penggantian drop-in untuk MySQLdb. Anda dapat melihat dokumentasi lengkap penggunaan PyMySQL di https://pymysql.readthedocs.io/en/latest/ .","title":"Apa itu PyMySQL ?"},{"location":"tutorial/akses-database-python/#cara-instal-pymysql","text":"Sebelum melanjutka, pastikan Anda telah menginstal PyMySQL di komputer Anda. Cukup ketik berikut ini di skrip Python Anda dan jalankan. import pymysql.cursors Jika menghasilkan hasil berikut, berarti modul MySQLdb tidak terpasang: Traceback (most recent call last): File \"test.py\", line 3, in Import PyMySQL ImportError: No module named PyMySQL Untuk menginstal modul PyMySQL silahkan gunakan command/perintah berikut di command prompt: python -m pip install PyMySQL","title":"Cara Instal PyMySQL"},{"location":"tutorial/akses-database-python/#database-connection","text":"Sebelum terhubung ke database MySQL, pastikan beberapa hal dibawah ini : Anda telah membuat database TESTDB. Anda telah membuat tabel EMPLOYEE di TESTDB. Tabel ini memiliki bidang FIRST_NAME, LAST_NAME, AGE, SEX, dan INCOME. User ID \"testuser\" dan password \"test123\" diatur untuk mengakses TESTDB. Python modul PyMySQL terinstal dengan benar pada mesin Anda. Anda telah melalui tutorial MySQL untuk memahami Dasar-Dasar MySQL Berikut ini adalah contoh koneksi dengan database MySQL \"TESTDB\" import pymysql.cursors # Open database connection db = pymysql.connect(\"localhost\",\"testuser\",\"test123\",\"TESTDB\" ) # prepare a cursor object using cursor() method cursor = db.cursor() # execute SQL query using execute() method. cursor.execute(\"SELECT VERSION()\") # Fetch a single row using fetchone() method. data = cursor.fetchone() print (\"Database version : %s \" % data) # disconnect from server db.close()","title":"Database Connection"},{"location":"tutorial/akses-database-python/#membuat-tabel-database","text":"import pymysql.cursors # Open database connection db = pymysql.connect(\"localhost\",\"testuser\",\"test123\",\"TESTDB\" ) # prepare a cursor object using cursor() method cursor = db.cursor() # Drop table if it already exist using execute() method. cursor.execute(\"DROP TABLE IF EXISTS EMPLOYEE\") # Create table as per requirement sql = \"\"\"CREATE TABLE EMPLOYEE ( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT )\"\"\" cursor.execute(sql) # disconnect from server db.close()","title":"Membuat Tabel Database"},{"location":"tutorial/akses-database-python/#operasi-insert","text":"Contoh berikut, mengeksekusi pernyataan SQL INSERT untuk membuat catatan di tabel EMPLOYEE import pymysql.cursors # Open database connection db = pymysql.connect(\"localhost\",\"testuser\",\"test123\",\"TESTDB\" ) # prepare a cursor object using cursor() method cursor = db.cursor() # Prepare SQL query to INSERT a record into the database. sql = \"\"\"INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Mac', 'Mohan', 20, 'M', 2000)\"\"\" try: # Execute the SQL command cursor.execute(sql) # Commit your changes in the database db.commit() except: # Rollback in case there is any error db.rollback() # disconnect from server db.close() Contoh di atas bisa dituliskan sebagai berikut untuk membuat query SQL secara dinamis import pymysql.cursors # Open database connection db = pymysql.connect(\"localhost\",\"testuser\",\"test123\",\"TESTDB\" ) # prepare a cursor object using cursor() method cursor = db.cursor() # Prepare SQL query to INSERT a record into the database. sql = \"INSERT INTO EMPLOYEE(FIRST_NAME, \\ LAST_NAME, AGE, SEX, INCOME) \\ VALUES ('%s', '%s', '%d', '%c', '%d' )\" % \\ ('Mac', 'Mohan', 20, 'M', 2000) try: # Execute the SQL command cursor.execute(sql) # Commit your changes in the database db.commit() except: # Rollback in case there is any error db.rollback() # disconnect from server db.close()","title":"Operasi Insert"},{"location":"tutorial/akses-database-python/#read-operation","text":"READ Operation pada database apapun berarti mengambil beberapa informasi berguna dari database. Setelah koneksi database terbentuk, Anda siap untuk membuat query ke dalam database ini. Anda bisa menggunakan metode fetchone() untuk mengambil satu record atau fetchall() metode untuk mengambil beberapa nilai dari tabel database. Fetchone () - Ini mengambil baris berikut dari kumpulan hasil query. Set hasil adalah objek yang dikembalikan saat objek kursor digunakan untuk query tabel. Fetchall () - Ini menjemput semua baris dalam kumpulan hasil. Jika beberapa baris telah diekstraksi dari himpunan hasil, maka akan diambil baris yang tersisa dari kumpulan hasil. Rowcount - Ini adalah atribut read-only dan mengembalikan jumlah baris yang dipengaruhi oleh metode execute (). Prosedur berikut menanyakan semua catatan dari tabel EMPLOYEE yang memiliki gaji lebih dari 1000 import pymysql.cursors # Open database connection db = pymysql.connect(\"localhost\",\"testuser\",\"test123\",\"TESTDB\" ) # prepare a cursor object using cursor() method cursor = db.cursor() # Prepare SQL query to INSERT a record into the database. sql = \"SELECT * FROM EMPLOYEE \\ WHERE INCOME > '%d'\" % (1000) try: # Execute the SQL command cursor.execute(sql) # Fetch all the rows in a list of lists. results = cursor.fetchall() for row in results: fname = row[0] lname = row[1] age = row[2] sex = row[3] income = row[4] # Now print fetched result print (\"fname = %s,lname = %s,age = %d,sex = %s,income = %d\" % \\ (fname, lname, age, sex, income )) except: print (\"Error: unable to fetch data\") # menutup koneksi ke server db.close() Setelah Anda eksekusi kode diatas, akan muncul hasil seperti dibawah ini : fname = Mac, lname = Mohan, age = 20, sex = M, income = 2000","title":"Read Operation"},{"location":"tutorial/akses-database-python/#update-operation","text":"Operasi UPDATE pada database apapun berarti mengupdate satu atau lebih catatan, yang sudah tersedia di database. Prosedur berikut memperbarui semua catatan yang memiliki SEX sebagai 'M'. Di sini, kita meningkatkan UMUR semua laki-laki satu tahun. import pymysql.cursors # Open database connection db = pymysql.connect(\"localhost\",\"testuser\",\"test123\",\"TESTDB\" ) # prepare a cursor object using cursor() method cursor = db.cursor() # Prepare SQL query to UPDATE required records sql = \"UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'\" % ('M') try: # Execute the SQL command cursor.execute(sql) # Commit your changes in the database db.commit() except: # Rollback in case there is any error db.rollback() # disconnect from server db.close()","title":"Update Operation"},{"location":"tutorial/akses-database-python/#delete-operation","text":"Operasi DELETE diperlukan bila Anda ingin menghapus beberapa catatan dari database Anda. Berikut ini adalah prosedur untuk menghapus semua catatan dari EMPLOYEE dimana AGE lebih dari 20 import pymysql.cursors # Open database connection db = pymysql.connect(\"localhost\",\"testuser\",\"test123\",\"TESTDB\" ) # prepare a cursor object using cursor() method cursor = db.cursor() # Prepare SQL query to DELETE required records sql = \"DELETE FROM EMPLOYEE WHERE AGE > '%d'\" % (20) try: # Execute the SQL command cursor.execute(sql) # Commit your changes in the database db.commit() except: # Rollback in case there is any error db.rollback() # disconnect from server db.close() Selain itu masih ada beberapa operasi sebagai berikut : Commit Operation db.commit() Rollback Operation db.rollback() Disconnect Operation db.close() Jika Anda menginginkan dokumentasi yang lebih lengkap dari bahasa pemrograman python, silahkan buka dokumentasi resmi dari Python - Dokumentasi Lengkap Python Edit tutorial ini Networking Python","title":"Delete Operation"},{"location":"tutorial/apa-itu-python/","text":"Python adalah bahasa pemrograman interpretatif multiguna. Tidak seperti bahasa lain yang susah untuk dibaca dan dipahami, python lebih menekankan pada keterbacaan kode agar lebih mudah untuk memahami sintaks. Hal ini membuat Python sangat mudah dipelajari baik untuk pemula maupun untuk yang sudah menguasai bahasa pemrograman lain. Bahasa ini muncul pertama kali pada tahun 1991, dirancang oleh seorang bernama Guido van Rossum . Sampai saat ini Python masih dikembangkan oleh Python Software Foundation . Bahasa Python mendukung hampir semua sistem operasi, bahkan untuk sistem operasi Linux, hampir semua distronya sudah menyertakan Python di dalamnya. Dengan kode yang simpel dan mudah diimplementasikan, seorang programmer dapat lebih mengutamakan pengembangan aplikasi yang dibuat, bukan malah sibuk mencari syntax error. print(\"Python sangat simpel\") Hanya dengan menuliskan kode print seperti yang diatas, anda sudah bisa mencetak apapun yang anda inginkan di dalam tanda kurung () . Dibagian akhir kode pun, anda tidak harus mengakhirnya dengan tanda semicolon ; Edit tutorial ini Instalasi Python","title":"Pendahuluan Python"},{"location":"tutorial/dictionary-python/","text":"Dictionary Python berbeda dengan List ataupun Tuple. Karena setiap urutanya berisi key dan value. Setiap key dipisahkan dari value-nya oleh titik dua (:), item dipisahkan oleh koma, dan semuanya tertutup dalam kurung kurawal. Dictionary kosong tanpa barang ditulis hanya dengan dua kurung kurawal, seperti ini: {}. Nilai kamus bisa berupa tipe apa pun, namun key harus berupa tipe data yang tidak berubah seperti string, angka, atau tupel. Akses Nilai Dalam Dictionary Python Untuk mengakses elemen Dictionary, Anda dapat menggunakan tanda kurung siku yang sudah dikenal bersama dengan key untuk mendapatkan nilainya. Berikut adalah contoh sederhananya : #Contoh cara membuat Dictionary pada Python dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} print (\"dict['Name']: \", dict['Name']) print (\"dict['Age']: \", dict['Age']) Update Nilai Dalam Dictionary Python Anda dapat memperbarui Dictionary dengan menambahkan entri baru atau pasangan nilai kunci, memodifikasi entri yang ada, atau menghapus entri yang ada seperti ditunjukkan pada contoh sederhana yang diberikan di bawah ini. #Update dictionary python dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} dict['Age'] = 8; # Mengubah entri yang sudah ada dict['School'] = \"DPS School\" # Menambah entri baru print (\"dict['Age']: \", dict['Age']) print (\"dict['School']: \", dict['School']) Hapus Elemen Dictionary Python Anda dapat menghapus elemen Dictionary individual atau menghapus keseluruhan isi Dictionary. Anda juga dapat menghapus seluruh Dictionary dalam satu operasi. Untuk menghapus seluruh Dictionary secara eksplisit, cukup gunakan del statement. Berikut adalah contoh sederhana : #Contoh cara menghapus pada Dictionary Python dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} del dict['Name'] # hapus entri dengan key 'Name' dict.clear() # hapus semua entri di dict del dict # hapus dictionary yang sudah ada print (\"dict['Age']: \", dict['Age']) print (\"dict['School']: \", dict['School']) Fungsi Build-in Pada Dictionary Python Python menyertakan fungsi built-in sebagai berikut : Fungsi Python Penjelasan cmp(dict1, dict2) Membandingkan unsur keduanya. len(dict) Memberikan panjang total Dictionary. Ini sama dengan jumlah item dalam Dictionary. str(dict) Menghasilkan representasi string yang dapat dicetak dari Dictionary type(variable) Mengembalikan tipe variabel yang lulus. Jika variabel yang dilewatkan adalah Dictionary, maka akan mengembalikan tipe Dictionary. Method Build-in Pada Dictionary Python Python menyertakan method built-in sebagai berikut : Method Python Penjelasan dict.clear() Menghapus semua elemen Dictionary dict.copy() Mengembalikan salinan Dictionary dict.fromkeys() Buat Dictionary baru dengan kunci dari seq dan nilai yang disetel ke nilai. dict.get(key, default=None) For key, nilai pengembalian atau default jika tombol tidak ada dalam Dictionary dict.has_key(key) Mengembalikan true jika key dalam Dictionary, false sebaliknya dict.items() Mengembalikan daftar dari pasangan tuple dictionary (key, value) dict.keys() Mengembalikan daftar key dictionary dict.setdefault(key, default=None) Mirip dengan get (), tapi akan mengatur dict [key] = default jika kunci belum ada di dict dict.update(dict2) Menambahkan pasangan kunci kata kunci dict2 ke dict dict.values() Mengembalikan daftar nilai dictionary Edit tutorial ini Tuple Python Tanggal & Waktu Python","title":"Dictionary Python"},{"location":"tutorial/dictionary-python/#akses-nilai-dalam-dictionary-python","text":"Untuk mengakses elemen Dictionary, Anda dapat menggunakan tanda kurung siku yang sudah dikenal bersama dengan key untuk mendapatkan nilainya. Berikut adalah contoh sederhananya : #Contoh cara membuat Dictionary pada Python dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} print (\"dict['Name']: \", dict['Name']) print (\"dict['Age']: \", dict['Age'])","title":"Akses Nilai Dalam Dictionary Python"},{"location":"tutorial/dictionary-python/#update-nilai-dalam-dictionary-python","text":"Anda dapat memperbarui Dictionary dengan menambahkan entri baru atau pasangan nilai kunci, memodifikasi entri yang ada, atau menghapus entri yang ada seperti ditunjukkan pada contoh sederhana yang diberikan di bawah ini. #Update dictionary python dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} dict['Age'] = 8; # Mengubah entri yang sudah ada dict['School'] = \"DPS School\" # Menambah entri baru print (\"dict['Age']: \", dict['Age']) print (\"dict['School']: \", dict['School'])","title":"Update Nilai Dalam Dictionary Python"},{"location":"tutorial/dictionary-python/#hapus-elemen-dictionary-python","text":"Anda dapat menghapus elemen Dictionary individual atau menghapus keseluruhan isi Dictionary. Anda juga dapat menghapus seluruh Dictionary dalam satu operasi. Untuk menghapus seluruh Dictionary secara eksplisit, cukup gunakan del statement. Berikut adalah contoh sederhana : #Contoh cara menghapus pada Dictionary Python dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} del dict['Name'] # hapus entri dengan key 'Name' dict.clear() # hapus semua entri di dict del dict # hapus dictionary yang sudah ada print (\"dict['Age']: \", dict['Age']) print (\"dict['School']: \", dict['School'])","title":"Hapus Elemen Dictionary Python"},{"location":"tutorial/dictionary-python/#fungsi-build-in-pada-dictionary-python","text":"Python menyertakan fungsi built-in sebagai berikut : Fungsi Python Penjelasan cmp(dict1, dict2) Membandingkan unsur keduanya. len(dict) Memberikan panjang total Dictionary. Ini sama dengan jumlah item dalam Dictionary. str(dict) Menghasilkan representasi string yang dapat dicetak dari Dictionary type(variable) Mengembalikan tipe variabel yang lulus. Jika variabel yang dilewatkan adalah Dictionary, maka akan mengembalikan tipe Dictionary.","title":"Fungsi Build-in Pada Dictionary Python"},{"location":"tutorial/dictionary-python/#method-build-in-pada-dictionary-python","text":"Python menyertakan method built-in sebagai berikut : Method Python Penjelasan dict.clear() Menghapus semua elemen Dictionary dict.copy() Mengembalikan salinan Dictionary dict.fromkeys() Buat Dictionary baru dengan kunci dari seq dan nilai yang disetel ke nilai. dict.get(key, default=None) For key, nilai pengembalian atau default jika tombol tidak ada dalam Dictionary dict.has_key(key) Mengembalikan true jika key dalam Dictionary, false sebaliknya dict.items() Mengembalikan daftar dari pasangan tuple dictionary (key, value) dict.keys() Mengembalikan daftar key dictionary dict.setdefault(key, default=None) Mirip dengan get (), tapi akan mengatur dict [key] = default jika kunci belum ada di dict dict.update(dict2) Menambahkan pasangan kunci kata kunci dict2 ke dict dict.values() Mengembalikan daftar nilai dictionary Edit tutorial ini Tuple Python Tanggal & Waktu Python","title":"Method Build-in Pada Dictionary Python"},{"location":"tutorial/exception-python/","text":"Python menyediakan dua fitur yang sangat penting untuk menangani kesalahan tak terduga dalam program Python Anda dan menambahkan kemampuan debugging di dalamnya. Exception Handling Assertions Exception adalah sebuah peristiwa, yang terjadi selama pelaksanaan program yang mengganggu aliran normal instruksi program. Secara umum, ketika skrip Python menemukan situasi yang tidak dapat diatasi, hal itu menimbulkan pengecualian. Exception adalah objek Python yang mewakili kesalahan. Ketika skrip Python menimbulkan Exception, ia harus menangani Exception begitu saja sehingga berhenti dan berhenti. Standard Exceptions Nama Penjelasan Exception Kelas dasar untuk semua pengecualian / exception StopIteration Dibesarkan ketika metode (iterator) berikutnya dari iterator tidak mengarah ke objek apa pun. SystemExit Dibesarkan oleh fungsi sys.exit (). StandardError Kelas dasar untuk semua pengecualian built-in kecuali StopIteration dan SystemExit. ArithmeticError Kelas dasar untuk semua kesalahan yang terjadi untuk perhitungan numerik. OverflowError Dibesarkan saat perhitungan melebihi batas maksimum untuk tipe numerik. FloatingPointError Dibesarkan saat perhitungan floating point gagal. ZeroDivisonError Dibesarkan saat pembagian atau modulo nol dilakukan untuk semua tipe numerik. AssertionError Dibesarkan jika terjadi kegagalan pernyataan Assert. AttributeError Dibesarkan jika terjadi kegagalan referensi atribut atau penugasan. EOFError Dibesarkan bila tidak ada input dari fungsi raw_input () atau input () dan akhir file tercapai. ImportError Dibesarkan saat sebuah pernyataan impor gagal. KeyboardInterrupt Dibesarkan saat pengguna menyela eksekusi program, biasanya dengan menekan Ctrl + c. LookupError Kelas dasar untuk semua kesalahan pencarian. IndexError Dibesarkan saat sebuah indeks tidak ditemukan secara berurutan. KeyError Dibesarkan saat kunci yang ditentukan tidak ditemukan dalam kamus. NameError Dibesarkan saat pengenal tidak ditemukan di namespace lokal atau global. UnboundLocalError Dibesarkan saat mencoba mengakses variabel lokal dalam suatu fungsi atau metode namun tidak ada nilai yang ditugaskan padanya. EnvironmentError Kelas dasar untuk semua pengecualian yang terjadi di luar lingkungan Python. IOError Dibesarkan saat operasi input / output gagal, seperti pernyataan cetak atau fungsi open () saat mencoba membuka file yang tidak ada. OSError Dibangkitkan untuk kesalahan terkait sistem operasi. SyntaxError Dibesarkan saat ada kesalahan dengan sintaks Python. IndentationError Dibesarkan saat indentasi tidak ditentukan dengan benar. SystemError Dibesarkan saat penafsir menemukan masalah internal, namun bila kesalahan ini ditemui juru bahasa Python tidak keluar. SystemExit Dibesarkan saat juru bahasa Python berhenti dengan menggunakan fungsi sys.exit (). Jika tidak ditangani dalam kode, menyebabkan penafsir untuk keluar. TypeError Dibesarkan saat operasi atau fungsi dicoba yang tidak valid untuk tipe data yang ditentukan. ValueError Dibesarkan ketika fungsi bawaan untuk tipe data memiliki jenis argumen yang valid, namun argumen tersebut memiliki nilai yang tidak valid yang ditentukan. RuntimeError Dibesarkan saat kesalahan yang dihasilkan tidak termasuk dalam kategori apa pun. NotImplementedError Dibesarkan ketika metode abstrak yang perlu diimplementasikan di kelas warisan sebenarnya tidak dilaksanakan. Edit tutorial ini File I/O Python Object & Class Python","title":"Exception Python"},{"location":"tutorial/exception-python/#standard-exceptions","text":"Nama Penjelasan Exception Kelas dasar untuk semua pengecualian / exception StopIteration Dibesarkan ketika metode (iterator) berikutnya dari iterator tidak mengarah ke objek apa pun. SystemExit Dibesarkan oleh fungsi sys.exit (). StandardError Kelas dasar untuk semua pengecualian built-in kecuali StopIteration dan SystemExit. ArithmeticError Kelas dasar untuk semua kesalahan yang terjadi untuk perhitungan numerik. OverflowError Dibesarkan saat perhitungan melebihi batas maksimum untuk tipe numerik. FloatingPointError Dibesarkan saat perhitungan floating point gagal. ZeroDivisonError Dibesarkan saat pembagian atau modulo nol dilakukan untuk semua tipe numerik. AssertionError Dibesarkan jika terjadi kegagalan pernyataan Assert. AttributeError Dibesarkan jika terjadi kegagalan referensi atribut atau penugasan. EOFError Dibesarkan bila tidak ada input dari fungsi raw_input () atau input () dan akhir file tercapai. ImportError Dibesarkan saat sebuah pernyataan impor gagal. KeyboardInterrupt Dibesarkan saat pengguna menyela eksekusi program, biasanya dengan menekan Ctrl + c. LookupError Kelas dasar untuk semua kesalahan pencarian. IndexError Dibesarkan saat sebuah indeks tidak ditemukan secara berurutan. KeyError Dibesarkan saat kunci yang ditentukan tidak ditemukan dalam kamus. NameError Dibesarkan saat pengenal tidak ditemukan di namespace lokal atau global. UnboundLocalError Dibesarkan saat mencoba mengakses variabel lokal dalam suatu fungsi atau metode namun tidak ada nilai yang ditugaskan padanya. EnvironmentError Kelas dasar untuk semua pengecualian yang terjadi di luar lingkungan Python. IOError Dibesarkan saat operasi input / output gagal, seperti pernyataan cetak atau fungsi open () saat mencoba membuka file yang tidak ada. OSError Dibangkitkan untuk kesalahan terkait sistem operasi. SyntaxError Dibesarkan saat ada kesalahan dengan sintaks Python. IndentationError Dibesarkan saat indentasi tidak ditentukan dengan benar. SystemError Dibesarkan saat penafsir menemukan masalah internal, namun bila kesalahan ini ditemui juru bahasa Python tidak keluar. SystemExit Dibesarkan saat juru bahasa Python berhenti dengan menggunakan fungsi sys.exit (). Jika tidak ditangani dalam kode, menyebabkan penafsir untuk keluar. TypeError Dibesarkan saat operasi atau fungsi dicoba yang tidak valid untuk tipe data yang ditentukan. ValueError Dibesarkan ketika fungsi bawaan untuk tipe data memiliki jenis argumen yang valid, namun argumen tersebut memiliki nilai yang tidak valid yang ditentukan. RuntimeError Dibesarkan saat kesalahan yang dihasilkan tidak termasuk dalam kategori apa pun. NotImplementedError Dibesarkan ketika metode abstrak yang perlu diimplementasikan di kelas warisan sebenarnya tidak dilaksanakan. Edit tutorial ini File I/O Python Object & Class Python","title":"Standard Exceptions"},{"location":"tutorial/file-io-python/","text":"Disini kita akan belajar semua fungsi dasar I/O yang tersedia pada Python 3. Jika Anda ingin mempelajari lebih detail, lihat dokumentasi standar Python. Print Cara termudah untuk menghasilkan output adalah dengan menggunakan pernyataan cetak di mana Anda bisa melewati nol atau lebih banyak ekspresi yang dipisahkan dengan koma. Fungsi ini mengubah ekspresi yang Anda berikan ke string dan menulis hasilnya ke output standar sebagai berikut : print (\"Python adalah bahasa pemrograman yang hebat\") Membaca Input Keyboard Python 2 memiliki dua fungsi built-in untuk membaca data dari input standar, yang secara default berasal dari keyboard. Fungsi ini adalah input() dan raw_input() Dengan Python 3, fungsi raw_input() tidak digunakan lagi. Selain itu, input() berfungsi membaca data dari keyboard sebagai string, terlepas dari apakah itu tertutup dengan tanda kutip ('' atau '\") atau tidak. Fungsi Input Python Fungsi input([prompt]) setara dengan raw_input, kecuali mengasumsikan bahwa input adalah ekspresi Python yang valid dan mengembalikan hasil yang dievaluasi ke Anda. >>> x = input(\"something:\") >>> something:10 >>> x >>> '10' >>> x = input(\"something:\") >>> something:'10' #entered data treated as string with or without '' >>> x >>> \"'10'\" Edit tutorial ini Modul Python Exception Python","title":"File I/O Python"},{"location":"tutorial/file-io-python/#print","text":"Cara termudah untuk menghasilkan output adalah dengan menggunakan pernyataan cetak di mana Anda bisa melewati nol atau lebih banyak ekspresi yang dipisahkan dengan koma. Fungsi ini mengubah ekspresi yang Anda berikan ke string dan menulis hasilnya ke output standar sebagai berikut : print (\"Python adalah bahasa pemrograman yang hebat\")","title":"Print"},{"location":"tutorial/file-io-python/#membaca-input-keyboard","text":"Python 2 memiliki dua fungsi built-in untuk membaca data dari input standar, yang secara default berasal dari keyboard. Fungsi ini adalah input() dan raw_input() Dengan Python 3, fungsi raw_input() tidak digunakan lagi. Selain itu, input() berfungsi membaca data dari keyboard sebagai string, terlepas dari apakah itu tertutup dengan tanda kutip ('' atau '\") atau tidak.","title":"Membaca Input Keyboard"},{"location":"tutorial/file-io-python/#fungsi-input-python","text":"Fungsi input([prompt]) setara dengan raw_input, kecuali mengasumsikan bahwa input adalah ekspresi Python yang valid dan mengembalikan hasil yang dievaluasi ke Anda. >>> x = input(\"something:\") >>> something:10 >>> x >>> '10' >>> x = input(\"something:\") >>> something:'10' #entered data treated as string with or without '' >>> x >>> \"'10'\" Edit tutorial ini Modul Python Exception Python","title":"Fungsi Input Python"},{"location":"tutorial/fungsi-python/","text":"Fungsi adalah blok kode terorganisir dan dapat digunakan kembali yang digunakan untuk melakukan sebuah tindakan/action. Fungsi memberikan modularitas yang lebih baik untuk aplikasi Anda dan tingkat penggunaan kode yang tinggi. Mendefinisikan Fungsi Python Anda dapat menentukan fungsi untuk menyediakan fungsionalitas yang dibutuhkan. Berikut adalah aturan sederhana untuk mendefinisikan fungsi dengan Python. Fungsi blok dimulai dengan def kata kunci diikuti oleh nama fungsi dan tanda kurung (()). Setiap parameter masukan atau argumen harus ditempatkan di dalam tanda kurung ini. Anda juga dapat menentukan parameter di dalam tanda kurung ini. Pernyataan pertama dari sebuah fungsi dapat berupa pernyataan opsional - string dokumentasi fungsi atau docstring. Blok kode dalam setiap fungsi dimulai dengan titik dua (:) dan indentasi. Pernyataan kembali [ekspresi] keluar dari sebuah fungsi, secara opsional menyampaikan kembali ekspresi ke pemanggil. Pernyataan pengembalian tanpa argumen sama dengan return None. Contoh fungsi def printme( str ): \"This prints a passed string into this function\" print (str) return Edit tutorial ini Tanggal & Waktu Python Modul Python","title":"Fungsi Python"},{"location":"tutorial/fungsi-python/#mendefinisikan-fungsi-python","text":"Anda dapat menentukan fungsi untuk menyediakan fungsionalitas yang dibutuhkan. Berikut adalah aturan sederhana untuk mendefinisikan fungsi dengan Python. Fungsi blok dimulai dengan def kata kunci diikuti oleh nama fungsi dan tanda kurung (()). Setiap parameter masukan atau argumen harus ditempatkan di dalam tanda kurung ini. Anda juga dapat menentukan parameter di dalam tanda kurung ini. Pernyataan pertama dari sebuah fungsi dapat berupa pernyataan opsional - string dokumentasi fungsi atau docstring. Blok kode dalam setiap fungsi dimulai dengan titik dua (:) dan indentasi. Pernyataan kembali [ekspresi] keluar dari sebuah fungsi, secara opsional menyampaikan kembali ekspresi ke pemanggil. Pernyataan pengembalian tanpa argumen sama dengan return None. Contoh fungsi def printme( str ): \"This prints a passed string into this function\" print (str) return Edit tutorial ini Tanggal & Waktu Python Modul Python","title":"Mendefinisikan Fungsi Python"},{"location":"tutorial/hello-world-python/","text":"Syntax bahasa Python hampir sama dengan bahasa pemrograman pada umumnya seperti Java atau PHP. Syntax Dasar Dibawah ini adalah contoh fungsi Python yang digunakan untuk mencetak. Di Python untuk mencetak cukup gunakan fungsi print() , dimana sesuatu yang akan dicetak harus diletakkan diantara kurung buka dan kurung tutup, bahkan di Python versi 2.x Anda tidak harus menggunakan tanda kurung kurawal, cukup pisahkan dengan spasi. Jika ingin mencetak tipe data String langsung, Anda harus memasukanya ke dalam tanda kutip terlebih dahulu. print(\"Hello World\") Saat anda menjalankan script diatas, Anda akan melihat output berupa text Hello World Python Case Sensitivity Python bersifat case sensitif, ini artinya huruf besar dan huruf kecil memiliki perbedaan. Sebagai contoh jika Anda menggunakan fungsi print dengan huruf kecil print() akan berhasil. Lain hal jika anda menggunakan huruf kapital Print() atau PRINT() , akan muncul pesan error. Aturan ini berlaku untuk nama variabel ataupun fungsi-fungsi lainnya. Edit tutorial ini Menjalankan Python Komentar Python","title":"Hello World Python"},{"location":"tutorial/hello-world-python/#syntax-dasar","text":"Dibawah ini adalah contoh fungsi Python yang digunakan untuk mencetak. Di Python untuk mencetak cukup gunakan fungsi print() , dimana sesuatu yang akan dicetak harus diletakkan diantara kurung buka dan kurung tutup, bahkan di Python versi 2.x Anda tidak harus menggunakan tanda kurung kurawal, cukup pisahkan dengan spasi. Jika ingin mencetak tipe data String langsung, Anda harus memasukanya ke dalam tanda kutip terlebih dahulu. print(\"Hello World\") Saat anda menjalankan script diatas, Anda akan melihat output berupa text Hello World","title":"Syntax Dasar"},{"location":"tutorial/hello-world-python/#python-case-sensitivity","text":"Python bersifat case sensitif, ini artinya huruf besar dan huruf kecil memiliki perbedaan. Sebagai contoh jika Anda menggunakan fungsi print dengan huruf kecil print() akan berhasil. Lain hal jika anda menggunakan huruf kapital Print() atau PRINT() , akan muncul pesan error. Aturan ini berlaku untuk nama variabel ataupun fungsi-fungsi lainnya. Edit tutorial ini Menjalankan Python Komentar Python","title":"Python Case Sensitivity"},{"location":"tutorial/instalasi-python/","text":"Sebelum Anda menggunakan Python, Anda harus menginstalnya terlebih dahulu di sistem operasi komputer Anda. Saat ini Python memiliki 2 versi yang berbeda, yaitu Python versi 3.4.3 dan Python versi 2.7.10 . Disini kita akan belajar bahasa pemrograman Python menggunakan versi terbaru 3.4.3 . Cara menginstal python sangat mudah, ikuti panduan dibawah ini. Dibawah adalah panduan cara instal python di platform Linux, Windows dan Mac OS. Linux Buka browser, kunjungi http://www.python.org/downloads/source/ Download versi terbaru Python berbentuk file zip untuk Unix/Linux Ekstrak file zip yang baru saja di download Edit file Modules/Setup jika Anda ingin kostumisasi Python Jalankan ./configure script make make install Langkah ini akan menginstal Python di lokasi standar /usr/local/bin dan library di /usr/local/lib/pythonXX dimana XX adalah versi terbaru Python yang anda gunakan. Untuk beberapa distro (distribution store) dari sistem operasi linux sudah terinstal Python di dalamnya. Jadi Anda tidak perlu menginstalnya lagi. Windows Buka browser, kunjungi http://www.python.org/downloads/windows/ ATAU, klik direct link https://www.python.org/ftp/python/3.8.1/python-3.8.1.exe Buka (klik 2x) file installer python yang baru saja di download Ikuti langkah instalasi sampai selesai Mac OS Buka browser, kunjungi http://www.python.org/download/mac/ Download versi terbaru Python untuk Macintosh Buka file yang baru saja di download Ikuti langkah instalasi sampai selesai Edit tutorial ini Pengertian Python Menjalankan Python","title":"Instalasi Python"},{"location":"tutorial/instalasi-python/#linux","text":"Buka browser, kunjungi http://www.python.org/downloads/source/ Download versi terbaru Python berbentuk file zip untuk Unix/Linux Ekstrak file zip yang baru saja di download Edit file Modules/Setup jika Anda ingin kostumisasi Python Jalankan ./configure script make make install Langkah ini akan menginstal Python di lokasi standar /usr/local/bin dan library di /usr/local/lib/pythonXX dimana XX adalah versi terbaru Python yang anda gunakan. Untuk beberapa distro (distribution store) dari sistem operasi linux sudah terinstal Python di dalamnya. Jadi Anda tidak perlu menginstalnya lagi.","title":"Linux"},{"location":"tutorial/instalasi-python/#windows","text":"Buka browser, kunjungi http://www.python.org/downloads/windows/ ATAU, klik direct link https://www.python.org/ftp/python/3.8.1/python-3.8.1.exe Buka (klik 2x) file installer python yang baru saja di download Ikuti langkah instalasi sampai selesai","title":"Windows"},{"location":"tutorial/instalasi-python/#mac-os","text":"Buka browser, kunjungi http://www.python.org/download/mac/ Download versi terbaru Python untuk Macintosh Buka file yang baru saja di download Ikuti langkah instalasi sampai selesai Edit tutorial ini Pengertian Python Menjalankan Python","title":"Mac OS"},{"location":"tutorial/komentar-python/","text":"Komentar (comment) adalah kode di dalam script Python yang tidak dieksekusi atau tidak dijalankan mesin. Komentar hanya digunakan untuk menandai atau memberikan keterangan tertulis pada script. Komentar biasa digunakan untuk membiarkan orang lain memahami apa yang dilakukan script. atau untuk mengingatkan kepada programmer sendiri jika suatu saat kembali mengedit script tersebut. Untuk menggunakan komentar anda cukup menulis tanda pagar # diikuti dengan komentar Anda atau dengan menggunakan string literal yang dibuka dan ditutup dengan \"\"\". Dibawah ini adalah contoh penggunaan komentar pada Python #Ini adalah komentar # Tulisan ini tidak akan dieksekusi #komentar dengan tanda pagar hanya bisa digunakan #untuk #satu #baris \"\"\" Penulisan Komentar lebih dari satu baris yaitu dengan menggunakan kutip dua 3 kali dan ditutup dengan kutip dua 3 kali juga \"\"\" print(\"Hello World\") #ini juga komentar #print(\"Welcome\") # komentar bisa berisi spesial karakter !@#$%^&\\*(),./;'[]\\ #mencetak nama print(\"Budi\") #mencetak angka/integer print(123) Saat anda menjalankan script diatas, Anda akan melihat output berupa Hello World , Budi dan 123 , karena tulisan/komentar yang ditulis tidak dieksekusi. Edit tutorial ini Hello World Python Tipe Data Python","title":"Komentar Python"},{"location":"tutorial/kondisi-if-else-python/","text":"Kondisi If Pengambilan keputusan (kondisi if) digunakan untuk mengantisipasi kondisi yang terjadi saat jalanya program dan menentukan tindakan apa yang akan diambil sesuai dengan kondisi. Pada python ada beberapa statement/kondisi diantaranya adalah if , else dan elif Kondisi if digunakan untuk mengeksekusi kode jika kondisi bernilai benar True . Jika kondisi bernilai salah False maka statement/kondisi if tidak akan di-eksekusi. Dibawah ini adalah contoh penggunaan kondisi if pada Python #Kondisi if adalah kondisi yang akan dieksekusi oleh program jika bernilai benar atau TRUE nilai = 9 #jika kondisi benar/TRUE maka program akan mengeksekusi perintah dibawahnya if(nilai > 7): print(\"Sembilan Lebih Besar Dari Angka Tujuh\") # Kondisi Benar, Dieksekusi #jika kondisi salah/FALSE maka program tidak akan mengeksekusi perintah dibawahnya if(nilai > 10): print(\"Sembilan Lebih Besar Dari Angka Sepuluh\") # Kondisi Salah, Maka tidak tereksekusi Dari contoh diatas, jika program dijalankan maka akan mencetak string \"Sembilan Lebih Besar Dari Angka Tujuh\" sebanyak 1 kali yaitu pada if pertama. Di if kedua statement bernilai salah, jadi perintah print(\"Sembilan Lebih Besar Dari Angka Sepuluh\") tidak akan dieksekusi. Kondisi If Else Pengambilan keputusan (kondisi if else) tidak hanya digunakan untuk menentukan tindakan apa yang akan diambil sesuai dengan kondisi, tetapi juga digunakan untuk menentukan tindakan apa yang akan diambil/dijalankan jika kondisi tidak sesuai. Pada python ada beberapa statement/kondisi diantaranya adalah if, else dan elif Kondisi if digunakan untuk mengeksekusi kode jika kondisi bernilai benar. Kondisi if else adalah kondisi dimana jika pernyataan benar True maka kode dalam if akan dieksekusi, tetapi jika bernilai salah False maka akan mengeksekusi kode di dalam else. Dibawah ini adalah contoh penggunaan kondisi if else pada Python # Kondisi if else adalah jika kondisi bernilai TRUE maka akan dieksekusi pada if, # tetapi jika bernilai FALSE maka akan dieksekusi kode pada else nilai = 3 # Jika pernyataan pada if bernilai TRUE maka if akan dieksekusi, # tetapi jika FALSE kode pada else yang akan dieksekusi. if(nilai > 7): print(\"Selamat Anda Lulus\") else: print(\"Maaf Anda Tidak Lulus\") Pada contoh diatas, jika program dijalankan maka akan mencetak string \"Maaf Anda Tidak Lulus\" karena pernyataan pada if bernilai False Kondisi Elif Pengambilan keputusan (kondisi if elif) merupakan lanjutan/percabangan logika dari \"kondisi if\". Dengan elif kita bisa membuat kode program yang akan menyeleksi beberapa kemungkinan yang bisa terjadi. Hampir sama dengan kondisi \"else\", bedanya kondisi \"elif\" bisa banyak dan tidak hanya satu. Dibawah ini adalah contoh penggunaan kondisi elif pada Python #Contoh penggunaan kondisi elif hari_ini = \"Minggu\" if(hari_ini == \"Senin\"): print(\"Saya akan kuliah\") elif(hari_ini == \"Selasa\"): print(\"Saya akan kuliah\") elif(hari_ini == \"Rabu\"): print(\"Saya akan kuliah\") elif(hari_ini == \"Kamis\"): print(\"Saya akan kuliah\") elif(hari_ini == \"Jumat\"): print(\"Saya akan kuliah\") elif(hari_ini == \"Sabtu\"): print(\"Saya akan kuliah\") elif(hari_ini == \"Minggu\"): print(\"Saya akan libur\") Pada contoh diatas, jika program dijalankan maka akan mencetak string \"Saya akan libur\" . Edit tutorial ini Operator Python Loop Python","title":"Kondisi Python"},{"location":"tutorial/kondisi-if-else-python/#kondisi-if","text":"Pengambilan keputusan (kondisi if) digunakan untuk mengantisipasi kondisi yang terjadi saat jalanya program dan menentukan tindakan apa yang akan diambil sesuai dengan kondisi. Pada python ada beberapa statement/kondisi diantaranya adalah if , else dan elif Kondisi if digunakan untuk mengeksekusi kode jika kondisi bernilai benar True . Jika kondisi bernilai salah False maka statement/kondisi if tidak akan di-eksekusi. Dibawah ini adalah contoh penggunaan kondisi if pada Python #Kondisi if adalah kondisi yang akan dieksekusi oleh program jika bernilai benar atau TRUE nilai = 9 #jika kondisi benar/TRUE maka program akan mengeksekusi perintah dibawahnya if(nilai > 7): print(\"Sembilan Lebih Besar Dari Angka Tujuh\") # Kondisi Benar, Dieksekusi #jika kondisi salah/FALSE maka program tidak akan mengeksekusi perintah dibawahnya if(nilai > 10): print(\"Sembilan Lebih Besar Dari Angka Sepuluh\") # Kondisi Salah, Maka tidak tereksekusi Dari contoh diatas, jika program dijalankan maka akan mencetak string \"Sembilan Lebih Besar Dari Angka Tujuh\" sebanyak 1 kali yaitu pada if pertama. Di if kedua statement bernilai salah, jadi perintah print(\"Sembilan Lebih Besar Dari Angka Sepuluh\") tidak akan dieksekusi.","title":"Kondisi If"},{"location":"tutorial/kondisi-if-else-python/#kondisi-if-else","text":"Pengambilan keputusan (kondisi if else) tidak hanya digunakan untuk menentukan tindakan apa yang akan diambil sesuai dengan kondisi, tetapi juga digunakan untuk menentukan tindakan apa yang akan diambil/dijalankan jika kondisi tidak sesuai. Pada python ada beberapa statement/kondisi diantaranya adalah if, else dan elif Kondisi if digunakan untuk mengeksekusi kode jika kondisi bernilai benar. Kondisi if else adalah kondisi dimana jika pernyataan benar True maka kode dalam if akan dieksekusi, tetapi jika bernilai salah False maka akan mengeksekusi kode di dalam else. Dibawah ini adalah contoh penggunaan kondisi if else pada Python # Kondisi if else adalah jika kondisi bernilai TRUE maka akan dieksekusi pada if, # tetapi jika bernilai FALSE maka akan dieksekusi kode pada else nilai = 3 # Jika pernyataan pada if bernilai TRUE maka if akan dieksekusi, # tetapi jika FALSE kode pada else yang akan dieksekusi. if(nilai > 7): print(\"Selamat Anda Lulus\") else: print(\"Maaf Anda Tidak Lulus\") Pada contoh diatas, jika program dijalankan maka akan mencetak string \"Maaf Anda Tidak Lulus\" karena pernyataan pada if bernilai False","title":"Kondisi If Else"},{"location":"tutorial/kondisi-if-else-python/#kondisi-elif","text":"Pengambilan keputusan (kondisi if elif) merupakan lanjutan/percabangan logika dari \"kondisi if\". Dengan elif kita bisa membuat kode program yang akan menyeleksi beberapa kemungkinan yang bisa terjadi. Hampir sama dengan kondisi \"else\", bedanya kondisi \"elif\" bisa banyak dan tidak hanya satu. Dibawah ini adalah contoh penggunaan kondisi elif pada Python #Contoh penggunaan kondisi elif hari_ini = \"Minggu\" if(hari_ini == \"Senin\"): print(\"Saya akan kuliah\") elif(hari_ini == \"Selasa\"): print(\"Saya akan kuliah\") elif(hari_ini == \"Rabu\"): print(\"Saya akan kuliah\") elif(hari_ini == \"Kamis\"): print(\"Saya akan kuliah\") elif(hari_ini == \"Jumat\"): print(\"Saya akan kuliah\") elif(hari_ini == \"Sabtu\"): print(\"Saya akan kuliah\") elif(hari_ini == \"Minggu\"): print(\"Saya akan libur\") Pada contoh diatas, jika program dijalankan maka akan mencetak string \"Saya akan libur\" . Edit tutorial ini Operator Python Loop Python","title":"Kondisi Elif"},{"location":"tutorial/list-python/","text":"Dalam bahasa pemrograman Python, struktur data yang paling dasar adalah urutan atau lists. Setiap elemen-elemen berurutan akan diberi nomor posisi atau indeksnya. Indeks pertama dalam list adalah nol, indeks kedua adalah satu dan seterusnya. Python memiliki enam jenis urutan built-in, namun yang paling umum adalah list dan tuple. Ada beberapa hal yang dapat Anda lakukan dengan semua jenis list. Operasi ini meliputi pengindeksan, pengiris, penambahan, perbanyak, dan pengecekan keanggotaan. Selain itu, Python memiliki fungsi built-in untuk menemukan panjang list dan untuk menemukan elemen terbesar dan terkecilnya. Membuat List Python List adalah tipe data yang paling serbaguna yang tersedia dalam bahasa Python, yang dapat ditulis sebagai daftar nilai yang dipisahkan koma (item) antara tanda kurung siku. Hal penting tentang daftar adalah item dalam list tidak boleh sama jenisnya. Membuat list sangat sederhana, tinggal memasukkan berbagai nilai yang dipisahkan koma di antara tanda kurung siku. Dibawah ini adalah contoh sederhana pembuatan list dalam bahasa Python. #Contoh sederhana pembuatan list pada bahasa pemrograman python list1 = ['kimia', 'fisika', 1993, 2017] list2 = [1, 2, 3, 4, 5 ] list3 = [\"a\", \"b\", \"c\", \"d\"] Akses Nilai Dalam List Python Untuk mengakses nilai dalam list python, gunakan tanda kurung siku untuk mengiris beserta indeks atau indeks untuk mendapatkan nilai yang tersedia pada indeks tersebut. Berikut adalah contoh cara mengakses nilai di dalam list python : #Cara mengakses nilai di dalam list Python list1 = ['fisika', 'kimia', 1993, 2017] list2 = [1, 2, 3, 4, 5, 6, 7 ] print (\"list1[0]: \", list1[0]) print (\"list2[1:5]: \", list2[1:5]) Setelah Anda mengeksekusi kode diatas, hasilnya akan seperti dibawah ini : list1[0]: fisika list2[1:5]: [2, 3, 4, 5] Update Nilai Dalam List Python Anda dapat memperbarui satu atau beberapa nilai di dalam list dengan memberikan potongan di sisi kiri operator penugasan, dan Anda dapat menambahkan nilai ke dalam list dengan metode append (). Sebagai contoh : list = ['fisika', 'kimia', 1993, 2017] print (\"Nilai ada pada index 2 : \", list[2]) list[2] = 2001 print (\"Nilai baru ada pada index 2 : \", list[2]) Hapus Nilai Dalam List Python Untuk menghapus nilai di dalam list python, Anda dapat menggunakan salah satu pernyataan del jika Anda tahu persis elemen yang Anda hapus. Anda dapat menggunakan metode remove() jika Anda tidak tahu persis item mana yang akan dihapus. Sebagai contoh : #Contoh cara menghapus nilai pada list python list = ['fisika', 'kimia', 1993, 2017] print (list) del list[2] print (\"Setelah dihapus nilai pada index 2 : \", list) Operasi Dasar Pada List Python List Python merespons operator + dan * seperti string; Itu artinya penggabungan dan pengulangan di sini juga berlaku, kecuali hasilnya adalah list baru, bukan sebuah String. Sebenarnya, list merespons semua operasi urutan umum yang kami gunakan pada String di bab sebelumnya. Dibawah ini adalah tabel daftar operasi dasar pada list python. Python Expression Hasil Penjelasan len([1, 2, 3, 4]) 4 Length [1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] Concatenation ['Halo!'] * 4 ['Halo!', 'Halo!', 'Halo!', 'Halo!'] Repetition 2 in [1, 2, 3] True Membership for x in [1,2,3] : print (x,end = ' ') 1 2 3 Iteration Indexing, Slicing dan Matrix Pada List Python Karena list adalah urutan, pengindeksan dan pengiris bekerja dengan cara yang sama untuk list seperti yang mereka lakukan untuk String. Dengan asumsi input berikut : L = ['C++'', 'Java', 'Python'] Python Expression Hasil Penjelasan L[2] 'Python' Offset mulai dari nol L[-2] 'Java' Negatif: hitung dari kanan [1:] ['Java', 'Python'] Slicing mengambil bagian Method dan Fungsi Build-in Pada List Python Python menyertakan fungsi built-in sebagai berikut : Python Function Penjelasan cmp(list1, list2) # Tidak lagi tersedia dengan Python 3 len(list) Memberikan total panjang list. max(list) Mengembalikan item dari list dengan nilai maks. min(list) Mengembalikan item dari list dengan nilai min. list(seq) Mengubah tuple menjadi list. Python menyertakan methods built-in sebagai berikut Python Methods Penjelasan list.append(obj) Menambahkan objek obj ke list list.count(obj) Jumlah pengembalian berapa kali obj terjadi dalam list list.extend(seq) Tambahkan isi seq ke list list.index(obj) Mengembalikan indeks terendah dalam list yang muncul obj list.insert(index, obj) Sisipkan objek obj ke dalam list di indeks offset list.pop(obj = list[-1]) Menghapus dan mengembalikan objek atau obj terakhir dari list list.remove(obj) Removes object obj from list list.reverse() Membalik list objek di tempat list.sort([func]) Urutkan objek list, gunakan compare func jika diberikan Edit tutorial ini String Python Tuple Python","title":"List Python"},{"location":"tutorial/list-python/#membuat-list-python","text":"List adalah tipe data yang paling serbaguna yang tersedia dalam bahasa Python, yang dapat ditulis sebagai daftar nilai yang dipisahkan koma (item) antara tanda kurung siku. Hal penting tentang daftar adalah item dalam list tidak boleh sama jenisnya. Membuat list sangat sederhana, tinggal memasukkan berbagai nilai yang dipisahkan koma di antara tanda kurung siku. Dibawah ini adalah contoh sederhana pembuatan list dalam bahasa Python. #Contoh sederhana pembuatan list pada bahasa pemrograman python list1 = ['kimia', 'fisika', 1993, 2017] list2 = [1, 2, 3, 4, 5 ] list3 = [\"a\", \"b\", \"c\", \"d\"]","title":"Membuat List Python"},{"location":"tutorial/list-python/#akses-nilai-dalam-list-python","text":"Untuk mengakses nilai dalam list python, gunakan tanda kurung siku untuk mengiris beserta indeks atau indeks untuk mendapatkan nilai yang tersedia pada indeks tersebut. Berikut adalah contoh cara mengakses nilai di dalam list python : #Cara mengakses nilai di dalam list Python list1 = ['fisika', 'kimia', 1993, 2017] list2 = [1, 2, 3, 4, 5, 6, 7 ] print (\"list1[0]: \", list1[0]) print (\"list2[1:5]: \", list2[1:5]) Setelah Anda mengeksekusi kode diatas, hasilnya akan seperti dibawah ini : list1[0]: fisika list2[1:5]: [2, 3, 4, 5]","title":"Akses Nilai Dalam List Python"},{"location":"tutorial/list-python/#update-nilai-dalam-list-python","text":"Anda dapat memperbarui satu atau beberapa nilai di dalam list dengan memberikan potongan di sisi kiri operator penugasan, dan Anda dapat menambahkan nilai ke dalam list dengan metode append (). Sebagai contoh : list = ['fisika', 'kimia', 1993, 2017] print (\"Nilai ada pada index 2 : \", list[2]) list[2] = 2001 print (\"Nilai baru ada pada index 2 : \", list[2])","title":"Update Nilai Dalam List Python"},{"location":"tutorial/list-python/#hapus-nilai-dalam-list-python","text":"Untuk menghapus nilai di dalam list python, Anda dapat menggunakan salah satu pernyataan del jika Anda tahu persis elemen yang Anda hapus. Anda dapat menggunakan metode remove() jika Anda tidak tahu persis item mana yang akan dihapus. Sebagai contoh : #Contoh cara menghapus nilai pada list python list = ['fisika', 'kimia', 1993, 2017] print (list) del list[2] print (\"Setelah dihapus nilai pada index 2 : \", list)","title":"Hapus Nilai Dalam List Python"},{"location":"tutorial/list-python/#operasi-dasar-pada-list-python","text":"List Python merespons operator + dan * seperti string; Itu artinya penggabungan dan pengulangan di sini juga berlaku, kecuali hasilnya adalah list baru, bukan sebuah String. Sebenarnya, list merespons semua operasi urutan umum yang kami gunakan pada String di bab sebelumnya. Dibawah ini adalah tabel daftar operasi dasar pada list python. Python Expression Hasil Penjelasan len([1, 2, 3, 4]) 4 Length [1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] Concatenation ['Halo!'] * 4 ['Halo!', 'Halo!', 'Halo!', 'Halo!'] Repetition 2 in [1, 2, 3] True Membership for x in [1,2,3] : print (x,end = ' ') 1 2 3 Iteration","title":"Operasi Dasar Pada List Python"},{"location":"tutorial/list-python/#indexing-slicing-dan-matrix-pada-list-python","text":"Karena list adalah urutan, pengindeksan dan pengiris bekerja dengan cara yang sama untuk list seperti yang mereka lakukan untuk String. Dengan asumsi input berikut : L = ['C++'', 'Java', 'Python'] Python Expression Hasil Penjelasan L[2] 'Python' Offset mulai dari nol L[-2] 'Java' Negatif: hitung dari kanan [1:] ['Java', 'Python'] Slicing mengambil bagian","title":"Indexing, Slicing dan Matrix Pada List Python"},{"location":"tutorial/list-python/#method-dan-fungsi-build-in-pada-list-python","text":"Python menyertakan fungsi built-in sebagai berikut : Python Function Penjelasan cmp(list1, list2) # Tidak lagi tersedia dengan Python 3 len(list) Memberikan total panjang list. max(list) Mengembalikan item dari list dengan nilai maks. min(list) Mengembalikan item dari list dengan nilai min. list(seq) Mengubah tuple menjadi list. Python menyertakan methods built-in sebagai berikut Python Methods Penjelasan list.append(obj) Menambahkan objek obj ke list list.count(obj) Jumlah pengembalian berapa kali obj terjadi dalam list list.extend(seq) Tambahkan isi seq ke list list.index(obj) Mengembalikan indeks terendah dalam list yang muncul obj list.insert(index, obj) Sisipkan objek obj ke dalam list di indeks offset list.pop(obj = list[-1]) Menghapus dan mengembalikan objek atau obj terakhir dari list list.remove(obj) Removes object obj from list list.reverse() Membalik list objek di tempat list.sort([func]) Urutkan objek list, gunakan compare func jika diberikan Edit tutorial ini String Python Tuple Python","title":"Method dan Fungsi Build-in Pada List Python"},{"location":"tutorial/loop-python/","text":"Secara umum, pernyataan pada bahasa pemrograman akan dieksekusi secara berurutan. Pernyataan pertama dalam sebuah fungsi dijalankan pertama, diikuti oleh yang kedua, dan seterusnya. Tetapi akan ada situasi dimana Anda harus menulis banyak kode, dimana kode tersebut sangat banyak. Jika dilakukan secara manual maka Anda hanya akan membuang-buang tenaga dengan menulis beratus-ratus bahkan beribu-ribu kode. Untuk itu Anda perlu menggunakan pengulangan di dalam bahasa pemrograman Python. Di dalam bahasa pemrograman Python pengulangan dibagi menjadi 3 bagian, yaitu : While Loop For Loop Nested Loop While Loop Pengulangan While Loop di dalam bahasa pemrograman Python dieksesusi statement berkali-kali selama kondisi bernilai benar atau True . Dibawah ini adalah contoh penggunaan pengulangan While Loop. #Contoh penggunaan While Loop #Catatan: Penentuan ruang lingkup di Python bisa menggunakan tab alih-alih menggunakan tanda kurung count = 0 while (count < 9): print (\"The count is: \", count) count = count + 1 print (\"Good bye!\") For Loop Pengulangan for pada Python memiliki kemampuan untuk mengulangi item dari urutan apapun, seperti list atau string . Dibawah ini adalah contoh penggunaan pengulangan For Loop. #Contoh pengulangan for sederhana angka = [1,2,3,4,5] for x in angka: print(x) #Contoh pengulangan for buah = [\"nanas\", \"apel\", \"jeruk\"] for makanan in buah: print (\"Saya suka makan\", makanan) Nested Loop Bahasa pemrograman Python memungkinkan penggunaan satu lingkaran di dalam loop lain. Bagian berikut menunjukkan beberapa contoh untuk menggambarkan konsep tersebut. Dibawah ini adalah contoh penggunaan Nested Loop. #Contoh penggunaan Nested Loop #Catatan: Penggunaan modulo pada kondisional mengasumsikan nilai selain nol sebagai True(benar) dan nol sebagai False(salah) i = 2 while(i < 100): j = 2 while(j <= (i/j)): if not(i%j): break j = j + 1 if (j > i/j) : print(i, \" is prime\") i = i + 1 print(\"Good bye!\") Edit tutorial ini Kondisi Python Number Python","title":"Loop Python"},{"location":"tutorial/loop-python/#while-loop","text":"Pengulangan While Loop di dalam bahasa pemrograman Python dieksesusi statement berkali-kali selama kondisi bernilai benar atau True . Dibawah ini adalah contoh penggunaan pengulangan While Loop. #Contoh penggunaan While Loop #Catatan: Penentuan ruang lingkup di Python bisa menggunakan tab alih-alih menggunakan tanda kurung count = 0 while (count < 9): print (\"The count is: \", count) count = count + 1 print (\"Good bye!\")","title":"While Loop"},{"location":"tutorial/loop-python/#for-loop","text":"Pengulangan for pada Python memiliki kemampuan untuk mengulangi item dari urutan apapun, seperti list atau string . Dibawah ini adalah contoh penggunaan pengulangan For Loop. #Contoh pengulangan for sederhana angka = [1,2,3,4,5] for x in angka: print(x) #Contoh pengulangan for buah = [\"nanas\", \"apel\", \"jeruk\"] for makanan in buah: print (\"Saya suka makan\", makanan)","title":"For Loop"},{"location":"tutorial/loop-python/#nested-loop","text":"Bahasa pemrograman Python memungkinkan penggunaan satu lingkaran di dalam loop lain. Bagian berikut menunjukkan beberapa contoh untuk menggambarkan konsep tersebut. Dibawah ini adalah contoh penggunaan Nested Loop. #Contoh penggunaan Nested Loop #Catatan: Penggunaan modulo pada kondisional mengasumsikan nilai selain nol sebagai True(benar) dan nol sebagai False(salah) i = 2 while(i < 100): j = 2 while(j <= (i/j)): if not(i%j): break j = j + 1 if (j > i/j) : print(i, \" is prime\") i = i + 1 print(\"Good bye!\") Edit tutorial ini Kondisi Python Number Python","title":"Nested Loop"},{"location":"tutorial/menjalankan-python/","text":"Untuk menjalankan Python ada banyak cara yang bisa dilakukan. Anda bisa menggunakan shell , terminal atau menggunakan IDE (Integrated Development Environment) . Di bawah ini adalah langkah-langkah menjalankan Python dengan cara yang paling mudah. Linux Buka terminal CTRL + ALT + T Ketik python maka Anda akan masuk ke Python shell. Tuliskan script Python Anda, contoh: print(\"Selamat datang di Python\") . jika sudah tekan tombol ENTER , dan script Python akan dijalankan/eksekusi. Untuk keluar dari Python shell ketik exit() atau Gunakan teks editor, misalnya gedit. Buat file baru, dan ketikan script python Anda, contoh: print(\"Selamat datang di Python\") . Save As dengan ekstensi .py (contoh: cetak.py ). Jalankan file dengan menggunakan Terminal. Buka terminal CTRL + ALT + T . Masuk ke direktori dimana file Python Anda disimpan (contoh: cd /Users/admin/Desktop/ ). Jalankan script Python dengan menggunakan python diikuti dengan nama file (contoh: python cetak.py ). Script Python Anda akan dieksekusi/dijalankan. Windows Menggunakan Shell Buka IDLE (python shell di windows), Anda bisa mencarinya di tombol START . Tuliskan script Python Anda, contoh: print(\"Selamat datang di Python\") . jika sudah tekan tombol ENTER , dan script Python akan dijalankan/eksekusi. Untuk keluar dari Python shell ketik exit() Menggunakan Script Editor Untuk menjalankan script yang disimpan dalam file, buka IDLE (python shell di windows), Anda bisa mencarinya di tombol START . Klik menu File - New File Tulis script Python pada window yang muncul, contoh: print(\"Belajar Python\") print(\"di belajarpython.com\") Simpan script lewat menu File - Save Jalankan program dengan klik menu Run - Run Module Mac OS Buka terminal. Ketik python maka Anda akan masuk ke Python shell. Tuliskan script Python Anda, contoh: print(\"Selamat datang di Python\") . jika sudah tekan tombol ENTER , dan script Python akan dijalankan/eksekusi. Untuk keluar dari Python shell ketik exit() atau Gunakan teks editor. Buat file baru, dan ketikan script python Anda, contoh: print(\"Selamat datang di Python\") . Save As dengan ekstensi .py (contoh: cetak.py ). Jalankan file dengan menggunakan Terminal. Buka terminal CTRL + ALT + T Masuk ke direktori dimana file Python Anda disimpan (contoh: cd /Users/admin/Desktop/ ). Jalankan script Python dengan menggunakan python diikuti dengan nama file (contoh: python cetak.py ). Script Python Anda akan dieksekusi/dijalankan. Edit tutorial ini Instalasi Python Hello World Python","title":"Menjalankan Python"},{"location":"tutorial/menjalankan-python/#linux","text":"Buka terminal CTRL + ALT + T Ketik python maka Anda akan masuk ke Python shell. Tuliskan script Python Anda, contoh: print(\"Selamat datang di Python\") . jika sudah tekan tombol ENTER , dan script Python akan dijalankan/eksekusi. Untuk keluar dari Python shell ketik exit() atau Gunakan teks editor, misalnya gedit. Buat file baru, dan ketikan script python Anda, contoh: print(\"Selamat datang di Python\") . Save As dengan ekstensi .py (contoh: cetak.py ). Jalankan file dengan menggunakan Terminal. Buka terminal CTRL + ALT + T . Masuk ke direktori dimana file Python Anda disimpan (contoh: cd /Users/admin/Desktop/ ). Jalankan script Python dengan menggunakan python diikuti dengan nama file (contoh: python cetak.py ). Script Python Anda akan dieksekusi/dijalankan.","title":"Linux"},{"location":"tutorial/menjalankan-python/#windows","text":"","title":"Windows"},{"location":"tutorial/menjalankan-python/#menggunakan-shell","text":"Buka IDLE (python shell di windows), Anda bisa mencarinya di tombol START . Tuliskan script Python Anda, contoh: print(\"Selamat datang di Python\") . jika sudah tekan tombol ENTER , dan script Python akan dijalankan/eksekusi. Untuk keluar dari Python shell ketik exit()","title":"Menggunakan Shell"},{"location":"tutorial/menjalankan-python/#menggunakan-script-editor","text":"Untuk menjalankan script yang disimpan dalam file, buka IDLE (python shell di windows), Anda bisa mencarinya di tombol START . Klik menu File - New File Tulis script Python pada window yang muncul, contoh: print(\"Belajar Python\") print(\"di belajarpython.com\") Simpan script lewat menu File - Save Jalankan program dengan klik menu Run - Run Module","title":"Menggunakan Script Editor"},{"location":"tutorial/menjalankan-python/#mac-os","text":"Buka terminal. Ketik python maka Anda akan masuk ke Python shell. Tuliskan script Python Anda, contoh: print(\"Selamat datang di Python\") . jika sudah tekan tombol ENTER , dan script Python akan dijalankan/eksekusi. Untuk keluar dari Python shell ketik exit() atau Gunakan teks editor. Buat file baru, dan ketikan script python Anda, contoh: print(\"Selamat datang di Python\") . Save As dengan ekstensi .py (contoh: cetak.py ). Jalankan file dengan menggunakan Terminal. Buka terminal CTRL + ALT + T Masuk ke direktori dimana file Python Anda disimpan (contoh: cd /Users/admin/Desktop/ ). Jalankan script Python dengan menggunakan python diikuti dengan nama file (contoh: python cetak.py ). Script Python Anda akan dieksekusi/dijalankan. Edit tutorial ini Instalasi Python Hello World Python","title":"Mac OS"},{"location":"tutorial/modul-python/","text":"Modul memungkinkan Anda mengatur kode Python secara logis. Mengelompokkan kode terkait ke dalam modul membuat kode lebih mudah dipahami dan digunakan. Modul adalah objek Python dengan atribut yang diberi nama yang bisa Anda bind dan dijadikan referensi. Secara sederhana modul adalah file yang terdiri dari kode Python. Modul dapat mendefinisikan fungsi, kelas dan variabel. Modul juga bisa menyertakan kode yang bisa dijalankan \"runable\". Berikut adalah contoh modul sederhana pada Python : def print_func( par ): print \"Halo : \", par return Import Statement Anda dapat menggunakan file sumber Python apapun sebagai modul dengan mengeksekusi pernyataan impor di file sumber Python lainnya. Impornya memiliki sintaks berikut. Ketika interpreter menemukan sebuah pernyataan import, ia mengimpor modul jika modul tersebut ada di jalur pencarian. Jalur pencarian adalah daftar direktori yang ditafsirkan juru bahasa sebelum mengimpor modul. Misalnya, untuk mengimpor modul hello.py, Anda perlu meletakkan perintah berikut di bagian atas script. # Import module support import support # Anda bisa memanggil fungsi defined sebagai berikut support.print_func(\"Andy\") Edit tutorial ini Fungsi Python File I/O Python","title":"Modul Python"},{"location":"tutorial/modul-python/#import-statement","text":"Anda dapat menggunakan file sumber Python apapun sebagai modul dengan mengeksekusi pernyataan impor di file sumber Python lainnya. Impornya memiliki sintaks berikut. Ketika interpreter menemukan sebuah pernyataan import, ia mengimpor modul jika modul tersebut ada di jalur pencarian. Jalur pencarian adalah daftar direktori yang ditafsirkan juru bahasa sebelum mengimpor modul. Misalnya, untuk mengimpor modul hello.py, Anda perlu meletakkan perintah berikut di bagian atas script. # Import module support import support # Anda bisa memanggil fungsi defined sebagai berikut support.print_func(\"Andy\") Edit tutorial ini Fungsi Python File I/O Python","title":"Import Statement"},{"location":"tutorial/networking-python/","text":"Python menyediakan dua tingkat akses ke layanan jaringan. Pada tingkat rendah, Anda dapat mengakses dukungan soket dasar dalam sistem operasi yang mendasarinya, yang memungkinkan Anda untuk mengimplementasikan klien dan server untuk kedua protokol berorientasi koneksi dan tanpa sambungan. Python juga memiliki pustaka yang menyediakan akses tingkat lebih tinggi ke protokol jaringan tingkat aplikasi tertentu, seperti FTP, HTTP, dan seterusnya. Bab ini memberi Anda pemahaman tentang konsep paling terkenal dalam Networking - Socket Programming. Apa itu Socket? Soket adalah titik akhir dari saluran komunikasi dua arah. Soket dapat berkomunikasi dalam suatu proses, antara proses pada mesin yang sama, atau antara proses di berbagai benua. Soket dapat diimplementasikan melalui sejumlah jenis saluran yang berbeda: soket domain Unix, TCP, UDP, dan sebagainya. Pustaka socket menyediakan kelas khusus untuk menangani transportasi umum serta antarmuka umum untuk menangani sisanya. Modul Socket Untuk membuat soket, Anda harus menggunakan fungsi socket.socket () yang tersedia dalam modul soket, yang memiliki sintaks umum s = socket.socket (socket_family, socket_type, protocol=0) Server Socket Method Method Penjelasan s.bind() This method binds address (hostname, port number pair) to socket. s.listen() This method sets up and start TCP listener. s.accept() This passively accept TCP client connection, waiting until connection arrives (blocking). Client Socket Method Method Penjelasan s.connect() This method actively initiates TCP server connection. General Method Socket Method Penjelasan s.recv() This method receives TCP message s.send() This method transmits TCP message s.recvfrom() This method receives UDP message s.sendto() This method transmits UDP message s.close() This method closes socket socket.gethostname() Returns the hostname. #!/usr/bin/python # This is server.py file import socket # Import socket module s = socket.socket() # Create a socket object host = socket.gethostname() # Get local machine name port = 12345 # Reserve a port for your service. s.bind((host, port)) # Bind to the port s.listen(5) # Now wait for client connection. while True: c, addr = s.accept() # Establish connection with client. print 'Got connection from', addr c.send('Thank you for connecting') c.close() # Close the connection Server Sederhana Untuk menulis server Internet, kami menggunakan fungsi soket yang tersedia di modul soket untuk membuat objek soket. Objek soket kemudian digunakan untuk memanggil fungsi lain untuk menyiapkan server soket. Sekarang sebut bind(hostname,port) berfungsi untuk menentukan port untuk layanan Anda pada host yang diberikan. Selanjutnya, panggil metode penerimaan objek yang dikembalikan. Metode ini menunggu sampai klien terhubung ke port yang Anda tentukan, dan kemudian mengembalikan objek koneksi yang mewakili koneksi ke klien itu. Client Sederhana Mari kita menulis program klien yang sangat sederhana yang membuka koneksi ke port yang diberikan 12345 dan host yang diberikan. Ini sangat sederhana untuk membuat klien soket menggunakan fungsi modul soket Python. Socket.connect (hosname, port) membuka koneksi TCP ke hostname pada port. Setelah Anda memiliki soket terbuka, Anda dapat membaca darinya seperti objek IO apa pun. Setelah selesai, jangan lupa untuk menutupnya, karena Anda akan menutup file. Kode berikut adalah klien yang sangat sederhana yang terhubung ke host dan port yang diberikan, membaca data yang tersedia dari soket, dan kemudian keluar #!/usr/bin/python # This is client.py file import socket # Import socket module s = socket.socket() # Create a socket object host = socket.gethostname() # Get local machine name port = 12345 # Reserve a port for your service. s.connect((host, port)) print s.recv(1024) s.close # Close the socket when done Sekarang jalankan server.py ini di latar belakang dan kemudian jalankan di atas client.py untuk melihat hasilnya. Jalankan server. python server.py & Setelah server berjalan lanjutkan Jalankan client: python client.py Hasilnya akan seperti ini : Got connection from ('127.0.0.1', 48437) Thank you for connecting Modul Internet pada Python Berikut tabel daftar beberapa modul penting dalam pemrograman Jaringan / Internet Python. Protocol Common function Port No Python module HTTP Web pages 80 httplib, urllib, xmlrpclib NNTP Usenet news 119 nntplib FTP Transfer file 20 ftplib, urllib SMTP Mengirim email 25 smtplib POP3 Fetching email 110 poplib IMAP4 Fetching email 143 imaplib Telnet Command lines 23 telnetlib Gopher Document transfers 70 gopherlib, urllib Edit tutorial ini Akses Database Python Pengembangan Web Python","title":"Networking Python"},{"location":"tutorial/networking-python/#apa-itu-socket","text":"Soket adalah titik akhir dari saluran komunikasi dua arah. Soket dapat berkomunikasi dalam suatu proses, antara proses pada mesin yang sama, atau antara proses di berbagai benua. Soket dapat diimplementasikan melalui sejumlah jenis saluran yang berbeda: soket domain Unix, TCP, UDP, dan sebagainya. Pustaka socket menyediakan kelas khusus untuk menangani transportasi umum serta antarmuka umum untuk menangani sisanya.","title":"Apa itu Socket?"},{"location":"tutorial/networking-python/#modul-socket","text":"Untuk membuat soket, Anda harus menggunakan fungsi socket.socket () yang tersedia dalam modul soket, yang memiliki sintaks umum s = socket.socket (socket_family, socket_type, protocol=0)","title":"Modul Socket"},{"location":"tutorial/networking-python/#server-socket-method","text":"Method Penjelasan s.bind() This method binds address (hostname, port number pair) to socket. s.listen() This method sets up and start TCP listener. s.accept() This passively accept TCP client connection, waiting until connection arrives (blocking).","title":"Server Socket Method"},{"location":"tutorial/networking-python/#client-socket-method","text":"Method Penjelasan s.connect() This method actively initiates TCP server connection.","title":"Client Socket Method"},{"location":"tutorial/networking-python/#general-method-socket","text":"Method Penjelasan s.recv() This method receives TCP message s.send() This method transmits TCP message s.recvfrom() This method receives UDP message s.sendto() This method transmits UDP message s.close() This method closes socket socket.gethostname() Returns the hostname. #!/usr/bin/python # This is server.py file import socket # Import socket module s = socket.socket() # Create a socket object host = socket.gethostname() # Get local machine name port = 12345 # Reserve a port for your service. s.bind((host, port)) # Bind to the port s.listen(5) # Now wait for client connection. while True: c, addr = s.accept() # Establish connection with client. print 'Got connection from', addr c.send('Thank you for connecting') c.close() # Close the connection","title":"General Method Socket"},{"location":"tutorial/networking-python/#server-sederhana","text":"Untuk menulis server Internet, kami menggunakan fungsi soket yang tersedia di modul soket untuk membuat objek soket. Objek soket kemudian digunakan untuk memanggil fungsi lain untuk menyiapkan server soket. Sekarang sebut bind(hostname,port) berfungsi untuk menentukan port untuk layanan Anda pada host yang diberikan. Selanjutnya, panggil metode penerimaan objek yang dikembalikan. Metode ini menunggu sampai klien terhubung ke port yang Anda tentukan, dan kemudian mengembalikan objek koneksi yang mewakili koneksi ke klien itu.","title":"Server Sederhana"},{"location":"tutorial/networking-python/#client-sederhana","text":"Mari kita menulis program klien yang sangat sederhana yang membuka koneksi ke port yang diberikan 12345 dan host yang diberikan. Ini sangat sederhana untuk membuat klien soket menggunakan fungsi modul soket Python. Socket.connect (hosname, port) membuka koneksi TCP ke hostname pada port. Setelah Anda memiliki soket terbuka, Anda dapat membaca darinya seperti objek IO apa pun. Setelah selesai, jangan lupa untuk menutupnya, karena Anda akan menutup file. Kode berikut adalah klien yang sangat sederhana yang terhubung ke host dan port yang diberikan, membaca data yang tersedia dari soket, dan kemudian keluar #!/usr/bin/python # This is client.py file import socket # Import socket module s = socket.socket() # Create a socket object host = socket.gethostname() # Get local machine name port = 12345 # Reserve a port for your service. s.connect((host, port)) print s.recv(1024) s.close # Close the socket when done Sekarang jalankan server.py ini di latar belakang dan kemudian jalankan di atas client.py untuk melihat hasilnya.","title":"Client Sederhana"},{"location":"tutorial/networking-python/#jalankan-server","text":"python server.py & Setelah server berjalan lanjutkan","title":"Jalankan server."},{"location":"tutorial/networking-python/#jalankan-client","text":"python client.py Hasilnya akan seperti ini : Got connection from ('127.0.0.1', 48437) Thank you for connecting","title":"Jalankan client:"},{"location":"tutorial/networking-python/#modul-internet-pada-python","text":"Berikut tabel daftar beberapa modul penting dalam pemrograman Jaringan / Internet Python. Protocol Common function Port No Python module HTTP Web pages 80 httplib, urllib, xmlrpclib NNTP Usenet news 119 nntplib FTP Transfer file 20 ftplib, urllib SMTP Mengirim email 25 smtplib POP3 Fetching email 110 poplib IMAP4 Fetching email 143 imaplib Telnet Command lines 23 telnetlib Gopher Document transfers 70 gopherlib, urllib Edit tutorial ini Akses Database Python Pengembangan Web Python","title":"Modul Internet pada Python"},{"location":"tutorial/number-python/","text":"Number adalah tipe data Python yang menyimpan nilai numerik. Number adalah tipe data yang tidak berubah. Ini berarti, mengubah nilai dari sejumlah tipe data akan menghasilkan objek yang baru dialokasikan. Objek Number dibuat saat Anda memberikan nilai pada-nya. Sebagai contoh : angkaPertama = 1 angkaKedua = 33 Python mendukung beberapa tipe data Number diantaranya : Int Float Complex Berikut ini adalah beberapa contoh dari Tipe data Number pada Python : Int Float Complex 20 0.1 3.14j 300 1.20 35.j -13 -41.2 3.12e-12j 020 32.23+e123 .873j -0103 -92. -.123+0J -0x212 -32.52e10 3e+123J 0x56 60.2-E13 4.31e-4j Konversi Tipe Data Number Python Pada Python Anda bisa mengkonversi tipe data dengan menggunakan fungsi. Dibawah ini adalah beberapa fungsi untuk mengkonversi tipe data number Python. int(x) untuk meng-konversi x menjadi plain integer. long(x) untuk meng-konversi x menjadi long integer. float(x) untuk meng-konversi x menjadi floating point number. complex(x) untuk meng-konversi x menjadi complex number dengna real part x dan imaginary part zero. complex(x, y) untuk meng-konversi x dan y menjadi complex number dengan real part x dan imaginary part y. x dan numeric expressions y. Fungsi Matematika Python Pada bahasa pemrograman Python terdapat fungsi untuk melakukan perhitungan matematis, berikut adalah daftarnya : Nama Penggunaan Penjelasan Absolute abs(x) Nilai absolut dari x:(positive) jarak antara x and 0. Ceiling ceil(x) Ceiling dari x: integer terkecil yang kurang dari x. Cmp cmp(x, y) -1 if x < y, 0 if x == y, or 1 if x > y. Tidak berlaku lagi dengan Python 3. Sebaliknya gunakan return (x>y)-(x Eksponen exp(x) Nilai eksponen dari x: ex Fabs fabs(x) Nilai absolut dari x. Floor floor(x) Nilai dasar dari x: internet terbesar tidak lebih besar dari x. Log log(x) Logaritma dari x, untuk x > 0. Log 10 log10(x) Basis 10 logaritma dari x, untuk x > 0. Max max(x1, x2,...) Argumen terbesar: Nilai terdekat dengan tak terhingga positif Min min(x1, x2,...) Argumen terkecil: nilai yang paling mendekati tak berhingga negatif. Modf modf(x) Bagian pecahan dan bilangan bulat dari x dalam tupel dua item. Kedua bagian memiliki tanda yang sama dengan x. Bagian integer dikembalikan sebagai float. Pow pow(x, y) Nilai x ** y. Round round(x [,n]) X dibulatkan menjadi n digit dari titik desimal. Putaran Python jauh dari nol sebagai tie-breaker: round (0.5) adalah 1.0 dan round (-0.5) adalah -1.0. Akar Kuadrat sqrt(x) Akar kuadrat x untuk x> 0. Fungsi Nomor Acak Python Nomor acak digunakan untuk aplikasi permainan, simulasi, pengujian, keamanan, dan privasi. Python mencakup fungsi berikut yang umum digunakan. Berikut adalah daftarnya : Nama Penggunaan Penjelasan Choice choice(seq) Item acak dari list, tuple, atau string. RandRange randrange ([start,] stop [,step]) Elemen yang dipilih secara acak dari jangkauan (start, stop, step). Random random() A random float r, sehingga 0 kurang dari atau sama dengan r dan r kurang dari 1 Seed seed([x]) Menetapkan nilai awal integer yang digunakan dalam menghasilkan bilangan acak. Panggil fungsi ini sebelum memanggil fungsi modul acak lainnya. Tidak ada pengembalian Shuffle shuffle(lst) Mengacak daftar dari daftar di tempat. Tidak ada pengembalian Floor floor(x) The floor of x: the largest integer not greater than x. Uniform uniform(x, y) Sebuah float acak r, sedemikian rupa sehingga x kurang dari atau sama dengan r dan r kurang dari y. Fungsi Trigonometri Python Python mencakup fungsi berikut yang melakukan perhitungan trigonometri. Berikut adalah daftarnya : Nama Penggunaan Penjelasan Penjelasan Acos acos(x) Kembalikan kosinus x, di radian. Asin asin(x) Kembalikan busur sinus x, dalam radian. Atan atan(x) Kembalikan busur singgung x, di radian. Atan 2 atan2(y, x) Kembali atan (y / x), di radian. Kosinus cos(x) Kembalikan kosinus x radian. Hypot hypot(x, y) Kembalikan norma Euclidean, sqrt (x _ x + y _ y). Sin sin(x) Kembalikan sinus dari x radian. Tan tan(x) Kembalikan tangen x radian. Derajat degrees(x) Mengonversi sudut x dari radian ke derajat. Radian radians(x) Mengonversi sudut x dari derajat ke radian. Konstanta Matematika Python Modul ini juga mendefinisikan dua konstanta matematika. Berikut adalah daftarnya : Nama Penggunaan Penjelasan Pi pi Konstanta Pi matematika e e Konstanta e matematika Edit tutorial ini Loop Python String Python","title":"Number Python"},{"location":"tutorial/number-python/#konversi-tipe-data-number-python","text":"Pada Python Anda bisa mengkonversi tipe data dengan menggunakan fungsi. Dibawah ini adalah beberapa fungsi untuk mengkonversi tipe data number Python. int(x) untuk meng-konversi x menjadi plain integer. long(x) untuk meng-konversi x menjadi long integer. float(x) untuk meng-konversi x menjadi floating point number. complex(x) untuk meng-konversi x menjadi complex number dengna real part x dan imaginary part zero. complex(x, y) untuk meng-konversi x dan y menjadi complex number dengan real part x dan imaginary part y. x dan numeric expressions y.","title":"Konversi Tipe Data Number Python"},{"location":"tutorial/number-python/#fungsi-matematika-python","text":"Pada bahasa pemrograman Python terdapat fungsi untuk melakukan perhitungan matematis, berikut adalah daftarnya : Nama Penggunaan Penjelasan Absolute abs(x) Nilai absolut dari x:(positive) jarak antara x and 0. Ceiling ceil(x) Ceiling dari x: integer terkecil yang kurang dari x. Cmp cmp(x, y) -1 if x < y, 0 if x == y, or 1 if x > y. Tidak berlaku lagi dengan Python 3. Sebaliknya gunakan return (x>y)-(x Eksponen exp(x) Nilai eksponen dari x: ex Fabs fabs(x) Nilai absolut dari x. Floor floor(x) Nilai dasar dari x: internet terbesar tidak lebih besar dari x. Log log(x) Logaritma dari x, untuk x > 0. Log 10 log10(x) Basis 10 logaritma dari x, untuk x > 0. Max max(x1, x2,...) Argumen terbesar: Nilai terdekat dengan tak terhingga positif Min min(x1, x2,...) Argumen terkecil: nilai yang paling mendekati tak berhingga negatif. Modf modf(x) Bagian pecahan dan bilangan bulat dari x dalam tupel dua item. Kedua bagian memiliki tanda yang sama dengan x. Bagian integer dikembalikan sebagai float. Pow pow(x, y) Nilai x ** y. Round round(x [,n]) X dibulatkan menjadi n digit dari titik desimal. Putaran Python jauh dari nol sebagai tie-breaker: round (0.5) adalah 1.0 dan round (-0.5) adalah -1.0. Akar Kuadrat sqrt(x) Akar kuadrat x untuk x> 0.","title":"Fungsi Matematika Python"},{"location":"tutorial/number-python/#fungsi-nomor-acak-python","text":"Nomor acak digunakan untuk aplikasi permainan, simulasi, pengujian, keamanan, dan privasi. Python mencakup fungsi berikut yang umum digunakan. Berikut adalah daftarnya : Nama Penggunaan Penjelasan Choice choice(seq) Item acak dari list, tuple, atau string. RandRange randrange ([start,] stop [,step]) Elemen yang dipilih secara acak dari jangkauan (start, stop, step). Random random() A random float r, sehingga 0 kurang dari atau sama dengan r dan r kurang dari 1 Seed seed([x]) Menetapkan nilai awal integer yang digunakan dalam menghasilkan bilangan acak. Panggil fungsi ini sebelum memanggil fungsi modul acak lainnya. Tidak ada pengembalian Shuffle shuffle(lst) Mengacak daftar dari daftar di tempat. Tidak ada pengembalian Floor floor(x) The floor of x: the largest integer not greater than x. Uniform uniform(x, y) Sebuah float acak r, sedemikian rupa sehingga x kurang dari atau sama dengan r dan r kurang dari y.","title":"Fungsi Nomor Acak Python"},{"location":"tutorial/number-python/#fungsi-trigonometri-python","text":"Python mencakup fungsi berikut yang melakukan perhitungan trigonometri. Berikut adalah daftarnya : Nama Penggunaan Penjelasan Penjelasan Acos acos(x) Kembalikan kosinus x, di radian. Asin asin(x) Kembalikan busur sinus x, dalam radian. Atan atan(x) Kembalikan busur singgung x, di radian. Atan 2 atan2(y, x) Kembali atan (y / x), di radian. Kosinus cos(x) Kembalikan kosinus x radian. Hypot hypot(x, y) Kembalikan norma Euclidean, sqrt (x _ x + y _ y). Sin sin(x) Kembalikan sinus dari x radian. Tan tan(x) Kembalikan tangen x radian. Derajat degrees(x) Mengonversi sudut x dari radian ke derajat. Radian radians(x) Mengonversi sudut x dari derajat ke radian.","title":"Fungsi Trigonometri Python"},{"location":"tutorial/number-python/#konstanta-matematika-python","text":"Modul ini juga mendefinisikan dua konstanta matematika. Berikut adalah daftarnya : Nama Penggunaan Penjelasan Pi pi Konstanta Pi matematika e e Konstanta e matematika Edit tutorial ini Loop Python String Python","title":"Konstanta Matematika Python"},{"location":"tutorial/object-class-python/","text":"Python telah menjadi bahasa berorientasi objek sejak bahasa Python sendiri dibuat. Untuk membuat dan menggunakan kelas dan objek pada Python benar-benar mudah. Pada tutorial ini Anda akan dibantu untuk menjadi ahli dalam penggunaan pemrograman berorientasi objek Python. Jika Anda tidak memiliki pengalaman sebelumnya dengan pemrograman berorientasi objek (OOP), Anda mempelajarinya terlebih dahulu agar Anda dapat memahami konsep dasarnya. Jika memang sudah mengerti konsep dasar OOP berikut ini adalah pengenalan dari Object-Oriented Programming (OOP) untuk membantu Anda. Istilah Dalam OOP Istilah Penjelasan Class Prototipe yang ditentukan pengguna untuk objek yang mendefinisikan seperangkat atribut yang menjadi ciri objek kelas apa pun. Atribut adalah data anggota (variabel kelas dan variabel contoh) dan metode, diakses melalui notasi titik. Class variable Sebuah variabel yang dibagi oleh semua contoh kelas. Variabel kelas didefinisikan dalam kelas tapi di luar metode kelas manapun. Variabel kelas tidak digunakan sesering variabel contoh. Data member Variabel kelas atau variabel contoh yang menyimpan data yang terkait dengan kelas dan objeknya. Function overloading Penugasan lebih dari satu perilaku ke fungsi tertentu. Operasi yang dilakukan bervariasi menurut jenis objek atau argumen yang terlibat. Instance variable Variabel yang didefinisikan di dalam sebuah metode dan hanya dimiliki oleh instance kelas saat ini. Inheritance Pengalihan karakteristik kelas ke kelas lain yang berasal darinya. Instance Objek individu dari kelas tertentu. Obyek obj yang termasuk dalam Lingkaran kelas, misalnya, adalah turunan dari Lingkaran kelas. Instantiation Penciptaan sebuah instance dari sebuah kelas. Method Jenis fungsi khusus yang didefinisikan dalam definisi kelas. Object Contoh unik dari struktur data yang didefinisikan oleh kelasnya. Objek terdiri dari kedua anggota data (variabel kelas dan variabel contoh) dan metode. Operator overloading Penugasan lebih dari satu fungsi ke operator tertentu. Membuat Class Python Statement class digunakan untuk membuat definisi kelas baru. Nama kelas segera mengikuti kelas kata kunci diikuti oleh titik dua sebagai berikut. class ClassName: 'Optional class documentation string' class_suite Dibawah ini adalah contoh cara membuat class dan penggunaanya : class Employee: 'Common base class for all employees' empCount = 0 def **init**(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print \"Total Employee %d\" % Employee.empCount def displayEmployee(self): print \"Name : \", self.name, \", Salary: \", self.salary Membuat Instance Objects Untuk membuat instances kelas, Anda memanggil class menggunakan nama class dan meneruskan argumen apa pun yang metode init terima. This would create first object of Employee class emp1 = Employee(\"Zara\", 2000) This would create second object of Employee class emp2 = Employee(\"Manni\", 5000) Mengakses Atribut Anda mengakses atribut objek menggunakan dot operator dengan objek. Variabel kelas akan diakses dengan menggunakan nama kelas sebagai berikut : emp1.displayEmployee() emp2.displayEmployee() print (\"Total Employee %d\" % Employee.empCount) Contoh lengkapnya, silahkan lihat kode dibawah ini. class Employee: 'Common base class for all employees' empCount = 0 def **init**(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print (\"Total Employee %d\" % Employee.empCount) def displayEmployee(self): print (\"Name : \", self.name, \", Salary: \", self.salary) #This would create first object of Employee class\" emp1 = Employee(\"Zara\", 2000) #This would create second object of Employee class\" emp2 = Employee(\"Manni\", 5000) emp1.displayEmployee() emp2.displayEmployee() print (\"Total Employee %d\" % Employee.empCount) Edit tutorial ini Exception Python Akses Database Python","title":"Object & Class Python"},{"location":"tutorial/object-class-python/#istilah-dalam-oop","text":"Istilah Penjelasan Class Prototipe yang ditentukan pengguna untuk objek yang mendefinisikan seperangkat atribut yang menjadi ciri objek kelas apa pun. Atribut adalah data anggota (variabel kelas dan variabel contoh) dan metode, diakses melalui notasi titik. Class variable Sebuah variabel yang dibagi oleh semua contoh kelas. Variabel kelas didefinisikan dalam kelas tapi di luar metode kelas manapun. Variabel kelas tidak digunakan sesering variabel contoh. Data member Variabel kelas atau variabel contoh yang menyimpan data yang terkait dengan kelas dan objeknya. Function overloading Penugasan lebih dari satu perilaku ke fungsi tertentu. Operasi yang dilakukan bervariasi menurut jenis objek atau argumen yang terlibat. Instance variable Variabel yang didefinisikan di dalam sebuah metode dan hanya dimiliki oleh instance kelas saat ini. Inheritance Pengalihan karakteristik kelas ke kelas lain yang berasal darinya. Instance Objek individu dari kelas tertentu. Obyek obj yang termasuk dalam Lingkaran kelas, misalnya, adalah turunan dari Lingkaran kelas. Instantiation Penciptaan sebuah instance dari sebuah kelas. Method Jenis fungsi khusus yang didefinisikan dalam definisi kelas. Object Contoh unik dari struktur data yang didefinisikan oleh kelasnya. Objek terdiri dari kedua anggota data (variabel kelas dan variabel contoh) dan metode. Operator overloading Penugasan lebih dari satu fungsi ke operator tertentu.","title":"Istilah Dalam OOP"},{"location":"tutorial/object-class-python/#membuat-class-python","text":"Statement class digunakan untuk membuat definisi kelas baru. Nama kelas segera mengikuti kelas kata kunci diikuti oleh titik dua sebagai berikut. class ClassName: 'Optional class documentation string' class_suite Dibawah ini adalah contoh cara membuat class dan penggunaanya : class Employee: 'Common base class for all employees' empCount = 0 def **init**(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print \"Total Employee %d\" % Employee.empCount def displayEmployee(self): print \"Name : \", self.name, \", Salary: \", self.salary","title":"Membuat Class Python"},{"location":"tutorial/object-class-python/#membuat-instance-objects","text":"Untuk membuat instances kelas, Anda memanggil class menggunakan nama class dan meneruskan argumen apa pun yang metode init terima. This would create first object of Employee class emp1 = Employee(\"Zara\", 2000) This would create second object of Employee class emp2 = Employee(\"Manni\", 5000)","title":"Membuat Instance Objects"},{"location":"tutorial/object-class-python/#mengakses-atribut","text":"Anda mengakses atribut objek menggunakan dot operator dengan objek. Variabel kelas akan diakses dengan menggunakan nama kelas sebagai berikut : emp1.displayEmployee() emp2.displayEmployee() print (\"Total Employee %d\" % Employee.empCount) Contoh lengkapnya, silahkan lihat kode dibawah ini. class Employee: 'Common base class for all employees' empCount = 0 def **init**(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print (\"Total Employee %d\" % Employee.empCount) def displayEmployee(self): print (\"Name : \", self.name, \", Salary: \", self.salary) #This would create first object of Employee class\" emp1 = Employee(\"Zara\", 2000) #This would create second object of Employee class\" emp2 = Employee(\"Manni\", 5000) emp1.displayEmployee() emp2.displayEmployee() print (\"Total Employee %d\" % Employee.empCount) Edit tutorial ini Exception Python Akses Database Python","title":"Mengakses Atribut"},{"location":"tutorial/operator-python/","text":"Operator adalah konstruksi yang dapat memanipulasi nilai dari operan. Sebagai contoh operasi 3 + 2 = 5. Disini 3 dan 2 adalah operan dan + adalah operator. Bahasa pemrograman Python mendukung berbagai macam operator, diantaranya : Operator Aritmatika (Arithmetic Operators) Operator Perbandingan (Comparison (Relational) Operators) Operator Penugasan (Assignment Operators) Operator Logika (Logical Operators) Operator Bitwise (Bitwise Operators) Operator Keanggotaan (Membership Operators) Operator Identitas (Identity Operators) Operator Aritmatika Operator Contoh Penjelasan Penjumlahan + 1 + 3 = 4 Menjumlahkan nilai dari masing-masing operan atau bilangan Pengurangan - 4 - 1 = 3 Mengurangi nilai operan di sebelah kiri menggunakan operan di sebelah kanan Perkalian * 2 * 4 = 8 Mengalikan operan/bilangan Pembagian / 10 / 5 = 2 Untuk membagi operan di sebelah kiri menggunakan operan di sebelah kanan Sisa Bagi % 11 % 2 = 1 Mendapatkan sisa pembagian dari operan di sebelah kiri operator ketika dibagi oleh operan di sebelah kanan Pangkat ** 8 ** 2 = 64 Memangkatkan operan disebelah kiri operator dengan operan di sebelah kanan operator Pembagian Bulat // 10 // 3 = 3 Sama seperti pembagian. Hanya saja angka dibelakang koma dihilangkan Dibawah ini adalah contoh penggunaan Operator Aritmatika dalam bahasa pemrograman Python #OPERATOR ARITMATIKA #Penjumlahan print(13 + 2) apel = 7 jeruk = 9 buah = apel + jeruk # print(buah) #Pengurangan hutang = 10000 bayar = 5000 sisaHutang = hutang - bayar print(\"Sisa hutang Anda adalah \", sisaHutang) #Perkalian panjang = 15 lebar = 8 luas = panjang * lebar print(luas) #Pembagian kue = 16 anak = 4 kuePerAnak = kue / anak print(\"Setiap anak akan mendapatkan bagian kue sebanyak \", kuePerAnak) #Sisa Bagi / Modulus bilangan1 = 14 bilangan2 = 5 hasil = bilangan1 % bilangan2 print(\"Sisa bagi dari bilangan \", bilangan1, \" dan \", bilangan2, \" adalah \", hasil) #Pangkat bilangan3 = 8 bilangan4 = 2 hasilPangkat = bilangan3 ** bilangan4 print(hasilPangkat) #Pembagian Bulat print(10//3) #10 dibagi 3 adalah 3.3333. Karena dibulatkan maka akan menghasilkan nilai 3 Operator Perbandingan Operator perbandingan (comparison operators) digunakan untuk membandingkan suatu nilai dari masing-masing operan. Operator Contoh Penjelasan Sama dengan == 1 == 1 bernilai True Jika masing-masing operan memiliki nilai yang sama, maka kondisi bernilai benar atau True. Tidak sama dengan != 2 != 2 bernilai False Akan menghasilkan nilai kebalikan dari kondisi sebenarnya. Tidak sama dengan <> 2 <> 2 bernilai False Akan menghasilkan nilai kebalikan dari kondisi sebenarnya. Lebih besar dari > 5 > 3 bernilai True Jika nilai operan kiri lebih besar dari nilai operan kanan, maka kondisi menjadi benar. Lebih kecil dari < 5 < 3 bernilai True Jika nilai operan kiri lebih kecil dari nilai operan kanan, maka kondisi menjadi benar. Lebih besar atau sama dengan >= 5 >= 3 bernilai True Jika nilai operan kiri lebih besar dari nilai operan kanan, atau sama, maka kondisi menjadi benar. Lebih kecil atau sama dengan <= 5 <= 3 bernilai True Jika nilai operan kiri lebih kecil dari nilai operan kanan, atau sama, maka kondisi menjadi benar. Dibawah ini adalah contoh penggunaan Operator Aritmatika dalam bahasa pemrograman Python # SAMA DENGAN print(1 == 1) # Hasilnya akan bernilai True karena satu sama dengan satu print(1 == 2) # Hasilnya akan bernilai False karena satu tidak sama dengan dua # TIDAK SAMA DENGAN print(2 != 2) # Hasilnya akan bernilai False karena dua seharusnya sama dengan dua print(2 != 3) # Hasilnya akan bernilai True karena dua tidak sama dengan tiga # LEBIH BESAR DARI print(5 > 3) # Hasilnya akan bernilai True karena lima lebih besar dari tiga # LEBIH KECIL DARI print(5 < 3) # Hasilnya akan bernilai False karena lima tidak lebih besar dari tiga # LEBIH BESAR DARI SAMA DENGAN print(5 >= 3) # Hasilnya akan bernilai True karena lima lebih besar dari sama dengan tiga # LEBIH KECIL DARI SAMA DENGAN print(5 <= 3) # Hasilnya akan bernilai False karena lima tidak lebih besar dari sama dengan tiga Operator Penugasan Operator penugasan digunakan untuk memberikan atau memodifikasi nilai ke dalam sebuah variabel. Operator Contoh Penjelasan Sama dengan = a = 1 Memberikan nilai di kanan ke dalam variabel yang berada di sebelah kiri. Tambah sama dengan += a += 2 Memberikan nilai variabel dengan nilai variabel itu sendiri ditambah dengan nilai di sebelah kanan. Kurang sama dengan -= a -= 2 Memberikan nilai variabel dengan nilai variabel itu sendiri dikurangi dengan nilai di sebelah kanan. Kali sama dengan *= a *= 2 Memberikan nilai variabel dengan nilai variabel itu sendiri dikali dengan nilai di sebelah kanan. Bagi sama dengan /= a /= 4 Memberikan nilai variabel dengan nilai variabel itu sendiri dibagi dengan nilai di sebelah kanan. Sisa bagi sama dengan %= a %= 3 Memberikan nilai variabel dengan nilai variabel itu sendiri dibagi dengan nilai di sebelah kanan. Yang diambil nantinya adalah sisa baginya. Pangkat sama dengan **= a **= 3 Memberikan nilai variabel dengan nilai variabel itu sendiri dipangkatkan dengan nilai di sebelah kanan. Pembagian bulat sama dengan //= a //= 3 Membagi bulat operan sebelah kiri operator dengan operan sebelah kanan operator kemudian hasilnya diisikan ke operan sebelah kiri. Prioritas Eksekusi Operator di Python Dari semua operator diatas, masing-masing mempunyai urutan prioritas yang nantinya prioritas pertama akan dilakukan paling pertama, begitu seterusnya sampai dengan prioritas terakhir. Operator Keterangan ** Aritmatika ~, +, - Bitwise *, /, %, // Aritmatika +, - Aritmatika >>, << Bitwise & Bitwise ^ Bitwise <=, <, >, >= Perbandingan <> , ==, != Perbandingan =, %=, /=, //=, -=, +=, *=, **= Penugasan is, is not Identitas in, not in Membership (Keanggotaan) not, or, and Logika Edit tutorial ini Variabel Python Kondisi Python","title":"Operator Python"},{"location":"tutorial/operator-python/#operator-aritmatika","text":"Operator Contoh Penjelasan Penjumlahan + 1 + 3 = 4 Menjumlahkan nilai dari masing-masing operan atau bilangan Pengurangan - 4 - 1 = 3 Mengurangi nilai operan di sebelah kiri menggunakan operan di sebelah kanan Perkalian * 2 * 4 = 8 Mengalikan operan/bilangan Pembagian / 10 / 5 = 2 Untuk membagi operan di sebelah kiri menggunakan operan di sebelah kanan Sisa Bagi % 11 % 2 = 1 Mendapatkan sisa pembagian dari operan di sebelah kiri operator ketika dibagi oleh operan di sebelah kanan Pangkat ** 8 ** 2 = 64 Memangkatkan operan disebelah kiri operator dengan operan di sebelah kanan operator Pembagian Bulat // 10 // 3 = 3 Sama seperti pembagian. Hanya saja angka dibelakang koma dihilangkan Dibawah ini adalah contoh penggunaan Operator Aritmatika dalam bahasa pemrograman Python #OPERATOR ARITMATIKA #Penjumlahan print(13 + 2) apel = 7 jeruk = 9 buah = apel + jeruk # print(buah) #Pengurangan hutang = 10000 bayar = 5000 sisaHutang = hutang - bayar print(\"Sisa hutang Anda adalah \", sisaHutang) #Perkalian panjang = 15 lebar = 8 luas = panjang * lebar print(luas) #Pembagian kue = 16 anak = 4 kuePerAnak = kue / anak print(\"Setiap anak akan mendapatkan bagian kue sebanyak \", kuePerAnak) #Sisa Bagi / Modulus bilangan1 = 14 bilangan2 = 5 hasil = bilangan1 % bilangan2 print(\"Sisa bagi dari bilangan \", bilangan1, \" dan \", bilangan2, \" adalah \", hasil) #Pangkat bilangan3 = 8 bilangan4 = 2 hasilPangkat = bilangan3 ** bilangan4 print(hasilPangkat) #Pembagian Bulat print(10//3) #10 dibagi 3 adalah 3.3333. Karena dibulatkan maka akan menghasilkan nilai 3","title":"Operator Aritmatika "},{"location":"tutorial/operator-python/#operator-perbandingan","text":"Operator perbandingan (comparison operators) digunakan untuk membandingkan suatu nilai dari masing-masing operan. Operator Contoh Penjelasan Sama dengan == 1 == 1 bernilai True Jika masing-masing operan memiliki nilai yang sama, maka kondisi bernilai benar atau True. Tidak sama dengan != 2 != 2 bernilai False Akan menghasilkan nilai kebalikan dari kondisi sebenarnya. Tidak sama dengan <> 2 <> 2 bernilai False Akan menghasilkan nilai kebalikan dari kondisi sebenarnya. Lebih besar dari > 5 > 3 bernilai True Jika nilai operan kiri lebih besar dari nilai operan kanan, maka kondisi menjadi benar. Lebih kecil dari < 5 < 3 bernilai True Jika nilai operan kiri lebih kecil dari nilai operan kanan, maka kondisi menjadi benar. Lebih besar atau sama dengan >= 5 >= 3 bernilai True Jika nilai operan kiri lebih besar dari nilai operan kanan, atau sama, maka kondisi menjadi benar. Lebih kecil atau sama dengan <= 5 <= 3 bernilai True Jika nilai operan kiri lebih kecil dari nilai operan kanan, atau sama, maka kondisi menjadi benar. Dibawah ini adalah contoh penggunaan Operator Aritmatika dalam bahasa pemrograman Python # SAMA DENGAN print(1 == 1) # Hasilnya akan bernilai True karena satu sama dengan satu print(1 == 2) # Hasilnya akan bernilai False karena satu tidak sama dengan dua # TIDAK SAMA DENGAN print(2 != 2) # Hasilnya akan bernilai False karena dua seharusnya sama dengan dua print(2 != 3) # Hasilnya akan bernilai True karena dua tidak sama dengan tiga # LEBIH BESAR DARI print(5 > 3) # Hasilnya akan bernilai True karena lima lebih besar dari tiga # LEBIH KECIL DARI print(5 < 3) # Hasilnya akan bernilai False karena lima tidak lebih besar dari tiga # LEBIH BESAR DARI SAMA DENGAN print(5 >= 3) # Hasilnya akan bernilai True karena lima lebih besar dari sama dengan tiga # LEBIH KECIL DARI SAMA DENGAN print(5 <= 3) # Hasilnya akan bernilai False karena lima tidak lebih besar dari sama dengan tiga","title":"Operator Perbandingan "},{"location":"tutorial/operator-python/#operator-penugasan","text":"Operator penugasan digunakan untuk memberikan atau memodifikasi nilai ke dalam sebuah variabel. Operator Contoh Penjelasan Sama dengan = a = 1 Memberikan nilai di kanan ke dalam variabel yang berada di sebelah kiri. Tambah sama dengan += a += 2 Memberikan nilai variabel dengan nilai variabel itu sendiri ditambah dengan nilai di sebelah kanan. Kurang sama dengan -= a -= 2 Memberikan nilai variabel dengan nilai variabel itu sendiri dikurangi dengan nilai di sebelah kanan. Kali sama dengan *= a *= 2 Memberikan nilai variabel dengan nilai variabel itu sendiri dikali dengan nilai di sebelah kanan. Bagi sama dengan /= a /= 4 Memberikan nilai variabel dengan nilai variabel itu sendiri dibagi dengan nilai di sebelah kanan. Sisa bagi sama dengan %= a %= 3 Memberikan nilai variabel dengan nilai variabel itu sendiri dibagi dengan nilai di sebelah kanan. Yang diambil nantinya adalah sisa baginya. Pangkat sama dengan **= a **= 3 Memberikan nilai variabel dengan nilai variabel itu sendiri dipangkatkan dengan nilai di sebelah kanan. Pembagian bulat sama dengan //= a //= 3 Membagi bulat operan sebelah kiri operator dengan operan sebelah kanan operator kemudian hasilnya diisikan ke operan sebelah kiri.","title":"Operator Penugasan "},{"location":"tutorial/operator-python/#prioritas-eksekusi-operator-di-python","text":"Dari semua operator diatas, masing-masing mempunyai urutan prioritas yang nantinya prioritas pertama akan dilakukan paling pertama, begitu seterusnya sampai dengan prioritas terakhir. Operator Keterangan ** Aritmatika ~, +, - Bitwise *, /, %, // Aritmatika +, - Aritmatika >>, << Bitwise & Bitwise ^ Bitwise <=, <, >, >= Perbandingan <> , ==, != Perbandingan =, %=, /=, //=, -=, +=, *=, **= Penugasan is, is not Identitas in, not in Membership (Keanggotaan) not, or, and Logika Edit tutorial ini Variabel Python Kondisi Python","title":"Prioritas Eksekusi Operator di Python"},{"location":"tutorial/pengembangan-web-python/","text":"Pengembangan web adalah istilah umum untuk membuat konsep, membuat, menyebarkan, dan mengoperasikan aplikasi website dan antarmuka pemrograman aplikasi untuk Website. Penggunaan Python dalam Pengembangan Web Python dapat digunakan untuk membangun aplikasi web sisi server. Sementara kerangka web tidak diperlukan untuk membangun aplikasi web, jarang sekali pengembang tidak akan menggunakan pustaka sumber terbuka yang ada untuk mempercepat kemajuan mereka dalam membuat aplikasi mereka berfungsi. Python tidak digunakan di browser web. Bahasa yang dijalankan di browser seperti Chrome, Firefox, dan Internet Explorer adalah JavaScript. Proyek seperti pyjs dapat dikompilasi dari Python ke JavaScript. Namun, sebagian besar pengembang Python menulis aplikasi web mereka menggunakan kombinasi Python dan JavaScript. Python dieksekusi di sisi server sementara JavaScript diunduh ke klien dan dijalankan oleh browser web. Untuk membuat website dengan menggunakan Python sebagai bahasa pemrogramanya, caranya sangat mudah. Tetapi perlu diingat bahwa sebelumnya Anda sudah harus menguasai HTML, CSS dan Javascript. Web Framework Python Framework pengembangan web pada python yang paling populer dan mudah dipelajari ada Django dan Flask Flask Flask adalah sebuah microframework web python yang mudah untuk dipelajari, mudah diinstal dan pengembangan yang sangat simpel. Berikut adalah beberapa kelebihanya : mudah digunakan. dibangun di server pengembangan dan debugger dukungan pengujian unit terpadu Kirim permintaan yang tenang menggunakan tempering Jinja2 dukungan untuk cookie aman (sesi sisi klien) 100% WSGI 1.0 compliant Berbasis Unicode didokumentasikan secara ekstensif Instalasi Flask pip install Flask Hello World Web App dengan Flask from flask import Flask app = Flask(**name**) @app.route(\"/\") def hello(): return \"Hello World!\" <<<<<<<< HEAD:_tutorial/pengembangan-web-python.md if **name** == \"**main**\": app.run() {% endhighlight %} ======== if **name** == \"**main**\": app.run() pr/80:docs/tutorial/pengembangan-web-python.md Jalankan server dengan perintah: python hello.py Buka http://localhost:5000/ dibrowser anda dan akan muncul Hello World! Django Django adalah kerangka kerja Python Web tingkat tinggi yang menangani banyak kerumitan pengembangan Web, sehingga Anda dapat fokus untuk menulis aplikasi tanpa perlu menemukan kembali roda. Kelebihan Framework Django dibanding yang lain adalah pada segi skalabilitas. Framework ini cocok untuk pengembangan aplikasi besar. Untuk menginstal Django jalankan perintah dibawah ini : pip install Django==1.7.1 Setelah terinstal, buat direktori /django-hello/ untuk aplikasi Anda. Dalam direktori ini buat file hello.py dengan code dibawah ini: #!/usr/bin/env python import sys from django.conf import settings from django.conf.urls import patterns from django.http import HttpResponse from django.core.management import execute_from_command_line settings.configure( DEBUG=True, SECRET_KEY='asecretkey', ROOT_URLCONF=sys.modules[__name__], ) def index(request): return HttpResponse('Hello, World') urlpatterns = patterns('', (r'^hello/$', index), ) if **name** == \"**main**\": execute_from_command_line(sys.argv) <<<<<<<< HEAD:_tutorial/pengembangan-web-python.md {% endhighlight %} ======== pr/80:docs/tutorial/pengembangan-web-python.md Jalankan server dengan perintah : python hello.py runserver Server HTTP Django akan mulai dan jika Anda membuka http://127.0.0.1:8000/hello/ Edit tutorial ini <<<<<<<< HEAD:_tutorial/pengembangan-web-python.md Networking Python ======== Networking Python >>>>>>>> pr/80:docs/tutorial/pengembangan-web-python.md","title":"Pengembangan Web Python"},{"location":"tutorial/pengembangan-web-python/#penggunaan-python-dalam-pengembangan-web","text":"Python dapat digunakan untuk membangun aplikasi web sisi server. Sementara kerangka web tidak diperlukan untuk membangun aplikasi web, jarang sekali pengembang tidak akan menggunakan pustaka sumber terbuka yang ada untuk mempercepat kemajuan mereka dalam membuat aplikasi mereka berfungsi. Python tidak digunakan di browser web. Bahasa yang dijalankan di browser seperti Chrome, Firefox, dan Internet Explorer adalah JavaScript. Proyek seperti pyjs dapat dikompilasi dari Python ke JavaScript. Namun, sebagian besar pengembang Python menulis aplikasi web mereka menggunakan kombinasi Python dan JavaScript. Python dieksekusi di sisi server sementara JavaScript diunduh ke klien dan dijalankan oleh browser web. Untuk membuat website dengan menggunakan Python sebagai bahasa pemrogramanya, caranya sangat mudah. Tetapi perlu diingat bahwa sebelumnya Anda sudah harus menguasai HTML, CSS dan Javascript.","title":"Penggunaan Python dalam Pengembangan Web"},{"location":"tutorial/pengembangan-web-python/#web-framework-python","text":"Framework pengembangan web pada python yang paling populer dan mudah dipelajari ada Django dan Flask","title":"Web Framework Python"},{"location":"tutorial/pengembangan-web-python/#flask","text":"Flask adalah sebuah microframework web python yang mudah untuk dipelajari, mudah diinstal dan pengembangan yang sangat simpel. Berikut adalah beberapa kelebihanya : mudah digunakan. dibangun di server pengembangan dan debugger dukungan pengujian unit terpadu Kirim permintaan yang tenang menggunakan tempering Jinja2 dukungan untuk cookie aman (sesi sisi klien) 100% WSGI 1.0 compliant Berbasis Unicode didokumentasikan secara ekstensif Instalasi Flask pip install Flask Hello World Web App dengan Flask from flask import Flask app = Flask(**name**) @app.route(\"/\") def hello(): return \"Hello World!\" <<<<<<<< HEAD:_tutorial/pengembangan-web-python.md if **name** == \"**main**\": app.run() {% endhighlight %} ======== if **name** == \"**main**\": app.run() pr/80:docs/tutorial/pengembangan-web-python.md Jalankan server dengan perintah: python hello.py Buka http://localhost:5000/ dibrowser anda dan akan muncul Hello World!","title":"Flask"},{"location":"tutorial/pengembangan-web-python/#django","text":"Django adalah kerangka kerja Python Web tingkat tinggi yang menangani banyak kerumitan pengembangan Web, sehingga Anda dapat fokus untuk menulis aplikasi tanpa perlu menemukan kembali roda. Kelebihan Framework Django dibanding yang lain adalah pada segi skalabilitas. Framework ini cocok untuk pengembangan aplikasi besar. Untuk menginstal Django jalankan perintah dibawah ini : pip install Django==1.7.1 Setelah terinstal, buat direktori /django-hello/ untuk aplikasi Anda. Dalam direktori ini buat file hello.py dengan code dibawah ini: #!/usr/bin/env python import sys from django.conf import settings from django.conf.urls import patterns from django.http import HttpResponse from django.core.management import execute_from_command_line settings.configure( DEBUG=True, SECRET_KEY='asecretkey', ROOT_URLCONF=sys.modules[__name__], ) def index(request): return HttpResponse('Hello, World') urlpatterns = patterns('', (r'^hello/$', index), ) if **name** == \"**main**\": execute_from_command_line(sys.argv) <<<<<<<< HEAD:_tutorial/pengembangan-web-python.md {% endhighlight %} ======== pr/80:docs/tutorial/pengembangan-web-python.md Jalankan server dengan perintah : python hello.py runserver Server HTTP Django akan mulai dan jika Anda membuka http://127.0.0.1:8000/hello/ Edit tutorial ini <<<<<<<< HEAD:_tutorial/pengembangan-web-python.md Networking Python ======== Networking Python >>>>>>>> pr/80:docs/tutorial/pengembangan-web-python.md","title":"Django"},{"location":"tutorial/string-python/","text":"String adalah jenis yang paling populer di bahasa pemrograman. Kita bisa membuatnya hanya dengan melampirkan karakter dalam tanda kutip. Python memperlakukan tanda kutip tunggal sama dengan tanda kutip ganda. Membuat string semudah memberi nilai pada sebuah variabel. Dibawah ini adalah contoh sederhana dari sebuah string pada bahasa pemrograman Python. print(\"Hello World\") Mengakses Nilai dalam String Python tidak menggunakan tipe karakter titik koma ; Ini diperlakukan sebagai string dengan panjang satu, sehingga juga dianggap sebagai substring. Untuk mengakses substring, gunakan tanda kurung siku untuk mengiris beserta indeks atau indeks untuk mendapatkan substring Anda. Sebagai contoh : name = 'John Doe' message = \"John Doe belajar bahasa python di Belajarpython\" print (\"name[0]: \", name[0]) print (\"message[1:4]: \", message[1:4]) Bila kode diatas dieksekusi, maka akan menghasilkan hasil sebagai berikut : name[0]: J message[1:4]: ohn Mengupdate String Anda dapat \"memperbarui\" string yang ada dengan (kembali) menugaskan variabel ke string lain. Nilai baru dapat dikaitkan dengan nilai sebelumnya atau ke string yang sama sekali berbeda sama sekali. Sebagai contoh message = 'Hello World' print (\"Updated String :- \", message[:6] + 'Python') Bila kode diatas dieksekusi, maka akan menghasilkan hasil sebagai berikut : Updated String :- Hello Python Escape Characters / Karakter Escape Python Dibawah ini adalah tabel dari daftar karakter escape atau karakter non-printable yang dapat diwakili/ditulis dengan awalan notasi backslash. Notasi Backslash Karakter Hexadecimal Penjelasan \\a 0x07 Bell atau alert \\b 0x08 Backspace \\cx Control-x \\C-x Control-x \\e 0x1b Escape \\f 0x0c Formfeed \\M-\\C-x Meta-Control-x \\n 0x0a Newline \\nnn Octal notation, dimana n berada di range 0.7 \\r 0x0d Carriage return \\s 0x20 Space \\t 0x09 Tab \\v 0x0b Vertical tab \\x Character x \\xnn Notasi Hexadecimal, dimana n berada di range 0.9, a.f, atau A.F Operator Spesial String Python Asumsikan variabel string adalah 'Belajar' dan variabel b adalah 'Python', lalu dibawah ini adalah operator yang bisa dipakai pada kedua string di variabel tersebut. a = \"Belajar\" b = \"Python\" Berikut adalah daftar operator spesial string pada Python : Operator Contoh Penjelasan Penjelasan + a + b akan menghasilkan BelajarPython Concatenation - Menambahkan nilai pada kedua sisi operator * a*2 akan menghasilkan BelajarBelajar Pengulangan - Membuat string baru, menggabungkan beberapa salinan dari string yang sama [] a[1] akan menghasilkan e Slice - Memberikan karakter dari indeks yang diberikan [ : ] a[1:4] akan menghasilkan ela Range Slice - Memberikan karakter dari kisaran yang diberikan in B in a akan menghasilkan 1 Keanggotaan - Mengembalikan nilai true jika ada karakter dalam string yang diberikan not in Z not in a akan menghasilkan 1 Keanggotaan - Mengembalikan nilai true jika karakter tidak ada dalam string yang diberikan r/R print r'\\n' prints \\n dan print R'\\n'prints \\n Raw String - Menekan arti aktual karakter Escape. Sintaks untuk string mentah sama persis dengan string biasa kecuali operator string mentah, huruf \"r\", yang mendahului tanda petik. \"R\" bisa berupa huruf kecil (r) atau huruf besar (R) dan harus ditempatkan tepat sebelum tanda kutip pertama. % Format - Melakukan format String Operator Format String Python Salah satu fitur Python yang paling keren adalah format string operator %. Operator ini unik untuk string dan membuat paket memiliki fungsi dari keluarga printf C () C. berikut adalah contoh sederhananya : print (\"My name is %s and weight is %d kg!\" % ('Zara', 21)) Berikut adalah daftar lengkap simbol yang bisa digunakan bersamaan dengan % : Operator Penjelasan %c character %s Konversi string melalui str () sebelum memformat %i Dianggap sebagai bilangan bulat desimal %d Dianggap sebagai bilangan bulat desimal %u Unsigned decimal integer %o Bilangan bulat oktal %x Bilangan bulat heksadesimal (huruf kecil) %X Bilangan bulat heksadesimal (huruf besar) %e Notasi eksponensial (dengan huruf kecil 'e') %E Notasi eksponensial (dengan huruf besar 'E') %f Bilangan real floating point %g Yang lebih pendek dari% f dan% e %G Lebih pendek dari% f dan% E Triple Quote Python Python triple quotes digunakan dengan membiarkan string untuk ditulis dalam beberapa baris, termasuk kata kerja NEWLINEs, TABs, dan karakter khusus lainnya. Sintaks untuk triple quotes terdiri dari tiga tanda kutip tunggal atau ganda ditulis berturut-turut : Berikut adalah contohnya : kutipantiga = \"\"\"this is a long string that is made up of several lines and non-printable characters such as TAB ( \\t ) and they will show up that way when displayed. NEWLINEs within the string, whether explicitly given like this within the brackets [ \\n ], or just a NEWLINE within the variable assignment will also show up. \"\"\" print (kutipantiga) String Unicode Python Pada Python 3, semua string diwakili dalam Unicode. Sedangkan pada Python 2 disimpan secara internal sebagai 8-bit ASCII, maka diperlukanlampiran 'u' untuk membuatnya menjadi Unicode. Tetapi hal ini tidak lagi diperlukan sekarang. : Metode String Built-in Python menyertakan metode built-in berikut untuk memanipulasi string Metode Penjelasan capitalize() Meng-kapitalkan huruf pertama string center(width, fillchar) Mengembalikan string yang dilapisi dengan fillchar dengan string asli yang dipusatkan pada total width kolom. count(str, beg = 0,end = len(string)) Menghitung berapa kali str yang terjadi dalam string atau dalam substring string jika memulai indeks beg dan end index end diberikan. decode(encoding = 'UTF-8',errors = 'strict') Dekode string menggunakan codec yang terdaftar untuk pengkodean. Encoding default ke pengkodean string default. encode(encoding = 'UTF-8',errors = 'strict') Mengembalikan versi string yang dikodekan string; Pada kesalahan, default adalah menaikkan ValueError kecuali jika kesalahan diberikan dengan 'ignore' atau 'replace'. endswith(suffix, beg = 0, end = len(string)) Menentukan apakah string atau substring string (jika memulai indeks memohon dan mengakhiri akhir indeks diberikan) berakhir dengan akhiran; Mengembalikan nilai true jika benar dan salah. expandtabs(tabsize = 8) Memperluas tab dalam string ke banyak ruang; Default ke 8 spasi per tab jika tabsize tidak tersedia. find(str, beg = 0 end = len(string)) Tentukan jika str terjadi dalam string atau dalam substring string jika memulai indeks beg dan end index end diberikan return index jika ditemukan dan -1 sebaliknya. index(str, beg = 0, end = len(string)) Sama seperti find (), namun menimbulkan pengecualian jika str tidak ditemukan. isalnum() Mengembalikan true jika string memiliki minimal 1 karakter dan semua karakternya alfanumerik dan false sebaliknya. isalpha() Mengembalikan true jika string memiliki minimal 1 karakter dan semua karakter adalah abjad dan false sebaliknya. isdigit() Mengembalikan true jika string hanya berisi digit dan false sebaliknya. islower() Mengembalikan true jika string memiliki setidaknya 1 karakter casing dan semua karakter casing dalam huruf kecil dan false sebaliknya. isnumeric() Mengembalikan true jika string unicode hanya berisi karakter numerik dan false sebaliknya. isspace() Mengembalikan true jika string hanya berisi karakter spasi dan false sebaliknya. istitle() Mengembalikan true jika string benar \"titlecased\" dan false sebaliknya. isupper() Mengembalikan true jika string memiliki setidaknya satu karakter casing dan semua karakter casing ada dalam huruf besar dan false sebaliknya. join(seq) Merges (concatenates) representasi string elemen dalam urutan seq menjadi string, dengan string pemisah. len(string) Mengembalikan panjang string ljust(width[, fillchar]) Mengembalikan string berlapis ruang dengan string asli dibiarkan dibenarkan ke kolom lebar total. lower() Mengonversi semua huruf besar dalam bentuk string menjadi huruf kecil. lstrip() Menghapus semua spasi utama dalam string. maketrans() Mengembalikan tabel terjemahan untuk digunakan dalam fungsi terjemahan. max(str) Mengembalikan karakter alfabetik dari string str. min(str) Mengembalikan min karakter abjad dari string str. replace(old, new [, max]) Menggantikan semua kemunculan lama dalam string dengan kejadian baru atau paling maksimal jika max diberikan. rfind(str, beg = 0,end = len(string)) Sama seperti find (), tapi cari mundur dalam string. rindex( str, beg = 0, end = len(string)) Sama seperti index (), tapi cari mundur dalam string. rjust(width,[, fillchar]) Mengembalikan string berlapis ruang dengan senar asli benar-dibenarkan untuk total kolom lebar. rstrip() Menghapus semua spasi spasi string. split(str=\"\", num=string.count(str)) Membagi string sesuai dengan pemisah str (ruang jika tidak disediakan) dan mengembalikan daftar substring; Terpecah menjadi paling banyak substring jika diberikan. splitlines( num=string.count('\\n')) Membagi string sama sekali (atau num) NEWLINEs dan mengembalikan daftar setiap baris dengan NEWLINEs dihapus. startswith(str, beg=0,end=len(string) Determines if string or a substring of string (if starting index beg and ending index end are given) starts with substring str; returns true if so and false otherwise. strip([chars]) Lakukan kedua lstrip () dan rstrip () pada string swapcase() Kasus invers untuk semua huruf dalam string. title() Mengembalikan versi string \"titlecased\", yaitu, semua kata diawali dengan huruf besar dan sisanya huruf kecil. translate(table, deletechars=\"\") Menerjemahkan string sesuai dengan tabel terjemahan str (256 karakter), menghapus string del. upper() Mengonversi huruf kecil dalam bentuk string ke huruf besar. zfill (width) Mengembalikan string asli yang tertinggal dengan angka nol ke total karakter lebar; Dimaksudkan untuk angka, zfill () mempertahankan tanda apapun yang diberikan (kurang satu nol). isdecimal() Mengembalikan nilai true jika string unicode hanya berisi karakter desimal dan false sebaliknya. Edit tutorial ini Number Python List Python","title":"String Python"},{"location":"tutorial/string-python/#mengakses-nilai-dalam-string","text":"Python tidak menggunakan tipe karakter titik koma ; Ini diperlakukan sebagai string dengan panjang satu, sehingga juga dianggap sebagai substring. Untuk mengakses substring, gunakan tanda kurung siku untuk mengiris beserta indeks atau indeks untuk mendapatkan substring Anda. Sebagai contoh : name = 'John Doe' message = \"John Doe belajar bahasa python di Belajarpython\" print (\"name[0]: \", name[0]) print (\"message[1:4]: \", message[1:4]) Bila kode diatas dieksekusi, maka akan menghasilkan hasil sebagai berikut : name[0]: J message[1:4]: ohn","title":"Mengakses Nilai dalam String"},{"location":"tutorial/string-python/#mengupdate-string","text":"Anda dapat \"memperbarui\" string yang ada dengan (kembali) menugaskan variabel ke string lain. Nilai baru dapat dikaitkan dengan nilai sebelumnya atau ke string yang sama sekali berbeda sama sekali. Sebagai contoh message = 'Hello World' print (\"Updated String :- \", message[:6] + 'Python') Bila kode diatas dieksekusi, maka akan menghasilkan hasil sebagai berikut : Updated String :- Hello Python","title":"Mengupdate String"},{"location":"tutorial/string-python/#escape-characters-karakter-escape-python","text":"Dibawah ini adalah tabel dari daftar karakter escape atau karakter non-printable yang dapat diwakili/ditulis dengan awalan notasi backslash. Notasi Backslash Karakter Hexadecimal Penjelasan \\a 0x07 Bell atau alert \\b 0x08 Backspace \\cx Control-x \\C-x Control-x \\e 0x1b Escape \\f 0x0c Formfeed \\M-\\C-x Meta-Control-x \\n 0x0a Newline \\nnn Octal notation, dimana n berada di range 0.7 \\r 0x0d Carriage return \\s 0x20 Space \\t 0x09 Tab \\v 0x0b Vertical tab \\x Character x \\xnn Notasi Hexadecimal, dimana n berada di range 0.9, a.f, atau A.F","title":"Escape Characters / Karakter Escape Python"},{"location":"tutorial/string-python/#operator-spesial-string-python","text":"Asumsikan variabel string adalah 'Belajar' dan variabel b adalah 'Python', lalu dibawah ini adalah operator yang bisa dipakai pada kedua string di variabel tersebut. a = \"Belajar\" b = \"Python\" Berikut adalah daftar operator spesial string pada Python : Operator Contoh Penjelasan Penjelasan + a + b akan menghasilkan BelajarPython Concatenation - Menambahkan nilai pada kedua sisi operator * a*2 akan menghasilkan BelajarBelajar Pengulangan - Membuat string baru, menggabungkan beberapa salinan dari string yang sama [] a[1] akan menghasilkan e Slice - Memberikan karakter dari indeks yang diberikan [ : ] a[1:4] akan menghasilkan ela Range Slice - Memberikan karakter dari kisaran yang diberikan in B in a akan menghasilkan 1 Keanggotaan - Mengembalikan nilai true jika ada karakter dalam string yang diberikan not in Z not in a akan menghasilkan 1 Keanggotaan - Mengembalikan nilai true jika karakter tidak ada dalam string yang diberikan r/R print r'\\n' prints \\n dan print R'\\n'prints \\n Raw String - Menekan arti aktual karakter Escape. Sintaks untuk string mentah sama persis dengan string biasa kecuali operator string mentah, huruf \"r\", yang mendahului tanda petik. \"R\" bisa berupa huruf kecil (r) atau huruf besar (R) dan harus ditempatkan tepat sebelum tanda kutip pertama. % Format - Melakukan format String","title":"Operator Spesial String Python"},{"location":"tutorial/string-python/#operator-format-string-python","text":"Salah satu fitur Python yang paling keren adalah format string operator %. Operator ini unik untuk string dan membuat paket memiliki fungsi dari keluarga printf C () C. berikut adalah contoh sederhananya : print (\"My name is %s and weight is %d kg!\" % ('Zara', 21)) Berikut adalah daftar lengkap simbol yang bisa digunakan bersamaan dengan % : Operator Penjelasan %c character %s Konversi string melalui str () sebelum memformat %i Dianggap sebagai bilangan bulat desimal %d Dianggap sebagai bilangan bulat desimal %u Unsigned decimal integer %o Bilangan bulat oktal %x Bilangan bulat heksadesimal (huruf kecil) %X Bilangan bulat heksadesimal (huruf besar) %e Notasi eksponensial (dengan huruf kecil 'e') %E Notasi eksponensial (dengan huruf besar 'E') %f Bilangan real floating point %g Yang lebih pendek dari% f dan% e %G Lebih pendek dari% f dan% E","title":"Operator Format String Python"},{"location":"tutorial/string-python/#triple-quote-python","text":"Python triple quotes digunakan dengan membiarkan string untuk ditulis dalam beberapa baris, termasuk kata kerja NEWLINEs, TABs, dan karakter khusus lainnya. Sintaks untuk triple quotes terdiri dari tiga tanda kutip tunggal atau ganda ditulis berturut-turut : Berikut adalah contohnya : kutipantiga = \"\"\"this is a long string that is made up of several lines and non-printable characters such as TAB ( \\t ) and they will show up that way when displayed. NEWLINEs within the string, whether explicitly given like this within the brackets [ \\n ], or just a NEWLINE within the variable assignment will also show up. \"\"\" print (kutipantiga)","title":"Triple Quote Python"},{"location":"tutorial/string-python/#string-unicode-python","text":"Pada Python 3, semua string diwakili dalam Unicode. Sedangkan pada Python 2 disimpan secara internal sebagai 8-bit ASCII, maka diperlukanlampiran 'u' untuk membuatnya menjadi Unicode. Tetapi hal ini tidak lagi diperlukan sekarang. : Metode String Built-in Python menyertakan metode built-in berikut untuk memanipulasi string Metode Penjelasan capitalize() Meng-kapitalkan huruf pertama string center(width, fillchar) Mengembalikan string yang dilapisi dengan fillchar dengan string asli yang dipusatkan pada total width kolom. count(str, beg = 0,end = len(string)) Menghitung berapa kali str yang terjadi dalam string atau dalam substring string jika memulai indeks beg dan end index end diberikan. decode(encoding = 'UTF-8',errors = 'strict') Dekode string menggunakan codec yang terdaftar untuk pengkodean. Encoding default ke pengkodean string default. encode(encoding = 'UTF-8',errors = 'strict') Mengembalikan versi string yang dikodekan string; Pada kesalahan, default adalah menaikkan ValueError kecuali jika kesalahan diberikan dengan 'ignore' atau 'replace'. endswith(suffix, beg = 0, end = len(string)) Menentukan apakah string atau substring string (jika memulai indeks memohon dan mengakhiri akhir indeks diberikan) berakhir dengan akhiran; Mengembalikan nilai true jika benar dan salah. expandtabs(tabsize = 8) Memperluas tab dalam string ke banyak ruang; Default ke 8 spasi per tab jika tabsize tidak tersedia. find(str, beg = 0 end = len(string)) Tentukan jika str terjadi dalam string atau dalam substring string jika memulai indeks beg dan end index end diberikan return index jika ditemukan dan -1 sebaliknya. index(str, beg = 0, end = len(string)) Sama seperti find (), namun menimbulkan pengecualian jika str tidak ditemukan. isalnum() Mengembalikan true jika string memiliki minimal 1 karakter dan semua karakternya alfanumerik dan false sebaliknya. isalpha() Mengembalikan true jika string memiliki minimal 1 karakter dan semua karakter adalah abjad dan false sebaliknya. isdigit() Mengembalikan true jika string hanya berisi digit dan false sebaliknya. islower() Mengembalikan true jika string memiliki setidaknya 1 karakter casing dan semua karakter casing dalam huruf kecil dan false sebaliknya. isnumeric() Mengembalikan true jika string unicode hanya berisi karakter numerik dan false sebaliknya. isspace() Mengembalikan true jika string hanya berisi karakter spasi dan false sebaliknya. istitle() Mengembalikan true jika string benar \"titlecased\" dan false sebaliknya. isupper() Mengembalikan true jika string memiliki setidaknya satu karakter casing dan semua karakter casing ada dalam huruf besar dan false sebaliknya. join(seq) Merges (concatenates) representasi string elemen dalam urutan seq menjadi string, dengan string pemisah. len(string) Mengembalikan panjang string ljust(width[, fillchar]) Mengembalikan string berlapis ruang dengan string asli dibiarkan dibenarkan ke kolom lebar total. lower() Mengonversi semua huruf besar dalam bentuk string menjadi huruf kecil. lstrip() Menghapus semua spasi utama dalam string. maketrans() Mengembalikan tabel terjemahan untuk digunakan dalam fungsi terjemahan. max(str) Mengembalikan karakter alfabetik dari string str. min(str) Mengembalikan min karakter abjad dari string str. replace(old, new [, max]) Menggantikan semua kemunculan lama dalam string dengan kejadian baru atau paling maksimal jika max diberikan. rfind(str, beg = 0,end = len(string)) Sama seperti find (), tapi cari mundur dalam string. rindex( str, beg = 0, end = len(string)) Sama seperti index (), tapi cari mundur dalam string. rjust(width,[, fillchar]) Mengembalikan string berlapis ruang dengan senar asli benar-dibenarkan untuk total kolom lebar. rstrip() Menghapus semua spasi spasi string. split(str=\"\", num=string.count(str)) Membagi string sesuai dengan pemisah str (ruang jika tidak disediakan) dan mengembalikan daftar substring; Terpecah menjadi paling banyak substring jika diberikan. splitlines( num=string.count('\\n')) Membagi string sama sekali (atau num) NEWLINEs dan mengembalikan daftar setiap baris dengan NEWLINEs dihapus. startswith(str, beg=0,end=len(string) Determines if string or a substring of string (if starting index beg and ending index end are given) starts with substring str; returns true if so and false otherwise. strip([chars]) Lakukan kedua lstrip () dan rstrip () pada string swapcase() Kasus invers untuk semua huruf dalam string. title() Mengembalikan versi string \"titlecased\", yaitu, semua kata diawali dengan huruf besar dan sisanya huruf kecil. translate(table, deletechars=\"\") Menerjemahkan string sesuai dengan tabel terjemahan str (256 karakter), menghapus string del. upper() Mengonversi huruf kecil dalam bentuk string ke huruf besar. zfill (width) Mengembalikan string asli yang tertinggal dengan angka nol ke total karakter lebar; Dimaksudkan untuk angka, zfill () mempertahankan tanda apapun yang diberikan (kurang satu nol). isdecimal() Mengembalikan nilai true jika string unicode hanya berisi karakter desimal dan false sebaliknya. Edit tutorial ini Number Python List Python","title":"String Unicode Python"},{"location":"tutorial/tanggal-waktu-python/","text":"Program Python dapat menangani tanggal dan waktu dengan beberapa cara. Konversi antara format tanggal adalah tugas umum untuk komputer. Modul waktu dan kalender Python melacak tanggal dan waktu. Apa itu Tick? Interval waktu adalah bilangan floating-point dalam satuan detik. Instansi tertentu dalam waktu dinyatakan dalam hitungan detik sejak pukul 12:00 1 Januari 1970. Dibawah ini adalah contoh penggunanaya. import time; # Digunakan untuk meng-import modul time ticks = time.time() print \"Berjalan sejak 12:00am, January 1, 1970:\", ticks #python 2 print (\"Berjalan sejak 12:00am, January 1, 1970:\", ticks) #untuk python 3 gunakan tanda kurung, print() Apa itu TimeTuple Python? Banyak fungsi waktu Python menangani waktu sebagai tuple dari 9 nomor, seperti yang terdapat pada tabel di bawah ini. Index Field Value 0 4-digit year 2008 1 Bulan 1 sampai 12 2 Hari 1 sampai 31 3 Jam 0 sampai 23 4 Menit 0 sampai 59 5 Detik 0 sampai 61 6 Hari dalam Minggu 0 sampai 6 (0 adalah Senin) 7 Hari dalam Bulan 1 sampai 366 8 Daylight savings -1, 0, 1, -1 means library determines DST Tuple di atas setara dengan struktur struct_time. Struktur ini memiliki atribut berikut Index Atribut Value 0 tm_year 2008 1 tm_mon 1 sampai 12 2 tm_mday 1 sampai 31 3 tm_hour 0 sampai 23 4 tm_min 0 sampai 59 5 tm_sec 0 sampai 61 6 tm_wday 0 sampai 6 (0 adalah Senin) 7 tm_yday 1 sampai 366 8 tm_isdst -1, 0, 1, -1 means library determines DST Mendapatkan Waktu Saat Ini Untuk menerjemahkan waktu instan dari satu detik sejak nilai floating-point ke waktu menjadi tupel waktu, lewati nilai floating-point ke fungsi (mis., Localtime) yang mengembalikan waktu tupel dengan semua sembilan item valid. import time; localtime = time.localtime(time.time()) print \"Waktu lokal saat ini :\", localtime #python 2 Mendapatkan Waktu yang berformat Anda dapat memformat kapan saja sesuai kebutuhan Anda, namun metode sederhana untuk mendapatkan waktu dalam format yang mudah dibaca adalah asctime () import time; localtime = time.asctime( time.localtime(time.time()) ) print \"Waktu lokal saat ini :\", localtime #python 2 Mendapatkan kalender dalam sebulan Modul kalender memberikan berbagai macam metode untuk dimainkan dengan kalender tahunan dan bulanan. Di sini, kami mencetak kalender untuk bulan tertentu (Jan 2008) import calendar cal = calendar.month(2008, 1) print \"Dibawah ini adalah kalender:\" #python 2 print cal Modul time pada Python Ada modul waktu populer yang tersedia dengan Python yang menyediakan fungsi untuk bekerja dengan waktu dan untuk mengkonversi antara representasi. Dibawah ini adalah tabel dari modul time pada python yang ada. Fungsi Python Penjelasan time.altzone Diimbangi zona waktu DST lokal, dalam detik di sebelah barat UTC, jika seseorang didefinisikan. Ini negatif jika zona waktu DST lokal berada di sebelah timur UTC (seperti di Eropa Barat, termasuk Inggris). Gunakan saja ini jika siang hari tidak nol. time.asctime([tupletime]) Menerima time-tupel dan mengembalikan string 24-karakter yang dapat dibaca seperti 'Tue Dec 11 18:07:14 2008'. time.clock() Mengembalikan waktu CPU saat ini sebagai jumlah floating-point detik. Untuk mengukur biaya komputasi dari berbagai pendekatan, nilai time.clock lebih bermanfaat daripada time.time (). time.ctime([secs]) Seperti asctime (localtime (detik)) dan tanpa argumen seperti asctime () time.gmtime([secs]) Menerima instan yang diungkapkan dalam hitungan detik sejak zaman dan mengembalikan waktu tuple t dengan waktu UTC. Catatan: t.tm_isdst selalu 0 time.localtime([secs]) Menerima instan yang dinyatakan dalam hitungan detik sejak zaman dan mengembalikan waktu tuple t dengan waktu setempat (t.tm_isdst adalah 0 atau 1, tergantung pada apakah DST berlaku seketika oleh peraturan lokal). time.mktime(tupletime) Menerima instan dinyatakan sebagai time-tuple di waktu setempat dan mengembalikan nilai floating-point dengan instan yang dinyatakan dalam hitungan detik sejak zaman. time.sleep(secs) Menangguhkan panggilan untuk beberapa detik. time.strftime(fmt[,tupletime]) Menerima instan dinyatakan sebagai tupel waktu di waktu lokal dan mengembalikan sebuah string yang mewakili instan seperti yang ditentukan oleh string fmt. time.strptime(str,fmt='%a %b %d %H:%M:%S %Y') Parses str sesuai dengan format string fmt dan mengembalikan format instant-tuple. time.time() Mengembalikan waktu saat ini secara instan, jumlah detik mengambang beberapa detik sejak zaman itu. time.tzset() Mengatur ulang aturan konversi waktu yang digunakan oleh rutinitas perpustakaan. Variabel lingkungan TZ menentukan bagaimana hal ini dilakukan. Ada dua atribut penting yang tersedia dengan modul waktu: Method Python Penjelasan time.timezone Atribut time.timezone adalah offset dalam detik zona waktu lokal (tanpa DST) dari UTC (> 0 di Amerika; <= 0 di sebagian besar Eropa, Asia, Afrika). time.tzname Atribut time.tzname adalah sepasang string yang bergantung pada lokal, yang merupakan nama zona waktu lokal tanpa dan dengan DST. Modul calendar pada Python Modul kalender menyimpan fungsi yang berhubungan dengan kalender, termasuk fungsi untuk mencetak kalender teks untuk bulan atau tahun tertentu. Secara default, kalender mengambil hari Senin sebagai hari pertama dalam minggu dan minggu sebagai yang terakhir. Untuk mengubah ini, fungsi call calendar.setfirstweekday (). Berikut adalah daftar fungsi yang tersedia dengan modul kalender: Fungsi Python Penjelasan calendar.calendar(year,w=2,l=1,c=6) Mengembalikan string multiline dengan kalender untuk tahun tahun yang diformat menjadi tiga kolom yang dipisahkan oleh ruang c. W adalah lebar karakter setiap tanggal; Setiap baris memiliki panjang 21 _ w + 18 + 2 _ c. L adalah jumlah baris untuk setiap minggu. calendar.firstweekday( ) Mengembalikan pengaturan saat ini untuk hari kerja yang dimulai setiap minggu. Secara default, saat kalender pertama kali diimpor, ini adalah 0, yang berarti Senin. calendar.isleap(year) Pengembalian True jika tahun adalah tahun kabisat; Jika tidak, False calendar.leapdays(y1,y2) Mengembalikan jumlah lompatan hari dalam tahun-tahun dalam rentang (y1, y2). calendar.month(year,month,w=2,l=1) Mengembalikan string multiline dengan kalender untuk bulan bulan tahun, satu baris per minggu ditambah dua baris header. W adalah lebar karakter setiap tanggal; Setiap baris memiliki panjang 7 * w + 6. L adalah jumlah baris untuk setiap minggu. calendar.monthcalendar(year,month) Mengembalikan daftar daftar int. Setiap sublist menunjukkan seminggu. Hari di luar bulan bulan tahun diatur ke 0; Hari dalam bulan ditetapkan ke hari ke bulan, 1 dan ke atas. calendar.monthrange(year,month) Mengembalikan dua bilangan bulat. Yang pertama adalah kode hari kerja untuk hari pertama bulan bulan di tahun; Yang kedua adalah jumlah hari dalam sebulan. Kode hari kerja adalah 0 (Senin) sampai 6 (Minggu); Angka bulan adalah 1 sampai 12. calendar.prcal(year,w=2,l=1,c=6) Seperti kalender cetak.calendar (tahun, w, l, c). calendar.prmonth(year,month,w=2,l=1) Seperti kalender cetak. Bulan (tahun, bulan, w, l). calendar.setfirstweekday(weekday) Mengatur hari pertama setiap minggu sampai hari kerja kode hari kerja. Kode hari kerja adalah 0 (Senin) sampai 6 (Minggu). calendar.timegm(tupletime) Kebalikan dari time.gmtime: menerima waktu instan dalam bentuk tupel waktu dan mengembalikan detik yang sama seperti jumlah floating-point dalam hitungan detik sejak zaman. calendar.weekday(year,month,day) Mengembalikan kode hari kerja untuk tanggal yang ditentukan. Kode hari kerja adalah 0 (Senin) sampai 6 (Minggu); Bulan adalah 1 (Januari) sampai 12 (Desember). Edit tutorial ini Dictionary Python Fungsi Python","title":"Tanggal & Waktu Python"},{"location":"tutorial/tanggal-waktu-python/#apa-itu-tick","text":"Interval waktu adalah bilangan floating-point dalam satuan detik. Instansi tertentu dalam waktu dinyatakan dalam hitungan detik sejak pukul 12:00 1 Januari 1970. Dibawah ini adalah contoh penggunanaya. import time; # Digunakan untuk meng-import modul time ticks = time.time() print \"Berjalan sejak 12:00am, January 1, 1970:\", ticks #python 2 print (\"Berjalan sejak 12:00am, January 1, 1970:\", ticks) #untuk python 3 gunakan tanda kurung, print()","title":"Apa itu Tick?"},{"location":"tutorial/tanggal-waktu-python/#apa-itu-timetuple-python","text":"Banyak fungsi waktu Python menangani waktu sebagai tuple dari 9 nomor, seperti yang terdapat pada tabel di bawah ini. Index Field Value 0 4-digit year 2008 1 Bulan 1 sampai 12 2 Hari 1 sampai 31 3 Jam 0 sampai 23 4 Menit 0 sampai 59 5 Detik 0 sampai 61 6 Hari dalam Minggu 0 sampai 6 (0 adalah Senin) 7 Hari dalam Bulan 1 sampai 366 8 Daylight savings -1, 0, 1, -1 means library determines DST Tuple di atas setara dengan struktur struct_time. Struktur ini memiliki atribut berikut Index Atribut Value 0 tm_year 2008 1 tm_mon 1 sampai 12 2 tm_mday 1 sampai 31 3 tm_hour 0 sampai 23 4 tm_min 0 sampai 59 5 tm_sec 0 sampai 61 6 tm_wday 0 sampai 6 (0 adalah Senin) 7 tm_yday 1 sampai 366 8 tm_isdst -1, 0, 1, -1 means library determines DST","title":"Apa itu TimeTuple Python?"},{"location":"tutorial/tanggal-waktu-python/#mendapatkan-waktu-saat-ini","text":"Untuk menerjemahkan waktu instan dari satu detik sejak nilai floating-point ke waktu menjadi tupel waktu, lewati nilai floating-point ke fungsi (mis., Localtime) yang mengembalikan waktu tupel dengan semua sembilan item valid. import time; localtime = time.localtime(time.time()) print \"Waktu lokal saat ini :\", localtime #python 2","title":"Mendapatkan Waktu Saat Ini"},{"location":"tutorial/tanggal-waktu-python/#mendapatkan-waktu-yang-berformat","text":"Anda dapat memformat kapan saja sesuai kebutuhan Anda, namun metode sederhana untuk mendapatkan waktu dalam format yang mudah dibaca adalah asctime () import time; localtime = time.asctime( time.localtime(time.time()) ) print \"Waktu lokal saat ini :\", localtime #python 2","title":"Mendapatkan Waktu yang berformat"},{"location":"tutorial/tanggal-waktu-python/#mendapatkan-kalender-dalam-sebulan","text":"Modul kalender memberikan berbagai macam metode untuk dimainkan dengan kalender tahunan dan bulanan. Di sini, kami mencetak kalender untuk bulan tertentu (Jan 2008) import calendar cal = calendar.month(2008, 1) print \"Dibawah ini adalah kalender:\" #python 2 print cal","title":"Mendapatkan kalender dalam sebulan"},{"location":"tutorial/tanggal-waktu-python/#modul-time-pada-python","text":"Ada modul waktu populer yang tersedia dengan Python yang menyediakan fungsi untuk bekerja dengan waktu dan untuk mengkonversi antara representasi. Dibawah ini adalah tabel dari modul time pada python yang ada. Fungsi Python Penjelasan time.altzone Diimbangi zona waktu DST lokal, dalam detik di sebelah barat UTC, jika seseorang didefinisikan. Ini negatif jika zona waktu DST lokal berada di sebelah timur UTC (seperti di Eropa Barat, termasuk Inggris). Gunakan saja ini jika siang hari tidak nol. time.asctime([tupletime]) Menerima time-tupel dan mengembalikan string 24-karakter yang dapat dibaca seperti 'Tue Dec 11 18:07:14 2008'. time.clock() Mengembalikan waktu CPU saat ini sebagai jumlah floating-point detik. Untuk mengukur biaya komputasi dari berbagai pendekatan, nilai time.clock lebih bermanfaat daripada time.time (). time.ctime([secs]) Seperti asctime (localtime (detik)) dan tanpa argumen seperti asctime () time.gmtime([secs]) Menerima instan yang diungkapkan dalam hitungan detik sejak zaman dan mengembalikan waktu tuple t dengan waktu UTC. Catatan: t.tm_isdst selalu 0 time.localtime([secs]) Menerima instan yang dinyatakan dalam hitungan detik sejak zaman dan mengembalikan waktu tuple t dengan waktu setempat (t.tm_isdst adalah 0 atau 1, tergantung pada apakah DST berlaku seketika oleh peraturan lokal). time.mktime(tupletime) Menerima instan dinyatakan sebagai time-tuple di waktu setempat dan mengembalikan nilai floating-point dengan instan yang dinyatakan dalam hitungan detik sejak zaman. time.sleep(secs) Menangguhkan panggilan untuk beberapa detik. time.strftime(fmt[,tupletime]) Menerima instan dinyatakan sebagai tupel waktu di waktu lokal dan mengembalikan sebuah string yang mewakili instan seperti yang ditentukan oleh string fmt. time.strptime(str,fmt='%a %b %d %H:%M:%S %Y') Parses str sesuai dengan format string fmt dan mengembalikan format instant-tuple. time.time() Mengembalikan waktu saat ini secara instan, jumlah detik mengambang beberapa detik sejak zaman itu. time.tzset() Mengatur ulang aturan konversi waktu yang digunakan oleh rutinitas perpustakaan. Variabel lingkungan TZ menentukan bagaimana hal ini dilakukan. Ada dua atribut penting yang tersedia dengan modul waktu: Method Python Penjelasan time.timezone Atribut time.timezone adalah offset dalam detik zona waktu lokal (tanpa DST) dari UTC (> 0 di Amerika; <= 0 di sebagian besar Eropa, Asia, Afrika). time.tzname Atribut time.tzname adalah sepasang string yang bergantung pada lokal, yang merupakan nama zona waktu lokal tanpa dan dengan DST.","title":"Modul time pada Python"},{"location":"tutorial/tanggal-waktu-python/#modul-calendar-pada-python","text":"Modul kalender menyimpan fungsi yang berhubungan dengan kalender, termasuk fungsi untuk mencetak kalender teks untuk bulan atau tahun tertentu. Secara default, kalender mengambil hari Senin sebagai hari pertama dalam minggu dan minggu sebagai yang terakhir. Untuk mengubah ini, fungsi call calendar.setfirstweekday (). Berikut adalah daftar fungsi yang tersedia dengan modul kalender: Fungsi Python Penjelasan calendar.calendar(year,w=2,l=1,c=6) Mengembalikan string multiline dengan kalender untuk tahun tahun yang diformat menjadi tiga kolom yang dipisahkan oleh ruang c. W adalah lebar karakter setiap tanggal; Setiap baris memiliki panjang 21 _ w + 18 + 2 _ c. L adalah jumlah baris untuk setiap minggu. calendar.firstweekday( ) Mengembalikan pengaturan saat ini untuk hari kerja yang dimulai setiap minggu. Secara default, saat kalender pertama kali diimpor, ini adalah 0, yang berarti Senin. calendar.isleap(year) Pengembalian True jika tahun adalah tahun kabisat; Jika tidak, False calendar.leapdays(y1,y2) Mengembalikan jumlah lompatan hari dalam tahun-tahun dalam rentang (y1, y2). calendar.month(year,month,w=2,l=1) Mengembalikan string multiline dengan kalender untuk bulan bulan tahun, satu baris per minggu ditambah dua baris header. W adalah lebar karakter setiap tanggal; Setiap baris memiliki panjang 7 * w + 6. L adalah jumlah baris untuk setiap minggu. calendar.monthcalendar(year,month) Mengembalikan daftar daftar int. Setiap sublist menunjukkan seminggu. Hari di luar bulan bulan tahun diatur ke 0; Hari dalam bulan ditetapkan ke hari ke bulan, 1 dan ke atas. calendar.monthrange(year,month) Mengembalikan dua bilangan bulat. Yang pertama adalah kode hari kerja untuk hari pertama bulan bulan di tahun; Yang kedua adalah jumlah hari dalam sebulan. Kode hari kerja adalah 0 (Senin) sampai 6 (Minggu); Angka bulan adalah 1 sampai 12. calendar.prcal(year,w=2,l=1,c=6) Seperti kalender cetak.calendar (tahun, w, l, c). calendar.prmonth(year,month,w=2,l=1) Seperti kalender cetak. Bulan (tahun, bulan, w, l). calendar.setfirstweekday(weekday) Mengatur hari pertama setiap minggu sampai hari kerja kode hari kerja. Kode hari kerja adalah 0 (Senin) sampai 6 (Minggu). calendar.timegm(tupletime) Kebalikan dari time.gmtime: menerima waktu instan dalam bentuk tupel waktu dan mengembalikan detik yang sama seperti jumlah floating-point dalam hitungan detik sejak zaman. calendar.weekday(year,month,day) Mengembalikan kode hari kerja untuk tanggal yang ditentukan. Kode hari kerja adalah 0 (Senin) sampai 6 (Minggu); Bulan adalah 1 (Januari) sampai 12 (Desember). Edit tutorial ini Dictionary Python Fungsi Python","title":"Modul calendar pada Python"},{"location":"tutorial/tipe-data-python/","text":"Tipe data adalah suatu media atau memori pada komputer yang digunakan untuk menampung informasi. Python sendiri mempunyai tipe data yang cukup unik bila kita bandingkan dengan bahasa pemrograman yang lain. Berikut adalah tipe data dari bahasa pemrograman Python : Tipe Data Contoh Penjelasan Boolean True atau False Menyatakan benar True yang bernilai 1 , atau salah False yang bernilai 0 String \"Ayo belajar Python\" Menyatakan karakter/kalimat bisa berupa huruf angka, dll (diapit tanda \" atau ' ) Integer 25 atau 1209 Menyatakan bilangan bulat Float 3.14 atau 0.99 Menyatakan bilangan yang mempunyai koma Hexadecimal 9a atau 1d3 Menyatakan bilangan dalam format heksa (bilangan berbasis 16) Complex 1 + 5j Menyatakan pasangan angka real dan imajiner List ['xyz', 786, 2.23] Data untaian yang menyimpan berbagai tipe data dan isinya bisa diubah-ubah Tuple ('xyz', 768, 2.23) Data untaian yang menyimpan berbagai tipe data tapi isinya tidak bisa diubah Dictionary {'nama': 'adi','id':2} Data untaian yang menyimpan berbagai tipe data berupa pasangan penunjuk dan nilai Untuk mencoba berbagai macam tipe data, silahkan coba script Python dibawah ini. #tipe data Boolean print(True) #tipe data String print(\"Ayo belajar Python\") print('Belajar Python Sangat Mudah') #tipe data Integer print(20) #tipe data Float print(3.14) #tipe data Hexadecimal print(9a) #tipe data Complex print(5j) #tipe data List print([1,2,3,4,5]) print([\"satu\", \"dua\", \"tiga\"]) #tipe data Tuple print((1,2,3,4,5)) print((\"satu\", \"dua\", \"tiga\")) #tipe data Dictionary print({\"nama\":\"Budi\", 'umur':20}) #tipe data Dictionary dimasukan ke dalam variabel biodata biodata = {\"nama\":\"Andi\", 'umur':21} #proses inisialisasi variabel biodata print(biodata) #proses pencetakan variabel biodata yang berisi tipe data Dictionary print(type(biodata)) #fungsi untuk mengecek jenis tipe data. akan tampil yang berarti dict adalah tipe data dictionary Edit tutorial ini Komentar Python Variabel Python","title":"Tipe Data Python"},{"location":"tutorial/tuple-python/","text":"Sebuah tupel adalah urutan objek Python yang tidak berubah. Tupel adalah urutan, seperti daftar. Perbedaan utama antara tupel dan daftarnya adalah bahwa tupel tidak dapat diubah tidak seperti List Python. Tupel menggunakan tanda kurung, sedangkan List Python menggunakan tanda kurung siku. Membuat tuple semudah memasukkan nilai-nilai yang dipisahkan koma. Secara opsional, Anda dapat memasukkan nilai-nilai yang dipisahkan koma ini di antara tanda kurung juga. Sebagai contoh : #Contoh sederhana pembuatan tuple pada bahasa pemrograman python tup1 = ('fisika', 'kimia', 1993, 2017) tup2 = (1, 2, 3, 4, 5 ) tup3 = \"a\", \"b\", \"c\", \"d\" Tupel kosong ditulis sebagai dua tanda kurung yang tidak berisi apa-apa, contohnya : tup1 = (); Untuk menulis tupel yang berisi satu nilai, Anda harus memasukkan koma, meskipun hanya ada satu nilai, contohnya : tup1 = (50,) Seperti indeks String, indeks tuple mulai dari 0, dan mereka dapat diiris, digabungkan, dan seterusnya Akses Nilai Dalam Tuple Python Untuk mengakses nilai dalam tupel, gunakan tanda kurung siku untuk mengiris beserta indeks atau indeks untuk mendapatkan nilai yang tersedia pada indeks tersebut. Sebagai contoh : #Cara mengakses nilai tuple tup1 = ('fisika', 'kimia', 1993, 2017) tup2 = (1, 2, 3, 4, 5, 6, 7 ) print (\"tup1[0]: \", tup1[0]) print (\"tup2[1:5]: \", tup2[1:5]) Setelah Anda mengeksekusi kode diatas, hasilnya akan seperti dibawah ini : tup1[0]: fisika tup2[1:5]: (2, 3, 4, 5) Update Nilai Dalam Tuple Python Tuple tidak berubah, yang berarti Anda tidak dapat memperbarui atau mengubah nilai elemen tupel. Anda dapat mengambil bagian dari tupel yang ada untuk membuat tupel baru seperti ditunjukkan oleh contoh berikut. tup1 = (12, 34.56) tup2 = ('abc', 'xyz') # Aksi seperti dibawah ini tidak bisa dilakukan pada tuple python # Karena memang nilai pada tuple python tidak bisa diubah # tup1[0] = 100; # Jadi, buatlah tuple baru sebagai berikut tup3 = tup1 + tup2 print (tup3) Hapus Nilai Dalam Tuple Python Menghapus elemen tuple individual tidak mungkin dilakukan. Tentu saja, tidak ada yang salah dengan menggabungkan tupel lain dengan unsur-unsur yang tidak diinginkan dibuang. Untuk secara eksplisit menghapus keseluruhan tuple, cukup gunakan del statement. Sebagai contoh tup = ('fisika', 'kimia', 1993, 2017) print(tup) # hapus tuple dengan statement del del tup # lalu buat kembali tuple yang baru dengan elemen yang diinginkan tup = ('Bahasa', 'Literasi', 2020) print(\"Setelah menghapus tuple :\", tup) Operasi Dasar Pada Tuple Python Tupel merespons operator + dan * sama seperti String; Mereka berarti penggabungan dan pengulangan di sini juga berlaku, kecuali hasilnya adalah tupel baru, bukan string. Sebenarnya, Tuple merespons semua operasi urutan umum yang kami gunakan pada String di bab sebelumnya. Dibawah ini adalah tabel daftar operasi dasar pada Tuple python Python Expression Hasil Penjelasan len((1, 2, 3)) 3 Length (1, 2, 3) + (4, 5, 6) (1, 2, 3, 4, 5, 6) Concatenation ('Halo!',) \\* 4 ('Halo!', 'Halo!', 'Halo!', 'Halo!') Repetition 3 in (1, 2, 3) True Membership for x in (1,2,3) : print (x, end = ' ') 1 2 3 Iteration Indexing, Slicing dan Matrix Pada Tuple Python Karena tupel adalah urutan, pengindeksan dan pengiris bekerja dengan cara yang sama untuk tupel seperti pada String, dengan asumsi masukan berikut Dengan asumsi input berikut : T = ('C++', 'Java', 'Python') Python Expression Hasil Penjelasan T[2] 'Python' Offset mulai dari nol T[-2] 'Java' Negatif: hitung dari kanan T[1:] ('Java', 'Python') Slicing mengambil bagian Fungsi Build-in Pada Tuple Python Python menyertakan fungsi built-in sebagai berikut Python Function Penjelasan cmp(tuple1, tuple2) # Tidak lagi tersedia dengan Python 3 len(tuple) Memberikan total panjang tuple. max(tuple) Mengembalikan item dari tuple dengan nilai maks. min(tuple) Mengembalikan item dari tuple dengan nilai min. tuple(seq) Mengubah seq menjadi tuple. Edit tutorial ini List Python Dictionary Python","title":"Tuple Python"},{"location":"tutorial/tuple-python/#akses-nilai-dalam-tuple-python","text":"Untuk mengakses nilai dalam tupel, gunakan tanda kurung siku untuk mengiris beserta indeks atau indeks untuk mendapatkan nilai yang tersedia pada indeks tersebut. Sebagai contoh : #Cara mengakses nilai tuple tup1 = ('fisika', 'kimia', 1993, 2017) tup2 = (1, 2, 3, 4, 5, 6, 7 ) print (\"tup1[0]: \", tup1[0]) print (\"tup2[1:5]: \", tup2[1:5]) Setelah Anda mengeksekusi kode diatas, hasilnya akan seperti dibawah ini : tup1[0]: fisika tup2[1:5]: (2, 3, 4, 5)","title":"Akses Nilai Dalam Tuple Python"},{"location":"tutorial/tuple-python/#update-nilai-dalam-tuple-python","text":"Tuple tidak berubah, yang berarti Anda tidak dapat memperbarui atau mengubah nilai elemen tupel. Anda dapat mengambil bagian dari tupel yang ada untuk membuat tupel baru seperti ditunjukkan oleh contoh berikut. tup1 = (12, 34.56) tup2 = ('abc', 'xyz') # Aksi seperti dibawah ini tidak bisa dilakukan pada tuple python # Karena memang nilai pada tuple python tidak bisa diubah # tup1[0] = 100; # Jadi, buatlah tuple baru sebagai berikut tup3 = tup1 + tup2 print (tup3)","title":"Update Nilai Dalam Tuple Python"},{"location":"tutorial/tuple-python/#hapus-nilai-dalam-tuple-python","text":"Menghapus elemen tuple individual tidak mungkin dilakukan. Tentu saja, tidak ada yang salah dengan menggabungkan tupel lain dengan unsur-unsur yang tidak diinginkan dibuang. Untuk secara eksplisit menghapus keseluruhan tuple, cukup gunakan del statement. Sebagai contoh tup = ('fisika', 'kimia', 1993, 2017) print(tup) # hapus tuple dengan statement del del tup # lalu buat kembali tuple yang baru dengan elemen yang diinginkan tup = ('Bahasa', 'Literasi', 2020) print(\"Setelah menghapus tuple :\", tup)","title":"Hapus Nilai Dalam Tuple Python"},{"location":"tutorial/tuple-python/#operasi-dasar-pada-tuple-python","text":"Tupel merespons operator + dan * sama seperti String; Mereka berarti penggabungan dan pengulangan di sini juga berlaku, kecuali hasilnya adalah tupel baru, bukan string. Sebenarnya, Tuple merespons semua operasi urutan umum yang kami gunakan pada String di bab sebelumnya. Dibawah ini adalah tabel daftar operasi dasar pada Tuple python Python Expression Hasil Penjelasan len((1, 2, 3)) 3 Length (1, 2, 3) + (4, 5, 6) (1, 2, 3, 4, 5, 6) Concatenation ('Halo!',) \\* 4 ('Halo!', 'Halo!', 'Halo!', 'Halo!') Repetition 3 in (1, 2, 3) True Membership for x in (1,2,3) : print (x, end = ' ') 1 2 3 Iteration","title":"Operasi Dasar Pada Tuple Python"},{"location":"tutorial/tuple-python/#indexing-slicing-dan-matrix-pada-tuple-python","text":"Karena tupel adalah urutan, pengindeksan dan pengiris bekerja dengan cara yang sama untuk tupel seperti pada String, dengan asumsi masukan berikut Dengan asumsi input berikut : T = ('C++', 'Java', 'Python') Python Expression Hasil Penjelasan T[2] 'Python' Offset mulai dari nol T[-2] 'Java' Negatif: hitung dari kanan T[1:] ('Java', 'Python') Slicing mengambil bagian","title":"Indexing, Slicing dan Matrix Pada Tuple Python"},{"location":"tutorial/tuple-python/#fungsi-build-in-pada-tuple-python","text":"Python menyertakan fungsi built-in sebagai berikut Python Function Penjelasan cmp(tuple1, tuple2) # Tidak lagi tersedia dengan Python 3 len(tuple) Memberikan total panjang tuple. max(tuple) Mengembalikan item dari tuple dengan nilai maks. min(tuple) Mengembalikan item dari tuple dengan nilai min. tuple(seq) Mengubah seq menjadi tuple. Edit tutorial ini List Python Dictionary Python","title":"Fungsi Build-in Pada Tuple Python"},{"location":"tutorial/variabel-python/","text":"Variabel adalah lokasi memori yang dicadangkan untuk menyimpan nilai-nilai. Ini berarti bahwa ketika Anda membuat sebuah variabel Anda memesan beberapa ruang di memori. Variabel menyimpan data yang dilakukan selama program dieksekusi, yang nantinya isi dari variabel tersebut dapat diubah oleh operasi - operasi tertentu pada program yang menggunakan variabel. Variabel dapat menyimpan berbagai macam tipe data. Di dalam pemrograman Python, variabel mempunyai sifat yang dinamis, artinya variabel Python tidak perlu didekralasikan tipe data tertentu dan variabel Python dapat diubah saat program dijalankan. Penulisan variabel Python sendiri juga memiliki aturan tertentu, yaitu : Karakter pertama harus berupa huruf atau garis bawah/underscore _ Karakter selanjutnya dapat berupa huruf, garis bawah/underscore _ atau angka Karakter pada nama variabel bersifat sensitif (case-sensitif). Artinya huruf kecil dan huruf besar dibedakan. Sebagai contoh, variabel namaDepan dan namadepan adalah variabel yang berbeda. Untuk mulai membuat variabel di Python caranya sangat mudah, Anda cukup menuliskan variabel lalu mengisinya dengan suatu nilai dengan cara menambahkan tanda sama dengan = diikuti dengan nilai yang ingin dimasukan. Dibawah ini adalah contoh penggunaan variabel dalam bahasa pemrograman Python #proses memasukan data ke dalam variabel nama = \"John Doe\" #proses mencetak variabel print(nama) #nilai dan tipe data dalam variabel dapat diubah umur = 20 #nilai awal print(umur) #mencetak nilai umur type(umur) #mengecek tipe data umur umur = \"dua puluh satu\" #nilai setelah diubah print(umur) #mencetak nilai umur type(umur) #mengecek tipe data umur namaDepan = \"Budi\" namaBelakang = \"Susanto\" nama = namaDepan + \" \" + namaBelakang umur = 22 hobi = \"Berenang\" print(\"Biodata\\n\", nama, \"\\n\", umur, \"\\n\", hobi) #contoh variabel lainya inivariabel = \"Halo\" ini_juga_variabel = \"Hai\" \\_inivariabeljuga = \"Hi\" inivariabel222 = \"Bye\" panjang = 10 lebar = 5 luas = panjang \\* lebar print(luas) Edit tutorial ini Tipe Data Python Operator Python","title":"Variabel Python"}]} \ No newline at end of file diff --git a/search/worker.js b/search/worker.js new file mode 100644 index 00000000..8628dbce --- /dev/null +++ b/search/worker.js @@ -0,0 +1,133 @@ +var base_path = 'function' === typeof importScripts ? '.' : '/search/'; +var allowSearch = false; +var index; +var documents = {}; +var lang = ['en']; +var data; + +function getScript(script, callback) { + console.log('Loading script: ' + script); + $.getScript(base_path + script).done(function () { + callback(); + }).fail(function (jqxhr, settings, exception) { + console.log('Error: ' + exception); + }); +} + +function getScriptsInOrder(scripts, callback) { + if (scripts.length === 0) { + callback(); + return; + } + getScript(scripts[0], function() { + getScriptsInOrder(scripts.slice(1), callback); + }); +} + +function loadScripts(urls, callback) { + if( 'function' === typeof importScripts ) { + importScripts.apply(null, urls); + callback(); + } else { + getScriptsInOrder(urls, callback); + } +} + +function onJSONLoaded () { + data = JSON.parse(this.responseText); + var scriptsToLoad = ['lunr.js']; + if (data.config && data.config.lang && data.config.lang.length) { + lang = data.config.lang; + } + if (lang.length > 1 || lang[0] !== "en") { + scriptsToLoad.push('lunr.stemmer.support.js'); + if (lang.length > 1) { + scriptsToLoad.push('lunr.multi.js'); + } + if (lang.includes("ja") || lang.includes("jp")) { + scriptsToLoad.push('tinyseg.js'); + } + for (var i=0; i < lang.length; i++) { + if (lang[i] != 'en') { + scriptsToLoad.push(['lunr', lang[i], 'js'].join('.')); + } + } + } + loadScripts(scriptsToLoad, onScriptsLoaded); +} + +function onScriptsLoaded () { + console.log('All search scripts loaded, building Lunr index...'); + if (data.config && data.config.separator && data.config.separator.length) { + lunr.tokenizer.separator = new RegExp(data.config.separator); + } + + if (data.index) { + index = lunr.Index.load(data.index); + data.docs.forEach(function (doc) { + documents[doc.location] = doc; + }); + console.log('Lunr pre-built index loaded, search ready'); + } else { + index = lunr(function () { + if (lang.length === 1 && lang[0] !== "en" && lunr[lang[0]]) { + this.use(lunr[lang[0]]); + } else if (lang.length > 1) { + this.use(lunr.multiLanguage.apply(null, lang)); // spread operator not supported in all browsers: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator#Browser_compatibility + } + this.field('title'); + this.field('text'); + this.ref('location'); + + for (var i=0; i < data.docs.length; i++) { + var doc = data.docs[i]; + this.add(doc); + documents[doc.location] = doc; + } + }); + console.log('Lunr index built, search ready'); + } + allowSearch = true; + postMessage({config: data.config}); + postMessage({allowSearch: allowSearch}); +} + +function init () { + var oReq = new XMLHttpRequest(); + oReq.addEventListener("load", onJSONLoaded); + var index_path = base_path + '/search_index.json'; + if( 'function' === typeof importScripts ){ + index_path = 'search_index.json'; + } + oReq.open("GET", index_path); + oReq.send(); +} + +function search (query) { + if (!allowSearch) { + console.error('Assets for search still loading'); + return; + } + + var resultDocuments = []; + var results = index.search(query); + for (var i=0; i < results.length; i++){ + var result = results[i]; + doc = documents[result.ref]; + doc.summary = doc.text.substring(0, 200); + resultDocuments.push(doc); + } + return resultDocuments; +} + +if( 'function' === typeof importScripts ) { + onmessage = function (e) { + if (e.data.init) { + init(); + } else if (e.data.query) { + postMessage({ results: search(e.data.query) }); + } else { + console.error("Worker - Unrecognized message: " + e); + } + }; +} diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 00000000..80455a26 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,203 @@ + + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + + None + 2024-11-11 + daily + + \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz new file mode 100644 index 00000000..f335c916 Binary files /dev/null and b/sitemap.xml.gz differ diff --git a/tutorial/akses-database-python/index.html b/tutorial/akses-database-python/index.html new file mode 100644 index 00000000..ab337658 --- /dev/null +++ b/tutorial/akses-database-python/index.html @@ -0,0 +1,532 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pengembangan Web Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ + +
+ + + + +
+

Pengembangan Web Python

+

Standar Interface Python untuk database adalah Python DB-API. Kebanyakan Interface database Python mematuhi standar ini.

+

Anda bisa memilih database yang tepat untuk aplikasi Anda. API Database Python mendukung berbagai macam server database seperti. +- GadFly +- mSQL +- MySQL +- PostgreSQL +- Microsoft SQL Server 2000 +- Informix +- Interbase +- Oracle +- Sybase +- SQLite

+

Berikut adalah link untuk mempelajari lebih lengkap daftar antarmuka/interface database Python - Antarmuka dan API Database Python. Anda harus mendownload modul DB API terpisah untuk setiap database yang perlu Anda akses. Sebagai contoh, jika Anda perlu mengakses database Oracle dan juga database MySQL, Anda harus mendownload kedua modul database Oracle dan MySQL.

+

API DB menyediakan standar minimal untuk bekerja dengan database menggunakan struktur dan sintaks Python sedapat mungkin. API ini meliputi:

+
    +
  • Mengimpor modul API.
  • +
  • Mendapatkan koneksi dengan database.
  • +
  • Menerbitkan pernyataan SQL dan prosedur tersimpan.
  • +
  • Menutup koneksi
  • +
+

Python memiliki dukungan built-in untuk SQLite. Pada bagian ini, kita akan mempelajari semua konsep menggunakan MySQL. Modul MySQLdb, antarmuka yang populer dengan MySQL tidak kompatibel dengan Python 3. Sebagai gantinya, kita akan menggunakan modul PyMySQL.

+

Apa itu PyMySQL ?

+

PyMySQL adalah sebuah antarmuka untuk menghubungkan ke server database MySQL dari Python. Ini mengimplementasikan API Database Python v2.0 dan berisi perpustakaan klien MySQL murni-Python. Tujuan PyMySQL adalah penggantian drop-in untuk MySQLdb. Anda dapat melihat dokumentasi lengkap penggunaan PyMySQL di https://pymysql.readthedocs.io/en/latest/.

+

Cara Instal PyMySQL

+

Sebelum melanjutka, pastikan Anda telah menginstal PyMySQL di komputer Anda. Cukup ketik berikut ini di skrip Python Anda dan jalankan.

+

import pymysql.cursors

+

Jika menghasilkan hasil berikut, berarti modul MySQLdb tidak terpasang:

+

Traceback (most recent call last): + File "test.py", line 3, in + Import PyMySQL +ImportError: No module named PyMySQL

+

Untuk menginstal modul PyMySQL silahkan gunakan command/perintah berikut di command prompt:

+

python -m pip install PyMySQL

+

Database Connection

+

Sebelum terhubung ke database MySQL, pastikan beberapa hal dibawah ini :

+
    +
  • Anda telah membuat database TESTDB.
  • +
  • Anda telah membuat tabel EMPLOYEE di TESTDB.
  • +
  • Tabel ini memiliki bidang FIRST_NAME, LAST_NAME, AGE, SEX, dan INCOME.
  • +
  • User ID "testuser" dan password "test123" diatur untuk mengakses TESTDB.
  • +
  • Python modul PyMySQL terinstal dengan benar pada mesin Anda.
  • +
  • Anda telah melalui tutorial MySQL untuk memahami Dasar-Dasar MySQL
  • +
+

Berikut ini adalah contoh koneksi dengan database MySQL "TESTDB"

+
import pymysql.cursors
+
+# Open database connection
+db = pymysql.connect("localhost","testuser","test123","TESTDB" )
+
+# prepare a cursor object using cursor() method
+cursor = db.cursor()
+
+# execute SQL query using execute() method.
+cursor.execute("SELECT VERSION()")
+
+# Fetch a single row using fetchone() method.
+data = cursor.fetchone()
+
+print ("Database version : %s " % data)
+
+# disconnect from server
+db.close()
+
+

Membuat Tabel Database

+
import pymysql.cursors
+
+# Open database connection
+db = pymysql.connect("localhost","testuser","test123","TESTDB" )
+
+# prepare a cursor object using cursor() method
+cursor = db.cursor()
+
+# Drop table if it already exist using execute() method.
+cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
+
+# Create table as per requirement
+sql = """CREATE TABLE EMPLOYEE (
+   FIRST_NAME  CHAR(20) NOT NULL,
+   LAST_NAME  CHAR(20),
+   AGE INT,
+   SEX CHAR(1),
+   INCOME FLOAT )"""
+
+cursor.execute(sql)
+
+# disconnect from server
+db.close()
+
+

Operasi Insert

+

Contoh berikut, mengeksekusi pernyataan SQL INSERT untuk membuat catatan di tabel EMPLOYEE

+
import pymysql.cursors
+
+# Open database connection
+db = pymysql.connect("localhost","testuser","test123","TESTDB" )
+
+# prepare a cursor object using cursor() method
+cursor = db.cursor()
+
+# Prepare SQL query to INSERT a record into the database.
+sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
+   LAST_NAME, AGE, SEX, INCOME)
+   VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
+try:
+   # Execute the SQL command
+   cursor.execute(sql)
+   # Commit your changes in the database
+   db.commit()
+except:
+   # Rollback in case there is any error
+   db.rollback()
+
+# disconnect from server
+db.close()
+
+

Contoh di atas bisa dituliskan sebagai berikut untuk membuat query SQL secara dinamis

+
import pymysql.cursors
+
+# Open database connection
+db = pymysql.connect("localhost","testuser","test123","TESTDB" )
+
+# prepare a cursor object using cursor() method
+cursor = db.cursor()
+
+# Prepare SQL query to INSERT a record into the database.
+sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
+   LAST_NAME, AGE, SEX, INCOME) \
+   VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
+   ('Mac', 'Mohan', 20, 'M', 2000)
+try:
+   # Execute the SQL command
+   cursor.execute(sql)
+   # Commit your changes in the database
+   db.commit()
+except:
+   # Rollback in case there is any error
+   db.rollback()
+
+# disconnect from server
+db.close()
+
+

Read Operation

+

READ Operation pada database apapun berarti mengambil beberapa informasi berguna dari database.

+

Setelah koneksi database terbentuk, Anda siap untuk membuat query ke dalam database ini. Anda bisa menggunakan metode fetchone() +untuk mengambil satu record atau fetchall() metode untuk mengambil beberapa nilai dari tabel database.

+

Fetchone () - Ini mengambil baris berikut dari kumpulan hasil query. Set hasil adalah objek yang dikembalikan saat objek kursor digunakan untuk query tabel.

+

Fetchall () - Ini menjemput semua baris dalam kumpulan hasil. Jika beberapa baris telah diekstraksi dari himpunan hasil, maka akan diambil baris yang tersisa dari kumpulan hasil.

+

Rowcount - Ini adalah atribut read-only dan mengembalikan jumlah baris yang dipengaruhi oleh metode execute ().

+

Prosedur berikut menanyakan semua catatan dari tabel EMPLOYEE yang memiliki gaji lebih dari 1000

+
import pymysql.cursors
+
+# Open database connection
+db = pymysql.connect("localhost","testuser","test123","TESTDB" )
+
+# prepare a cursor object using cursor() method
+cursor = db.cursor()
+
+# Prepare SQL query to INSERT a record into the database.
+sql = "SELECT * FROM EMPLOYEE \
+       WHERE INCOME > '%d'" % (1000)
+try:
+   # Execute the SQL command
+   cursor.execute(sql)
+   # Fetch all the rows in a list of lists.
+   results = cursor.fetchall()
+   for row in results:
+      fname = row[0]
+      lname = row[1]
+      age = row[2]
+      sex = row[3]
+      income = row[4]
+      # Now print fetched result
+      print ("fname = %s,lname = %s,age = %d,sex = %s,income = %d" % \
+             (fname, lname, age, sex, income ))
+except:
+   print ("Error: unable to fetch data")
+
+# menutup koneksi ke server
+db.close()
+
+

Setelah Anda eksekusi kode diatas, akan muncul hasil seperti dibawah ini : +fname = Mac, lname = Mohan, age = 20, sex = M, income = 2000

+

Update Operation

+

Operasi UPDATE pada database apapun berarti mengupdate satu atau lebih catatan, yang sudah tersedia di database. +Prosedur berikut memperbarui semua catatan yang memiliki SEX sebagai 'M'. Di sini, kita meningkatkan UMUR semua laki-laki satu tahun.

+
import pymysql.cursors
+
+# Open database connection
+db = pymysql.connect("localhost","testuser","test123","TESTDB" )
+
+# prepare a cursor object using cursor() method
+cursor = db.cursor()
+
+# Prepare SQL query to UPDATE required records
+sql = "UPDATE EMPLOYEE SET AGE = AGE + 1
+                          WHERE SEX = '%c'" % ('M')
+try:
+   # Execute the SQL command
+   cursor.execute(sql)
+   # Commit your changes in the database
+   db.commit()
+except:
+   # Rollback in case there is any error
+   db.rollback()
+
+# disconnect from server
+db.close()
+
+

Delete Operation

+

Operasi DELETE diperlukan bila Anda ingin menghapus beberapa catatan dari database Anda. Berikut ini adalah prosedur untuk menghapus semua catatan dari EMPLOYEE dimana AGE lebih dari 20

+
import pymysql.cursors
+
+# Open database connection
+db = pymysql.connect("localhost","testuser","test123","TESTDB" )
+
+# prepare a cursor object using cursor() method
+cursor = db.cursor()
+
+# Prepare SQL query to DELETE required records
+sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
+try:
+   # Execute the SQL command
+   cursor.execute(sql)
+   # Commit your changes in the database
+   db.commit()
+except:
+   # Rollback in case there is any error
+   db.rollback()
+
+# disconnect from server
+db.close()
+
+

Selain itu masih ada beberapa operasi sebagai berikut :

+
    +
  • Commit Operation db.commit()
  • +
  • Rollback Operation db.rollback()
  • +
  • Disconnect Operation db.close()
  • +
+

Jika Anda menginginkan dokumentasi yang lebih lengkap dari bahasa pemrograman python, silahkan buka dokumentasi resmi dari Python - Dokumentasi Lengkap Python

+
+

Edit tutorial ini

+
+ +
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/tutorial/apa-itu-python/index.html b/tutorial/apa-itu-python/index.html new file mode 100644 index 00000000..6d49296d --- /dev/null +++ b/tutorial/apa-itu-python/index.html @@ -0,0 +1,301 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pendahuluan Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ + +
+ + + + +
+

Pendahuluan Python

+

Logo Python

+

Python adalah bahasa pemrograman interpretatif multiguna. Tidak seperti bahasa lain yang susah untuk dibaca dan dipahami, python lebih menekankan pada keterbacaan kode agar lebih mudah untuk memahami sintaks. Hal ini membuat Python sangat mudah dipelajari baik untuk pemula maupun untuk yang sudah menguasai bahasa pemrograman lain.

+

Bahasa ini muncul pertama kali pada tahun 1991, dirancang oleh seorang bernama Guido van Rossum. Sampai saat ini Python masih dikembangkan oleh Python Software Foundation. Bahasa Python mendukung hampir semua sistem operasi, bahkan untuk sistem operasi Linux, hampir semua distronya sudah menyertakan Python di dalamnya.

+

Dengan kode yang simpel dan mudah diimplementasikan, seorang programmer dapat lebih mengutamakan pengembangan aplikasi yang dibuat, bukan malah sibuk mencari syntax error.

+
print("Python sangat simpel")
+
+

Hanya dengan menuliskan kode print seperti yang diatas, anda sudah bisa mencetak apapun yang anda inginkan di dalam tanda kurung (). Dibagian akhir kode pun, anda tidak harus mengakhirnya dengan tanda semicolon ;

+
+
+

Edit tutorial ini

+
+ +
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/tutorial/dictionary-python/index.html b/tutorial/dictionary-python/index.html new file mode 100644 index 00000000..8f06dc99 --- /dev/null +++ b/tutorial/dictionary-python/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Dictionary Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ + +
+ + + + +
+

Dictionary Python

+

Dictionary Python berbeda dengan List ataupun Tuple. Karena setiap urutanya berisi key dan value. Setiap key dipisahkan dari value-nya oleh titik dua (:), item dipisahkan oleh koma, dan semuanya tertutup dalam kurung kurawal. Dictionary kosong tanpa barang ditulis hanya dengan dua kurung kurawal, seperti ini: {}.

+

Nilai kamus bisa berupa tipe apa pun, namun key harus berupa tipe data yang tidak berubah seperti string, angka, atau tupel.

+

Akses Nilai Dalam Dictionary Python

+

Untuk mengakses elemen Dictionary, Anda dapat menggunakan tanda kurung siku yang sudah dikenal bersama dengan key untuk mendapatkan nilainya. Berikut adalah contoh sederhananya :

+
#Contoh cara membuat Dictionary pada Python
+
+dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
+print ("dict['Name']: ", dict['Name'])
+print ("dict['Age']: ", dict['Age'])
+
+

Update Nilai Dalam Dictionary Python

+

Anda dapat memperbarui Dictionary dengan menambahkan entri baru atau pasangan nilai kunci, memodifikasi entri yang ada, atau menghapus entri yang ada seperti ditunjukkan pada contoh sederhana yang diberikan di bawah ini.

+
#Update dictionary python
+
+dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
+dict['Age'] = 8; # Mengubah entri yang sudah ada
+dict['School'] = "DPS School" # Menambah entri baru
+
+print ("dict['Age']: ", dict['Age'])
+print ("dict['School']: ", dict['School'])
+
+

Hapus Elemen Dictionary Python

+

Anda dapat menghapus elemen Dictionary individual atau menghapus keseluruhan isi Dictionary. Anda juga dapat menghapus seluruh Dictionary dalam satu operasi.

+

Untuk menghapus seluruh Dictionary secara eksplisit, cukup gunakan del statement. Berikut adalah contoh sederhana :

+
#Contoh cara menghapus pada Dictionary Python
+
+dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
+
+del dict['Name'] # hapus entri dengan key 'Name'
+dict.clear() # hapus semua entri di dict
+del dict # hapus dictionary yang sudah ada
+
+print ("dict['Age']: ", dict['Age'])
+print ("dict['School']: ", dict['School'])
+
+

Fungsi Build-in Pada Dictionary Python

+

Python menyertakan fungsi built-in sebagai berikut :

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Fungsi PythonPenjelasan
cmp(dict1, dict2)Membandingkan unsur keduanya.
len(dict)Memberikan panjang total Dictionary. Ini sama dengan jumlah item dalam Dictionary.
str(dict)Menghasilkan representasi string yang dapat dicetak dari Dictionary
type(variable)Mengembalikan tipe variabel yang lulus. Jika variabel yang dilewatkan adalah Dictionary, maka akan mengembalikan tipe Dictionary.
+

Method Build-in Pada Dictionary Python

+

Python menyertakan method built-in sebagai berikut :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method PythonPenjelasan
dict.clear()Menghapus semua elemen Dictionary
dict.copy()Mengembalikan salinan Dictionary
dict.fromkeys()Buat Dictionary baru dengan kunci dari seq dan nilai yang disetel ke nilai.
dict.get(key, default=None)For key, nilai pengembalian atau default jika tombol tidak ada dalam Dictionary
dict.has_key(key)Mengembalikan true jika key dalam Dictionary, false sebaliknya
dict.items()Mengembalikan daftar dari pasangan tuple dictionary (key, value)
dict.keys()Mengembalikan daftar key dictionary
dict.setdefault(key, default=None)Mirip dengan get (), tapi akan mengatur dict [key] = default jika kunci belum ada di dict
dict.update(dict2)Menambahkan pasangan kunci kata kunci dict2 ke dict
dict.values()Mengembalikan daftar nilai dictionary
+
+
+

Edit tutorial ini

+
+ +
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/tutorial/exception-python/index.html b/tutorial/exception-python/index.html new file mode 100644 index 00000000..0526eadb --- /dev/null +++ b/tutorial/exception-python/index.html @@ -0,0 +1,437 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Exception Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ + +
+ + + + +
+

Exception Python

+

Python menyediakan dua fitur yang sangat penting untuk menangani kesalahan tak terduga dalam program Python Anda dan menambahkan kemampuan debugging di dalamnya.

+
    +
  • Exception Handling
  • +
  • Assertions + Exception adalah sebuah peristiwa, yang terjadi selama pelaksanaan program yang mengganggu aliran normal instruksi program. Secara umum, ketika skrip Python menemukan situasi yang tidak dapat diatasi, hal itu menimbulkan pengecualian. Exception adalah objek Python yang mewakili kesalahan.
  • +
+

Ketika skrip Python menimbulkan Exception, ia harus menangani Exception begitu saja sehingga berhenti dan berhenti.

+

Standard Exceptions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NamaPenjelasan
ExceptionKelas dasar untuk semua pengecualian / exception
StopIterationDibesarkan ketika metode (iterator) berikutnya dari iterator tidak mengarah ke objek apa pun.
SystemExitDibesarkan oleh fungsi sys.exit ().
StandardErrorKelas dasar untuk semua pengecualian built-in kecuali StopIteration dan SystemExit.
ArithmeticErrorKelas dasar untuk semua kesalahan yang terjadi untuk perhitungan numerik.
OverflowErrorDibesarkan saat perhitungan melebihi batas maksimum untuk tipe numerik.
FloatingPointErrorDibesarkan saat perhitungan floating point gagal.
ZeroDivisonErrorDibesarkan saat pembagian atau modulo nol dilakukan untuk semua tipe numerik.
AssertionErrorDibesarkan jika terjadi kegagalan pernyataan Assert.
AttributeErrorDibesarkan jika terjadi kegagalan referensi atribut atau penugasan.
EOFErrorDibesarkan bila tidak ada input dari fungsi raw_input () atau input () dan akhir file tercapai.
ImportErrorDibesarkan saat sebuah pernyataan impor gagal.
KeyboardInterruptDibesarkan saat pengguna menyela eksekusi program, biasanya dengan menekan Ctrl + c.
LookupErrorKelas dasar untuk semua kesalahan pencarian.
IndexErrorDibesarkan saat sebuah indeks tidak ditemukan secara berurutan.
KeyErrorDibesarkan saat kunci yang ditentukan tidak ditemukan dalam kamus.
NameErrorDibesarkan saat pengenal tidak ditemukan di namespace lokal atau global.
UnboundLocalErrorDibesarkan saat mencoba mengakses variabel lokal dalam suatu fungsi atau metode namun tidak ada nilai yang ditugaskan padanya.
EnvironmentErrorKelas dasar untuk semua pengecualian yang terjadi di luar lingkungan Python.
IOErrorDibesarkan saat operasi input / output gagal, seperti pernyataan cetak atau fungsi open () saat mencoba membuka file yang tidak ada.
OSErrorDibangkitkan untuk kesalahan terkait sistem operasi.
SyntaxErrorDibesarkan saat ada kesalahan dengan sintaks Python.
IndentationErrorDibesarkan saat indentasi tidak ditentukan dengan benar.
SystemErrorDibesarkan saat penafsir menemukan masalah internal, namun bila kesalahan ini ditemui juru bahasa Python tidak keluar.
SystemExitDibesarkan saat juru bahasa Python berhenti dengan menggunakan fungsi sys.exit (). Jika tidak ditangani dalam kode, menyebabkan penafsir untuk keluar.
TypeErrorDibesarkan saat operasi atau fungsi dicoba yang tidak valid untuk tipe data yang ditentukan.
ValueErrorDibesarkan ketika fungsi bawaan untuk tipe data memiliki jenis argumen yang valid, namun argumen tersebut memiliki nilai yang tidak valid yang ditentukan.
RuntimeErrorDibesarkan saat kesalahan yang dihasilkan tidak termasuk dalam kategori apa pun.
NotImplementedErrorDibesarkan ketika metode abstrak yang perlu diimplementasikan di kelas warisan sebenarnya tidak dilaksanakan.
+
+
+

Edit tutorial ini

+
+ +
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/tutorial/file-io-python/index.html b/tutorial/file-io-python/index.html new file mode 100644 index 00000000..eef0dda3 --- /dev/null +++ b/tutorial/file-io-python/index.html @@ -0,0 +1,325 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + File I/O Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ + +
+ + + + +
+

File I/O Python

+

Disini kita akan belajar semua fungsi dasar I/O yang tersedia pada Python 3. Jika Anda ingin mempelajari lebih detail, lihat dokumentasi standar Python.

+

Print

+

Cara termudah untuk menghasilkan output adalah dengan menggunakan pernyataan cetak di mana Anda bisa melewati nol atau lebih banyak ekspresi yang dipisahkan dengan koma. Fungsi ini mengubah ekspresi yang Anda berikan ke string dan menulis hasilnya ke output standar sebagai berikut :

+
print ("Python adalah bahasa pemrograman yang hebat")
+
+

Membaca Input Keyboard

+

Python 2 memiliki dua fungsi built-in untuk membaca data dari input standar, yang secara default berasal dari keyboard. Fungsi ini adalah input() dan raw_input()

+

Dengan Python 3, fungsi raw_input() tidak digunakan lagi. Selain itu, input() berfungsi membaca data dari keyboard sebagai string, terlepas dari apakah itu tertutup dengan tanda kutip ('' atau '") atau tidak.

+

Fungsi Input Python

+

Fungsi input([prompt]) setara dengan raw_input, kecuali mengasumsikan bahwa input adalah ekspresi Python yang valid dan mengembalikan hasil yang dievaluasi ke Anda.

+
>>> x = input("something:")
+>>> something:10
+
+>>> x
+>>> '10'
+
+>>> x = input("something:")
+>>> something:'10' #entered data treated as string with or without ''
+
+>>> x
+>>> "'10'"
+
+
+
+

Edit tutorial ini

+
+ +
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/tutorial/fungsi-python/index.html b/tutorial/fungsi-python/index.html new file mode 100644 index 00000000..ddb35108 --- /dev/null +++ b/tutorial/fungsi-python/index.html @@ -0,0 +1,319 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Fungsi Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ + +
+ + + + +
+

Fungsi Python

+

Fungsi adalah blok kode terorganisir dan dapat digunakan kembali yang digunakan untuk melakukan sebuah tindakan/action. Fungsi memberikan modularitas yang lebih baik untuk aplikasi Anda dan tingkat penggunaan kode yang tinggi.

+

Mendefinisikan Fungsi Python

+

Anda dapat menentukan fungsi untuk menyediakan fungsionalitas yang dibutuhkan. Berikut adalah aturan sederhana untuk mendefinisikan fungsi dengan Python.

+
    +
  • Fungsi blok dimulai dengan def kata kunci diikuti oleh nama fungsi dan tanda kurung (()).
  • +
  • Setiap parameter masukan atau argumen harus ditempatkan di dalam tanda kurung ini. Anda juga dapat menentukan parameter di dalam tanda kurung ini.
  • +
  • Pernyataan pertama dari sebuah fungsi dapat berupa pernyataan opsional - string dokumentasi fungsi atau docstring.
  • +
  • Blok kode dalam setiap fungsi dimulai dengan titik dua (:) dan indentasi.
  • +
  • Pernyataan kembali [ekspresi] keluar dari sebuah fungsi, secara opsional menyampaikan kembali ekspresi ke pemanggil. Pernyataan pengembalian tanpa argumen sama dengan return None.
  • +
+

Contoh fungsi

+
def printme( str ):
+"This prints a passed string into this function"
+print (str)
+return
+
+
+
+

Edit tutorial ini

+
+ +
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/tutorial/hello-world-python/index.html b/tutorial/hello-world-python/index.html new file mode 100644 index 00000000..f10f2099 --- /dev/null +++ b/tutorial/hello-world-python/index.html @@ -0,0 +1,313 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hello World Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ + +
+ + + + +
+

Hello World Python

+

Syntax bahasa Python hampir sama dengan bahasa pemrograman pada umumnya seperti Java atau PHP.

+

Syntax Dasar

+

Dibawah ini adalah contoh fungsi Python yang digunakan untuk mencetak. Di Python untuk mencetak cukup gunakan fungsi print() , dimana sesuatu yang akan dicetak harus diletakkan diantara kurung buka dan kurung tutup, bahkan di Python versi 2.x Anda tidak harus menggunakan tanda kurung kurawal, cukup pisahkan dengan spasi.

+

Jika ingin mencetak tipe data String langsung, Anda harus memasukanya ke dalam tanda kutip terlebih dahulu.

+
print("Hello World")
+
+

Saat anda menjalankan script diatas, Anda akan melihat output berupa text Hello World

+

Python Case Sensitivity

+

Python bersifat case sensitif, ini artinya huruf besar dan huruf kecil memiliki perbedaan. Sebagai contoh jika Anda menggunakan fungsi print dengan huruf kecil print() akan berhasil. Lain hal jika anda menggunakan huruf kapital Print() atau PRINT() , akan muncul pesan error.

+

Aturan ini berlaku untuk nama variabel ataupun fungsi-fungsi lainnya.

+
+
+

Edit tutorial ini

+
+ +
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/tutorial/index.html b/tutorial/index.html new file mode 100644 index 00000000..80f0916e --- /dev/null +++ b/tutorial/index.html @@ -0,0 +1,284 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tutorial - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ + +
+ + + + +
+

Tutorial

+

{% for tut in site.tutorial %} + {{ tut.title | jsonify }},{{ tut.order }} +{% endfor %}

+
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/tutorial/instalasi-python/index.html b/tutorial/instalasi-python/index.html new file mode 100644 index 00000000..34f6cd5d --- /dev/null +++ b/tutorial/instalasi-python/index.html @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Instalasi Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ + +
+ + + + +
+

Instalasi Python

+

Sebelum Anda menggunakan Python, Anda harus menginstalnya terlebih dahulu di sistem operasi komputer Anda. Saat ini Python memiliki 2 versi yang berbeda, yaitu Python versi 3.4.3 dan Python versi 2.7.10. Disini kita akan belajar bahasa pemrograman Python menggunakan versi terbaru 3.4.3.

+

Cara menginstal python sangat mudah, ikuti panduan dibawah ini. Dibawah adalah panduan cara instal python di platform Linux, Windows dan Mac OS.

+

Linux

+
    +
  1. Buka browser, kunjungi http://www.python.org/downloads/source/
  2. +
  3. Download versi terbaru Python berbentuk file zip untuk Unix/Linux
  4. +
  5. Ekstrak file zip yang baru saja di download
  6. +
  7. Edit file Modules/Setup jika Anda ingin kostumisasi Python
  8. +
  9. Jalankan ./configure script
  10. +
  11. make
  12. +
  13. make install
  14. +
+

Langkah ini akan menginstal Python di lokasi standar /usr/local/bin dan library di /usr/local/lib/pythonXX dimana XX adalah versi terbaru Python yang anda gunakan.

+
+

Untuk beberapa distro (distribution store) dari sistem operasi linux sudah terinstal Python di dalamnya. Jadi Anda tidak perlu menginstalnya lagi.

+
+

Windows

+
    +
  1. Buka browser, kunjungi http://www.python.org/downloads/windows/
  2. +
  3. ATAU, klik direct link https://www.python.org/ftp/python/3.8.1/python-3.8.1.exe
  4. +
  5. Buka (klik 2x) file installer python yang baru saja di download
  6. +
  7. Ikuti langkah instalasi sampai selesai
  8. +
+

Mac OS

+
    +
  1. Buka browser, kunjungi http://www.python.org/download/mac/
  2. +
  3. Download versi terbaru Python untuk Macintosh
  4. +
  5. Buka file yang baru saja di download
  6. +
  7. Ikuti langkah instalasi sampai selesai
  8. +
+
+
+

Edit tutorial ini

+
+ +
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/tutorial/komentar-python/index.html b/tutorial/komentar-python/index.html new file mode 100644 index 00000000..c4e2f356 --- /dev/null +++ b/tutorial/komentar-python/index.html @@ -0,0 +1,335 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Komentar Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ + +
+ + + + +
+

Komentar Python

+

Komentar (comment) adalah kode di dalam script Python yang tidak dieksekusi atau tidak dijalankan mesin. Komentar hanya digunakan untuk menandai atau memberikan keterangan tertulis pada script.

+

Komentar biasa digunakan untuk membiarkan orang lain memahami apa yang dilakukan script. atau untuk mengingatkan kepada programmer sendiri jika suatu saat kembali mengedit script tersebut.

+

Untuk menggunakan komentar anda cukup menulis tanda pagar # diikuti dengan komentar Anda atau dengan menggunakan string literal yang dibuka dan ditutup dengan """.

+

Dibawah ini adalah contoh penggunaan komentar pada Python

+
#Ini adalah komentar
+
+# Tulisan ini tidak akan dieksekusi
+
+#komentar dengan tanda pagar hanya bisa digunakan
+#untuk
+#satu
+#baris
+
+"""
+Penulisan Komentar lebih dari satu baris yaitu
+dengan menggunakan kutip dua 3 kali dan
+ditutup dengan kutip dua 3 kali juga
+"""
+
+print("Hello World") #ini juga komentar
+
+#print("Welcome")
+
+# komentar bisa berisi spesial karakter !@#$%^&\*(),./;'[]\
+
+#mencetak nama
+print("Budi")
+
+#mencetak angka/integer
+print(123)
+
+

Saat anda menjalankan script diatas, Anda akan melihat output berupa Hello World, Budi dan 123, karena tulisan/komentar yang ditulis tidak dieksekusi.

+
+
+

Edit tutorial ini

+
+ +
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/tutorial/kondisi-if-else-python/index.html b/tutorial/kondisi-if-else-python/index.html new file mode 100644 index 00000000..a3fb6a00 --- /dev/null +++ b/tutorial/kondisi-if-else-python/index.html @@ -0,0 +1,361 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Kondisi Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ + +
+ + + + +
+

Kondisi Python

+

Kondisi If

+

Pengambilan keputusan (kondisi if) digunakan untuk mengantisipasi kondisi yang terjadi saat jalanya program dan menentukan tindakan apa yang akan diambil sesuai dengan kondisi.

+

Pada python ada beberapa statement/kondisi diantaranya adalah if, else dan elif Kondisi if digunakan untuk mengeksekusi kode jika kondisi bernilai benar True.

+

Jika kondisi bernilai salah False maka statement/kondisi if tidak akan di-eksekusi.

+

Dibawah ini adalah contoh penggunaan kondisi if pada Python

+
#Kondisi if adalah kondisi yang akan dieksekusi oleh program jika bernilai benar atau TRUE
+
+nilai = 9
+
+#jika kondisi benar/TRUE maka program akan mengeksekusi perintah dibawahnya
+if(nilai > 7):
+    print("Sembilan Lebih Besar Dari Angka Tujuh") # Kondisi Benar, Dieksekusi
+
+#jika kondisi salah/FALSE maka program tidak akan mengeksekusi perintah dibawahnya
+if(nilai > 10):
+    print("Sembilan Lebih Besar Dari Angka Sepuluh") # Kondisi Salah, Maka tidak tereksekusi
+
+

Dari contoh diatas, jika program dijalankan maka akan mencetak string "Sembilan Lebih Besar Dari Angka Tujuh" sebanyak 1 kali yaitu pada if pertama. Di if kedua statement bernilai salah, jadi perintah print("Sembilan Lebih Besar Dari Angka Sepuluh") tidak akan dieksekusi.

+

Kondisi If Else

+

Pengambilan keputusan (kondisi if else) tidak hanya digunakan untuk menentukan tindakan apa yang akan diambil sesuai dengan kondisi, tetapi juga digunakan untuk menentukan tindakan apa yang akan diambil/dijalankan jika kondisi tidak sesuai.

+

Pada python ada beberapa statement/kondisi diantaranya adalah if, else dan elif Kondisi if digunakan untuk mengeksekusi kode jika kondisi bernilai benar.

+

Kondisi if else adalah kondisi dimana jika pernyataan benar True maka kode dalam if akan dieksekusi, tetapi jika bernilai salah False maka akan mengeksekusi kode di dalam else.

+

Dibawah ini adalah contoh penggunaan kondisi if else pada Python

+
# Kondisi if else adalah jika kondisi bernilai TRUE maka akan dieksekusi pada if,
+# tetapi jika bernilai FALSE maka akan dieksekusi kode pada else
+
+nilai = 3
+# Jika pernyataan pada if bernilai TRUE maka if akan dieksekusi,
+# tetapi jika FALSE kode pada else yang akan dieksekusi.
+if(nilai > 7):
+    print("Selamat Anda Lulus")
+else:
+    print("Maaf Anda Tidak Lulus")
+
+

Pada contoh diatas, jika program dijalankan maka akan mencetak string "Maaf Anda Tidak Lulus" karena pernyataan pada if bernilai False

+

Kondisi Elif

+

Pengambilan keputusan (kondisi if elif) merupakan lanjutan/percabangan logika dari "kondisi if". Dengan elif kita bisa membuat kode program yang akan menyeleksi beberapa kemungkinan yang bisa terjadi. Hampir sama dengan kondisi "else", bedanya kondisi "elif" bisa banyak dan tidak hanya satu.

+

Dibawah ini adalah contoh penggunaan kondisi elif pada Python

+
#Contoh penggunaan kondisi elif
+
+hari_ini = "Minggu"
+
+if(hari_ini == "Senin"):
+    print("Saya akan kuliah")
+elif(hari_ini == "Selasa"):
+    print("Saya akan kuliah")
+elif(hari_ini == "Rabu"):
+    print("Saya akan kuliah")
+elif(hari_ini == "Kamis"):
+    print("Saya akan kuliah")
+elif(hari_ini == "Jumat"):
+    print("Saya akan kuliah")
+elif(hari_ini == "Sabtu"):
+    print("Saya akan kuliah")
+elif(hari_ini == "Minggu"):
+    print("Saya akan libur")
+
+

Pada contoh diatas, jika program dijalankan maka akan mencetak string "Saya akan libur".

+
+
+

Edit tutorial ini

+
+ +
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/tutorial/list-python/index.html b/tutorial/list-python/index.html new file mode 100644 index 00000000..0ec1bc71 --- /dev/null +++ b/tutorial/list-python/index.html @@ -0,0 +1,493 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + List Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ + +
+ + + + +
+

List Python

+

Dalam bahasa pemrograman Python, struktur data yang paling dasar adalah urutan atau lists. Setiap elemen-elemen berurutan akan diberi nomor posisi atau indeksnya. Indeks pertama dalam list adalah nol, indeks kedua adalah satu dan seterusnya.

+

Python memiliki enam jenis urutan built-in, namun yang paling umum adalah list dan tuple. Ada beberapa hal yang dapat Anda lakukan dengan semua jenis list. Operasi ini meliputi pengindeksan, pengiris, penambahan, perbanyak, dan pengecekan keanggotaan. Selain itu, Python memiliki fungsi built-in untuk menemukan panjang list dan untuk menemukan elemen terbesar dan terkecilnya.

+

Membuat List Python

+

List adalah tipe data yang paling serbaguna yang tersedia dalam bahasa Python, yang dapat ditulis sebagai daftar nilai yang dipisahkan koma (item) antara tanda kurung siku. Hal penting tentang daftar adalah item dalam list tidak boleh sama jenisnya.

+

Membuat list sangat sederhana, tinggal memasukkan berbagai nilai yang dipisahkan koma di antara tanda kurung siku. Dibawah ini adalah contoh sederhana pembuatan list dalam bahasa Python.

+
#Contoh sederhana pembuatan list pada bahasa pemrograman python
+list1 = ['kimia', 'fisika', 1993, 2017]
+list2 = [1, 2, 3, 4, 5 ]
+list3 = ["a", "b", "c", "d"]
+
+

Akses Nilai Dalam List Python

+

Untuk mengakses nilai dalam list python, gunakan tanda kurung siku untuk mengiris beserta indeks atau indeks untuk mendapatkan nilai yang tersedia pada indeks tersebut.

+

Berikut adalah contoh cara mengakses nilai di dalam list python :

+
#Cara mengakses nilai di dalam list Python
+
+list1 = ['fisika', 'kimia', 1993, 2017]
+list2 = [1, 2, 3, 4, 5, 6, 7 ]
+
+print ("list1[0]: ", list1[0])
+print ("list2[1:5]: ", list2[1:5])
+
+

Setelah Anda mengeksekusi kode diatas, hasilnya akan seperti dibawah ini :

+

list1[0]: fisika +list2[1:5]: [2, 3, 4, 5]

+

Update Nilai Dalam List Python

+

Anda dapat memperbarui satu atau beberapa nilai di dalam list dengan memberikan potongan di sisi kiri operator penugasan, dan Anda dapat menambahkan nilai ke dalam list dengan metode append (). Sebagai contoh :

+
list = ['fisika', 'kimia', 1993, 2017]
+print ("Nilai ada pada index 2 : ", list[2])
+
+list[2] = 2001
+print ("Nilai baru ada pada index 2 : ", list[2])
+
+

Hapus Nilai Dalam List Python

+

Untuk menghapus nilai di dalam list python, Anda dapat menggunakan salah satu pernyataan del jika Anda tahu persis elemen yang Anda hapus. Anda dapat menggunakan metode remove() jika Anda tidak tahu persis item mana yang akan dihapus. Sebagai contoh :

+
#Contoh cara menghapus nilai pada list python
+
+list = ['fisika', 'kimia', 1993, 2017]
+
+print (list)
+del list[2]
+print ("Setelah dihapus nilai pada index 2 : ", list)
+
+

Operasi Dasar Pada List Python

+

List Python merespons operator + dan * seperti string; Itu artinya penggabungan dan pengulangan di sini juga berlaku, kecuali hasilnya adalah list baru, bukan sebuah String.

+

Sebenarnya, list merespons semua operasi urutan umum yang kami gunakan pada String di bab sebelumnya. Dibawah ini adalah tabel daftar operasi dasar pada list python.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Python ExpressionHasilPenjelasan
len([1, 2, 3, 4])4Length
[1, 2, 3] + [4, 5, 6][1, 2, 3, 4, 5, 6]Concatenation
['Halo!'] * 4['Halo!', 'Halo!', 'Halo!', 'Halo!']Repetition
2 in [1, 2, 3]TrueMembership
for x in [1,2,3] : print (x,end = ' ')1 2 3Iteration
+

Indexing, Slicing dan Matrix Pada List Python

+

Karena list adalah urutan, pengindeksan dan pengiris bekerja dengan cara yang sama untuk list seperti yang mereka lakukan untuk String.

+

Dengan asumsi input berikut :

+

L = ['C++'', 'Java', 'Python']

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Python ExpressionHasilPenjelasan
L[2]'Python'Offset mulai dari nol
L[-2]'Java'Negatif: hitung dari kanan
[1:]['Java', 'Python']Slicing mengambil bagian
+

Method dan Fungsi Build-in Pada List Python

+

Python menyertakan fungsi built-in sebagai berikut :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Python FunctionPenjelasan
cmp(list1, list2) #Tidak lagi tersedia dengan Python 3
len(list)Memberikan total panjang list.
max(list)Mengembalikan item dari list dengan nilai maks.
min(list)Mengembalikan item dari list dengan nilai min.
list(seq)Mengubah tuple menjadi list.
+

Python menyertakan methods built-in sebagai berikut

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Python MethodsPenjelasan
list.append(obj)Menambahkan objek obj ke list
list.count(obj)Jumlah pengembalian berapa kali obj terjadi dalam list
list.extend(seq)Tambahkan isi seq ke list
list.index(obj)Mengembalikan indeks terendah dalam list yang muncul obj
list.insert(index, obj)Sisipkan objek obj ke dalam list di indeks offset
list.pop(obj = list[-1])Menghapus dan mengembalikan objek atau obj terakhir dari list
list.remove(obj)Removes object obj from list
list.reverse()Membalik list objek di tempat
list.sort([func])Urutkan objek list, gunakan compare func jika diberikan
+
+
+

Edit tutorial ini

+
+ +
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/tutorial/loop-python/index.html b/tutorial/loop-python/index.html new file mode 100644 index 00000000..eb96cebc --- /dev/null +++ b/tutorial/loop-python/index.html @@ -0,0 +1,353 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Loop Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ + +
+ + + + +
+

Loop Python

+

Secara umum, pernyataan pada bahasa pemrograman akan dieksekusi secara berurutan. Pernyataan pertama dalam sebuah fungsi dijalankan pertama, diikuti oleh yang kedua, dan seterusnya. Tetapi akan ada situasi dimana Anda harus menulis banyak kode, dimana kode tersebut sangat banyak. Jika dilakukan secara manual maka Anda hanya akan membuang-buang tenaga dengan menulis beratus-ratus bahkan beribu-ribu kode. Untuk itu Anda perlu menggunakan pengulangan di dalam bahasa pemrograman Python.

+

Di dalam bahasa pemrograman Python pengulangan dibagi menjadi 3 bagian, yaitu :

+
    +
  • While Loop
  • +
  • For Loop
  • +
  • Nested Loop
  • +
+

While Loop

+

Pengulangan While Loop di dalam bahasa pemrograman Python dieksesusi statement berkali-kali selama kondisi bernilai benar atau True.

+

Dibawah ini adalah contoh penggunaan pengulangan While Loop.

+
#Contoh penggunaan While Loop
+#Catatan: Penentuan ruang lingkup di Python bisa menggunakan tab alih-alih menggunakan tanda kurung
+
+count = 0
+while (count < 9):
+  print ("The count is: ", count)
+  count = count + 1
+
+print ("Good bye!")
+
+

For Loop

+

Pengulangan for pada Python memiliki kemampuan untuk mengulangi item dari urutan apapun, seperti list atau string.

+

Dibawah ini adalah contoh penggunaan pengulangan For Loop.

+
#Contoh pengulangan for sederhana
+angka = [1,2,3,4,5]
+for x in angka:
+  print(x)
+
+#Contoh pengulangan for
+buah = ["nanas", "apel", "jeruk"]
+for makanan in buah:
+  print ("Saya suka makan", makanan)
+
+

Nested Loop

+

Bahasa pemrograman Python memungkinkan penggunaan satu lingkaran di dalam loop lain. Bagian berikut menunjukkan beberapa contoh untuk menggambarkan konsep tersebut.

+

Dibawah ini adalah contoh penggunaan Nested Loop.

+
#Contoh penggunaan Nested Loop
+#Catatan: Penggunaan modulo pada kondisional mengasumsikan nilai selain nol sebagai True(benar) dan nol sebagai False(salah)
+
+i = 2
+while(i < 100):
+  j = 2
+while(j <= (i/j)):
+  if not(i%j): break
+  j = j + 1
+  if (j > i/j) : print(i, " is prime")
+    i = i + 1
+
+print("Good bye!")
+
+
+
+

Edit tutorial ini

+
+ +
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/tutorial/menjalankan-python/index.html b/tutorial/menjalankan-python/index.html new file mode 100644 index 00000000..dfe66151 --- /dev/null +++ b/tutorial/menjalankan-python/index.html @@ -0,0 +1,364 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Menjalankan Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ + +
+ + + + +
+

Menjalankan Python

+

Untuk menjalankan Python ada banyak cara yang bisa dilakukan. Anda bisa menggunakan shell, terminal atau menggunakan IDE (Integrated Development Environment). Di bawah ini adalah langkah-langkah menjalankan Python dengan cara yang paling mudah.

+

Linux

+
    +
  1. Buka terminal CTRL+ALT+T
  2. +
  3. Ketik python maka Anda akan masuk ke Python shell.
  4. +
  5. Tuliskan script Python Anda, contoh: print("Selamat datang di Python"). jika sudah tekan tombol ENTER, dan script Python akan dijalankan/eksekusi.
  6. +
  7. Untuk keluar dari Python shell ketik exit()
  8. +
+

atau

+
    +
  1. Gunakan teks editor, misalnya gedit.
  2. +
  3. Buat file baru, dan ketikan script python Anda, contoh: print("Selamat datang di Python").
  4. +
  5. Save As dengan ekstensi .py (contoh: cetak.py).
  6. +
  7. Jalankan file dengan menggunakan Terminal.
  8. +
  9. Buka terminal CTRL+ALT+T.
  10. +
  11. Masuk ke direktori dimana file Python Anda disimpan (contoh: cd /Users/admin/Desktop/).
  12. +
  13. Jalankan script Python dengan menggunakan python diikuti dengan nama file (contoh: python cetak.py).
  14. +
  15. Script Python Anda akan dieksekusi/dijalankan.
  16. +
+

Windows

+

Menggunakan Shell

+
    +
  1. Buka IDLE (python shell di windows), Anda bisa mencarinya di tombol START.
  2. +
  3. Tuliskan script Python Anda, contoh: print("Selamat datang di Python"). jika sudah tekan tombol ENTER, dan script Python akan dijalankan/eksekusi.
  4. +
+

Python Shell Windows

+
    +
  1. Untuk keluar dari Python shell ketik exit()
  2. +
+

Menggunakan Script Editor

+
    +
  1. Untuk menjalankan script yang disimpan dalam file, buka IDLE (python shell di windows), Anda bisa mencarinya di tombol START.
  2. +
  3. Klik menu File - New File
  4. +
  5. Tulis script Python pada window yang muncul, contoh:
  6. +
+
print("Belajar Python")
+print("di belajarpython.com")
+
+
    +
  1. Simpan script lewat menu File - Save
  2. +
  3. Jalankan program dengan klik menu Run - Run Module
  4. +
+

Python Editor Windows

+

Mac OS

+
    +
  1. Buka terminal.
  2. +
  3. Ketik python maka Anda akan masuk ke Python shell.
  4. +
  5. Tuliskan script Python Anda, contoh: print("Selamat datang di Python"). jika sudah tekan tombol ENTER, dan script Python akan dijalankan/eksekusi.
  6. +
  7. Untuk keluar dari Python shell ketik exit()
  8. +
+

atau

+
    +
  1. Gunakan teks editor.
  2. +
  3. Buat file baru, dan ketikan script python Anda, contoh: print("Selamat datang di Python").
  4. +
  5. Save As dengan ekstensi .py (contoh: cetak.py).
  6. +
  7. Jalankan file dengan menggunakan Terminal.
  8. +
  9. Buka terminal CTRL+ALT+T
  10. +
  11. Masuk ke direktori dimana file Python Anda disimpan (contoh: cd /Users/admin/Desktop/).
  12. +
  13. Jalankan script Python dengan menggunakan python diikuti dengan nama file (contoh: python cetak.py).
  14. +
  15. Script Python Anda akan dieksekusi/dijalankan.
  16. +
+
+
+

Edit tutorial ini

+
+ +
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/tutorial/modul-python/index.html b/tutorial/modul-python/index.html new file mode 100644 index 00000000..e19f318d --- /dev/null +++ b/tutorial/modul-python/index.html @@ -0,0 +1,322 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Modul Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ + +
+ + + + +
+

Modul Python

+

Modul memungkinkan Anda mengatur kode Python secara logis. Mengelompokkan kode terkait ke dalam modul membuat kode lebih mudah dipahami dan digunakan. Modul adalah objek Python dengan atribut yang diberi nama yang bisa Anda bind dan dijadikan referensi.

+

Secara sederhana modul adalah file yang terdiri dari kode Python. Modul dapat mendefinisikan fungsi, kelas dan variabel. Modul juga bisa menyertakan kode yang bisa dijalankan "runable".

+

Berikut adalah contoh modul sederhana pada Python :

+
def print_func( par ):
+print "Halo : ", par
+return
+
+

Import Statement

+

Anda dapat menggunakan file sumber Python apapun sebagai modul dengan mengeksekusi pernyataan impor di file sumber Python lainnya. Impornya memiliki sintaks berikut.

+

Ketika interpreter menemukan sebuah pernyataan import, ia mengimpor modul jika modul tersebut ada di jalur pencarian. Jalur pencarian adalah daftar direktori yang ditafsirkan juru bahasa sebelum mengimpor modul. Misalnya, untuk mengimpor modul hello.py, Anda perlu meletakkan perintah berikut di bagian atas script.

+

+# Import module support
+
+import support
+
+# Anda bisa memanggil fungsi defined sebagai berikut
+
+support.print_func("Andy")
+
+
+
+

Edit tutorial ini

+
+ +
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/tutorial/networking-python/index.html b/tutorial/networking-python/index.html new file mode 100644 index 00000000..38bbd1a8 --- /dev/null +++ b/tutorial/networking-python/index.html @@ -0,0 +1,492 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Networking Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ + +
+ + + + +
+

Networking Python

+

Python menyediakan dua tingkat akses ke layanan jaringan. Pada tingkat rendah, Anda dapat mengakses dukungan soket dasar dalam sistem operasi yang mendasarinya, yang memungkinkan Anda untuk mengimplementasikan klien dan server untuk kedua protokol berorientasi koneksi dan tanpa sambungan.

+

Python juga memiliki pustaka yang menyediakan akses tingkat lebih tinggi ke protokol jaringan tingkat aplikasi tertentu, seperti FTP, HTTP, dan seterusnya.

+

Bab ini memberi Anda pemahaman tentang konsep paling terkenal dalam Networking - Socket Programming.

+

Apa itu Socket?

+

Soket adalah titik akhir dari saluran komunikasi dua arah. Soket dapat berkomunikasi dalam suatu proses, antara proses pada mesin yang sama, atau antara proses di berbagai benua.

+

Soket dapat diimplementasikan melalui sejumlah jenis saluran yang berbeda: soket domain Unix, TCP, UDP, dan sebagainya. Pustaka socket menyediakan kelas khusus untuk menangani transportasi umum serta antarmuka umum untuk menangani sisanya.

+

Modul Socket

+

Untuk membuat soket, Anda harus menggunakan fungsi socket.socket () yang tersedia dalam modul soket, yang memiliki sintaks umum

+

s = socket.socket (socket_family, socket_type, protocol=0)

+

Server Socket Method

+ + + + + + + + + + + + + + + + + + + + + +
MethodPenjelasan
s.bind()This method binds address (hostname, port number pair) to socket.
s.listen()This method sets up and start TCP listener.
s.accept()This passively accept TCP client connection, waiting until connection arrives (blocking).
+

Client Socket Method

+ + + + + + + + + + + + + +
MethodPenjelasan
s.connect()This method actively initiates TCP server connection.
+

General Method Socket

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodPenjelasan
s.recv()This method receives TCP message
s.send()This method transmits TCP message
s.recvfrom()This method receives UDP message
s.sendto()This method transmits UDP message
s.close()This method closes socket
socket.gethostname()Returns the hostname.
+
#!/usr/bin/python # This is server.py file
+
+import socket # Import socket module
+
+s = socket.socket() # Create a socket object
+host = socket.gethostname() # Get local machine name
+port = 12345 # Reserve a port for your service.
+s.bind((host, port)) # Bind to the port
+
+s.listen(5) # Now wait for client connection.
+while True:
+c, addr = s.accept() # Establish connection with client.
+print 'Got connection from', addr
+c.send('Thank you for connecting')
+c.close() # Close the connection
+
+

Server Sederhana

+

Untuk menulis server Internet, kami menggunakan fungsi soket yang tersedia di modul soket untuk membuat objek soket. Objek soket kemudian digunakan untuk memanggil fungsi lain untuk menyiapkan server soket.

+

Sekarang sebut bind(hostname,port) berfungsi untuk menentukan port untuk layanan Anda pada host yang diberikan.

+

Selanjutnya, panggil metode penerimaan objek yang dikembalikan. Metode ini menunggu sampai klien terhubung ke port yang Anda tentukan, dan kemudian mengembalikan objek koneksi yang mewakili koneksi ke klien itu.

+

Client Sederhana

+

Mari kita menulis program klien yang sangat sederhana yang membuka koneksi ke port yang diberikan 12345 dan host yang diberikan. Ini sangat sederhana untuk membuat klien soket menggunakan fungsi modul soket Python.

+

Socket.connect (hosname, port) membuka koneksi TCP ke hostname pada port. Setelah Anda memiliki soket terbuka, Anda dapat membaca darinya seperti objek IO apa pun. Setelah selesai, jangan lupa untuk menutupnya, karena Anda akan menutup file.

+

Kode berikut adalah klien yang sangat sederhana yang terhubung ke host dan port yang diberikan, membaca data yang tersedia dari soket, dan kemudian keluar

+
#!/usr/bin/python # This is client.py file
+
+import socket # Import socket module
+
+s = socket.socket() # Create a socket object
+host = socket.gethostname() # Get local machine name
+port = 12345 # Reserve a port for your service.
+
+s.connect((host, port))
+print s.recv(1024)
+s.close # Close the socket when done
+
+

Sekarang jalankan server.py ini di latar belakang dan kemudian jalankan di atas client.py untuk melihat hasilnya.

+
Jalankan server.
+

python server.py &

+

Setelah server berjalan lanjutkan

+
Jalankan client:
+

python client.py

+

Hasilnya akan seperti ini : +Got connection from ('127.0.0.1', 48437) +Thank you for connecting

+

Modul Internet pada Python

+

Berikut tabel daftar beberapa modul penting dalam pemrograman Jaringan / Internet Python.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProtocolCommon functionPort NoPython module
HTTPWeb pages80httplib, urllib, xmlrpclib
NNTPUsenet news119nntplib
FTPTransfer file20ftplib, urllib
SMTPMengirim email25smtplib
POP3Fetching email110poplib
IMAP4Fetching email143imaplib
TelnetCommand lines23telnetlib
GopherDocument transfers70gopherlib, urllib
+
+
+

Edit tutorial ini

+
+ +
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/tutorial/number-python/index.html b/tutorial/number-python/index.html new file mode 100644 index 00000000..626ea189 --- /dev/null +++ b/tutorial/number-python/index.html @@ -0,0 +1,590 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Number Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ + +
+ + + + +
+

Number Python

+

Number adalah tipe data Python yang menyimpan nilai numerik. Number adalah tipe data yang tidak berubah. Ini berarti, mengubah nilai dari sejumlah tipe data akan menghasilkan objek yang baru dialokasikan.

+

Objek Number dibuat saat Anda memberikan nilai pada-nya. Sebagai contoh : angkaPertama = 1 +angkaKedua = 33

+

Python mendukung beberapa tipe data Number diantaranya :

+
    +
  • Int
  • +
  • Float
  • +
  • Complex
  • +
+

Berikut ini adalah beberapa contoh dari Tipe data Number pada Python :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IntFloatComplex
200.13.14j
3001.2035.j
-13-41.23.12e-12j
02032.23+e123.873j
-0103-92.-.123+0J
-0x212-32.52e103e+123J
0x5660.2-E134.31e-4j
+

Konversi Tipe Data Number Python

+

Pada Python Anda bisa mengkonversi tipe data dengan menggunakan fungsi. Dibawah ini adalah beberapa fungsi untuk mengkonversi tipe data number Python.

+
    +
  • int(x) + untuk meng-konversi x menjadi plain integer.
  • +
  • long(x) + untuk meng-konversi x menjadi long integer.
  • +
  • float(x) + untuk meng-konversi x menjadi floating point number.
  • +
  • complex(x) + untuk meng-konversi x menjadi complex number dengna real part x dan imaginary part zero.
  • +
  • complex(x, y) + untuk meng-konversi x dan y menjadi complex number dengan real part x dan imaginary part y. x dan numeric expressions y.
  • +
+

Fungsi Matematika Python

+

Pada bahasa pemrograman Python terdapat fungsi untuk melakukan perhitungan matematis, berikut adalah daftarnya :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NamaPenggunaanPenjelasan
Absoluteabs(x)Nilai absolut dari x:(positive) jarak antara x and 0.
Ceilingceil(x)Ceiling dari x: integer terkecil yang kurang dari x.
Cmpcmp(x, y)-1 if x < y, 0 if x == y, or 1 if x > y. Tidak berlaku lagi dengan Python 3. Sebaliknya gunakan return (x>y)-(x
Eksponenexp(x)Nilai eksponen dari x: ex
Fabsfabs(x)Nilai absolut dari x.
Floorfloor(x)Nilai dasar dari x: internet terbesar tidak lebih besar dari x.
Loglog(x)Logaritma dari x, untuk x > 0.
Log 10log10(x)Basis 10 logaritma dari x, untuk x > 0.
Maxmax(x1, x2,...)Argumen terbesar: Nilai terdekat dengan tak terhingga positif
Minmin(x1, x2,...)Argumen terkecil: nilai yang paling mendekati tak berhingga negatif.
Modfmodf(x)Bagian pecahan dan bilangan bulat dari x dalam tupel dua item. Kedua bagian memiliki tanda yang sama dengan x. Bagian integer dikembalikan sebagai float.
Powpow(x, y)Nilai x ** y.
Roundround(x [,n])X dibulatkan menjadi n digit dari titik desimal. Putaran Python jauh dari nol sebagai tie-breaker: round (0.5) adalah 1.0 dan round (-0.5) adalah -1.0.
Akar Kuadratsqrt(x)Akar kuadrat x untuk x> 0.
+

Fungsi Nomor Acak Python

+

Nomor acak digunakan untuk aplikasi permainan, simulasi, pengujian, keamanan, dan privasi. Python mencakup fungsi berikut yang umum digunakan. Berikut adalah daftarnya :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NamaPenggunaanPenjelasan
Choicechoice(seq)Item acak dari list, tuple, atau string.
RandRangerandrange ([start,] stop [,step])Elemen yang dipilih secara acak dari jangkauan (start, stop, step).
Randomrandom()A random float r, sehingga 0 kurang dari atau sama dengan r dan r kurang dari 1
Seedseed([x])Menetapkan nilai awal integer yang digunakan dalam menghasilkan bilangan acak. Panggil fungsi ini sebelum memanggil fungsi modul acak lainnya. Tidak ada pengembalian
Shuffleshuffle(lst)Mengacak daftar dari daftar di tempat. Tidak ada pengembalian
Floorfloor(x)The floor of x: the largest integer not greater than x.
Uniformuniform(x, y)Sebuah float acak r, sedemikian rupa sehingga x kurang dari atau sama dengan r dan r kurang dari y.
+

Fungsi Trigonometri Python

+

Python mencakup fungsi berikut yang melakukan perhitungan trigonometri. Berikut adalah daftarnya :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NamaPenggunaan PenjelasanPenjelasan
Acosacos(x)Kembalikan kosinus x, di radian.
Asinasin(x)Kembalikan busur sinus x, dalam radian.
Atanatan(x)Kembalikan busur singgung x, di radian.
Atan 2atan2(y, x)Kembali atan (y / x), di radian.
Kosinuscos(x)Kembalikan kosinus x radian.
Hypothypot(x, y)Kembalikan norma Euclidean, sqrt (x _ x + y _ y).
Sinsin(x)Kembalikan sinus dari x radian.
Tantan(x)Kembalikan tangen x radian.
Derajatdegrees(x)Mengonversi sudut x dari radian ke derajat.
Radianradians(x)Mengonversi sudut x dari derajat ke radian.
+

Konstanta Matematika Python

+

Modul ini juga mendefinisikan dua konstanta matematika. Berikut adalah daftarnya :

+ + + + + + + + + + + + + + + + + + + + +
NamaPenggunaanPenjelasan
PipiKonstanta Pi matematika
eeKonstanta e matematika
+
+
+

Edit tutorial ini

+
+ +
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/tutorial/object-class-python/index.html b/tutorial/object-class-python/index.html new file mode 100644 index 00000000..f8928f8f --- /dev/null +++ b/tutorial/object-class-python/index.html @@ -0,0 +1,417 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Object & Class Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ + +
+ + + + +
+

Object & Class Python

+

Python telah menjadi bahasa berorientasi objek sejak bahasa Python sendiri dibuat. Untuk membuat dan menggunakan kelas dan objek pada Python benar-benar mudah. Pada tutorial ini Anda akan dibantu untuk menjadi ahli dalam penggunaan pemrograman berorientasi objek Python.

+

Jika Anda tidak memiliki pengalaman sebelumnya dengan pemrograman berorientasi objek (OOP), Anda mempelajarinya terlebih dahulu agar Anda dapat memahami konsep dasarnya.

+

Jika memang sudah mengerti konsep dasar OOP berikut ini adalah pengenalan dari Object-Oriented Programming (OOP) untuk membantu Anda.

+

Istilah Dalam OOP

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IstilahPenjelasan
ClassPrototipe yang ditentukan pengguna untuk objek yang mendefinisikan seperangkat atribut yang menjadi ciri objek kelas apa pun. Atribut adalah data anggota (variabel kelas dan variabel contoh) dan metode, diakses melalui notasi titik.
Class variableSebuah variabel yang dibagi oleh semua contoh kelas. Variabel kelas didefinisikan dalam kelas tapi di luar metode kelas manapun. Variabel kelas tidak digunakan sesering variabel contoh.
Data memberVariabel kelas atau variabel contoh yang menyimpan data yang terkait dengan kelas dan objeknya.
Function overloadingPenugasan lebih dari satu perilaku ke fungsi tertentu. Operasi yang dilakukan bervariasi menurut jenis objek atau argumen yang terlibat.
Instance variableVariabel yang didefinisikan di dalam sebuah metode dan hanya dimiliki oleh instance kelas saat ini.
InheritancePengalihan karakteristik kelas ke kelas lain yang berasal darinya.
InstanceObjek individu dari kelas tertentu. Obyek obj yang termasuk dalam Lingkaran kelas, misalnya, adalah turunan dari Lingkaran kelas.
InstantiationPenciptaan sebuah instance dari sebuah kelas.
MethodJenis fungsi khusus yang didefinisikan dalam definisi kelas.
ObjectContoh unik dari struktur data yang didefinisikan oleh kelasnya. Objek terdiri dari kedua anggota data (variabel kelas dan variabel contoh) dan metode.
Operator overloadingPenugasan lebih dari satu fungsi ke operator tertentu.
+

Membuat Class Python

+

Statement class digunakan untuk membuat definisi kelas baru. Nama kelas segera mengikuti kelas kata kunci diikuti oleh titik dua sebagai berikut.

+

class ClassName: 'Optional class documentation string' class_suite

+

Dibawah ini adalah contoh cara membuat class dan penggunaanya :

+
class Employee:
+'Common base class for all employees'
+empCount = 0
+
+def **init**(self, name, salary):
+self.name = name
+self.salary = salary
+Employee.empCount += 1
+
+def displayCount(self):
+print "Total Employee %d" % Employee.empCount
+
+def displayEmployee(self):
+print "Name : ", self.name, ", Salary: ", self.salary
+
+

Membuat Instance Objects

+

Untuk membuat instances kelas, Anda memanggil class menggunakan nama class dan meneruskan argumen apa pun yang metode init terima.

+
This would create first object of Employee class
+emp1 = Employee("Zara", 2000)
+This would create second object of Employee class
+emp2 = Employee("Manni", 5000)
+
+

Mengakses Atribut

+

Anda mengakses atribut objek menggunakan dot operator dengan objek. Variabel kelas akan diakses dengan menggunakan nama kelas sebagai berikut :

+
emp1.displayEmployee()
+emp2.displayEmployee()
+print ("Total Employee %d" % Employee.empCount)
+
+

Contoh lengkapnya, silahkan lihat kode dibawah ini.

+
class Employee:
+'Common base class for all employees'
+empCount = 0
+
+def **init**(self, name, salary):
+self.name = name
+self.salary = salary
+Employee.empCount += 1
+
+def displayCount(self):
+print ("Total Employee %d" % Employee.empCount)
+
+def displayEmployee(self):
+print ("Name : ", self.name, ", Salary: ", self.salary)
+
+#This would create first object of Employee class"
+emp1 = Employee("Zara", 2000)
+#This would create second object of Employee class"
+emp2 = Employee("Manni", 5000)
+emp1.displayEmployee()
+emp2.displayEmployee()
+print ("Total Employee %d" % Employee.empCount)
+
+
+
+

Edit tutorial ini

+
+ +
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/tutorial/operator-python/index.html b/tutorial/operator-python/index.html new file mode 100644 index 00000000..bb011f2a --- /dev/null +++ b/tutorial/operator-python/index.html @@ -0,0 +1,592 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Operator Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ + +
+ + + + +
+

Operator Python

+

Operator adalah konstruksi yang dapat memanipulasi nilai dari operan.

+

Sebagai contoh operasi 3 + 2 = 5. Disini 3 dan 2 adalah operan dan + adalah operator.

+

Bahasa pemrograman Python mendukung berbagai macam operator, diantaranya :

+ +

Operator Aritmatika

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OperatorContohPenjelasan
Penjumlahan +1 + 3 = 4Menjumlahkan nilai dari masing-masing operan atau bilangan
Pengurangan -4 - 1 = 3Mengurangi nilai operan di sebelah kiri menggunakan operan di sebelah kanan
Perkalian *2 * 4 = 8Mengalikan operan/bilangan
Pembagian /10 / 5 = 2Untuk membagi operan di sebelah kiri menggunakan operan di sebelah kanan
Sisa Bagi %11 % 2 = 1Mendapatkan sisa pembagian dari operan di sebelah kiri operator ketika dibagi oleh operan di sebelah kanan
Pangkat **8 ** 2 = 64Memangkatkan operan disebelah kiri operator dengan operan di sebelah kanan operator
Pembagian Bulat //10 // 3 = 3Sama seperti pembagian. Hanya saja angka dibelakang koma dihilangkan
+

Dibawah ini adalah contoh penggunaan Operator Aritmatika dalam bahasa pemrograman Python

+
#OPERATOR ARITMATIKA
+
+#Penjumlahan
+print(13 + 2)
+apel = 7
+jeruk = 9
+buah = apel + jeruk #
+print(buah)
+
+#Pengurangan
+hutang = 10000
+bayar = 5000
+sisaHutang = hutang - bayar
+print("Sisa hutang Anda adalah ", sisaHutang)
+
+#Perkalian
+panjang = 15
+lebar = 8
+luas = panjang * lebar
+print(luas)
+
+#Pembagian
+kue = 16
+anak = 4
+kuePerAnak = kue / anak
+print("Setiap anak akan mendapatkan bagian kue sebanyak ", kuePerAnak)
+
+#Sisa Bagi / Modulus
+bilangan1 = 14
+bilangan2 = 5
+hasil = bilangan1 % bilangan2
+print("Sisa bagi dari bilangan ", bilangan1, " dan ", bilangan2, " adalah ", hasil)
+
+#Pangkat
+bilangan3 = 8
+bilangan4 = 2
+hasilPangkat = bilangan3 ** bilangan4
+print(hasilPangkat)
+
+#Pembagian Bulat
+print(10//3)
+#10 dibagi 3 adalah 3.3333. Karena dibulatkan maka akan menghasilkan nilai 3
+
+

Operator Perbandingan

+

Operator perbandingan (comparison operators) digunakan untuk membandingkan suatu nilai dari masing-masing operan.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OperatorContohPenjelasan
Sama dengan ==1 == 1bernilai True Jika masing-masing operan memiliki nilai yang sama, maka kondisi bernilai benar atau True.
Tidak sama dengan !=2 != 2bernilai False Akan menghasilkan nilai kebalikan dari kondisi sebenarnya.
Tidak sama dengan <>2 <> 2bernilai False Akan menghasilkan nilai kebalikan dari kondisi sebenarnya.
Lebih besar dari >5 > 3bernilai True Jika nilai operan kiri lebih besar dari nilai operan kanan, maka kondisi menjadi benar.
Lebih kecil dari <5 < 3bernilai True Jika nilai operan kiri lebih kecil dari nilai operan kanan, maka kondisi menjadi benar.
Lebih besar atau sama dengan >=5 >= 3bernilai True Jika nilai operan kiri lebih besar dari nilai operan kanan, atau sama, maka kondisi menjadi benar.
Lebih kecil atau sama dengan <=5 <= 3bernilai True Jika nilai operan kiri lebih kecil dari nilai operan kanan, atau sama, maka kondisi menjadi benar.
+

Dibawah ini adalah contoh penggunaan Operator Aritmatika dalam bahasa pemrograman Python

+
# SAMA DENGAN
+print(1 == 1) # Hasilnya akan bernilai True karena satu sama dengan satu
+print(1 == 2) # Hasilnya akan bernilai False karena satu tidak sama dengan dua
+
+# TIDAK SAMA DENGAN
+print(2 != 2) # Hasilnya akan bernilai False karena dua seharusnya sama dengan dua
+print(2 != 3) # Hasilnya akan bernilai True karena dua tidak sama dengan tiga
+
+# LEBIH BESAR DARI
+print(5 > 3) # Hasilnya akan bernilai True karena lima lebih besar dari tiga
+
+# LEBIH KECIL DARI
+print(5 < 3) # Hasilnya akan bernilai False karena lima tidak lebih besar dari tiga
+
+# LEBIH BESAR DARI SAMA DENGAN
+print(5 >= 3) # Hasilnya akan bernilai True karena lima lebih besar dari sama dengan tiga
+
+# LEBIH KECIL DARI SAMA DENGAN
+print(5 <= 3) # Hasilnya akan bernilai False karena lima tidak lebih besar dari sama dengan tiga
+
+

Operator Penugasan

+

Operator penugasan digunakan untuk memberikan atau memodifikasi nilai ke dalam sebuah variabel.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OperatorContohPenjelasan
Sama dengan =a = 1Memberikan nilai di kanan ke dalam variabel yang berada di sebelah kiri.
Tambah sama dengan +=a += 2Memberikan nilai variabel dengan nilai variabel itu sendiri ditambah dengan nilai di sebelah kanan.
Kurang sama dengan -=a -= 2Memberikan nilai variabel dengan nilai variabel itu sendiri dikurangi dengan nilai di sebelah kanan.
Kali sama dengan *=a *= 2Memberikan nilai variabel dengan nilai variabel itu sendiri dikali dengan nilai di sebelah kanan.
Bagi sama dengan /=a /= 4Memberikan nilai variabel dengan nilai variabel itu sendiri dibagi dengan nilai di sebelah kanan.
Sisa bagi sama dengan %=a %= 3Memberikan nilai variabel dengan nilai variabel itu sendiri dibagi dengan nilai di sebelah kanan. Yang diambil nantinya adalah sisa baginya.
Pangkat sama dengan **=a **= 3Memberikan nilai variabel dengan nilai variabel itu sendiri dipangkatkan dengan nilai di sebelah kanan.
Pembagian bulat sama dengan //=a //= 3Membagi bulat operan sebelah kiri operator dengan operan sebelah kanan operator kemudian hasilnya diisikan ke operan sebelah kiri.
+

Prioritas Eksekusi Operator di Python

+

Dari semua operator diatas, masing-masing mempunyai urutan prioritas yang nantinya prioritas pertama akan dilakukan paling pertama, begitu seterusnya sampai dengan prioritas terakhir.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OperatorKeterangan
**Aritmatika
~, +, -Bitwise
*, /, %, //Aritmatika
+, -Aritmatika
>>, <<Bitwise
&Bitwise
^Bitwise
<=, <, >, >=Perbandingan
<> , ==, !=Perbandingan
=, %=, /=, //=, -=, +=, *=, **=Penugasan
is, is notIdentitas
in, not inMembership (Keanggotaan)
not, or, andLogika
+
+
+

Edit tutorial ini

+
+ +
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/tutorial/pengembangan-web-python/index.html b/tutorial/pengembangan-web-python/index.html new file mode 100644 index 00000000..2b98c68d --- /dev/null +++ b/tutorial/pengembangan-web-python/index.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pengembangan Web Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ + +
+ + + + +
+

Pengembangan Web Python

+

Pengembangan web adalah istilah umum untuk membuat konsep, membuat, menyebarkan, dan mengoperasikan aplikasi website dan antarmuka pemrograman aplikasi untuk Website.

+

Penggunaan Python dalam Pengembangan Web

+

Python dapat digunakan untuk membangun aplikasi web sisi server. Sementara kerangka web tidak diperlukan untuk membangun aplikasi web, jarang sekali pengembang tidak akan menggunakan pustaka sumber terbuka yang ada untuk mempercepat kemajuan mereka dalam membuat aplikasi mereka berfungsi.

+

Python tidak digunakan di browser web. Bahasa yang dijalankan di browser seperti Chrome, Firefox, dan Internet Explorer adalah JavaScript. Proyek seperti pyjs dapat dikompilasi dari Python ke JavaScript. Namun, sebagian besar pengembang Python menulis aplikasi web mereka menggunakan kombinasi Python dan JavaScript. Python dieksekusi di sisi server sementara JavaScript diunduh ke klien dan dijalankan oleh browser web.

+

Untuk membuat website dengan menggunakan Python sebagai bahasa pemrogramanya, caranya sangat mudah. Tetapi perlu diingat bahwa sebelumnya Anda sudah harus menguasai HTML, CSS dan Javascript.

+

Web Framework Python

+

Framework pengembangan web pada python yang paling populer dan mudah dipelajari ada Django dan Flask

+

Flask

+

Flask adalah sebuah microframework web python yang mudah untuk dipelajari, mudah diinstal dan pengembangan yang sangat simpel.

+

Berikut adalah beberapa kelebihanya :

+
    +
  • mudah digunakan.
  • +
  • dibangun di server pengembangan dan debugger
  • +
  • dukungan pengujian unit terpadu
  • +
  • Kirim permintaan yang tenang
  • +
  • menggunakan tempering Jinja2
  • +
  • dukungan untuk cookie aman (sesi sisi klien)
  • +
  • 100% WSGI 1.0 compliant
  • +
  • Berbasis Unicode
  • +
  • didokumentasikan secara ekstensif
  • +
+

Instalasi Flask +pip install Flask

+

Hello World Web App dengan Flask

+
from flask import Flask
+app = Flask(**name**)
+
+@app.route("/")
+def hello():
+return "Hello World!"
+<<<<<<<< HEAD:_tutorial/pengembangan-web-python.md
+
+if **name** == "**main**":
+app.run()
+{% endhighlight %}
+
+========
+
+if **name** == "**main**":
+app.run()
+
+
+
+
+
+
+
+
+
+

pr/80:docs/tutorial/pengembangan-web-python.md +Jalankan server dengan perintah: +python hello.py

+
+
+
+
+
+
+
+
+

Buka http://localhost:5000/ dibrowser anda dan akan muncul Hello World!

+

Django

+

Django adalah kerangka kerja Python Web tingkat tinggi yang menangani banyak kerumitan pengembangan Web, sehingga Anda dapat fokus untuk menulis aplikasi tanpa perlu menemukan kembali roda.

+

Kelebihan Framework Django dibanding yang lain adalah pada segi skalabilitas. Framework ini cocok untuk pengembangan aplikasi besar.

+

Untuk menginstal Django jalankan perintah dibawah ini : +pip install Django==1.7.1

+

Setelah terinstal, buat direktori /django-hello/ untuk aplikasi Anda. Dalam direktori ini buat file hello.py dengan code dibawah ini:

+
#!/usr/bin/env python
+import sys
+from django.conf import settings
+from django.conf.urls import patterns
+from django.http import HttpResponse
+from django.core.management import execute_from_command_line
+
+settings.configure(
+DEBUG=True,
+SECRET_KEY='asecretkey',
+ROOT_URLCONF=sys.modules[__name__],
+)
+
+def index(request):
+return HttpResponse('Hello, World')
+
+urlpatterns = patterns('',
+(r'^hello/$', index),
+)
+
+if **name** == "**main**":
+execute_from_command_line(sys.argv)
+<<<<<<<< HEAD:_tutorial/pengembangan-web-python.md
+{% endhighlight %}
+========
+
+
+
+
+
+
+
+
+
+

pr/80:docs/tutorial/pengembangan-web-python.md

+
+
+
+
+
+
+
+
+

Jalankan server dengan perintah : +python hello.py runserver

+

Server HTTP Django akan mulai dan jika Anda membuka http://127.0.0.1:8000/hello/

+
+

Edit tutorial ini

+
+

<<<<<<<< HEAD:_tutorial/pengembangan-web-python.md

+
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/tutorial/string-python/index.html b/tutorial/string-python/index.html new file mode 100644 index 00000000..bac1cba8 --- /dev/null +++ b/tutorial/string-python/index.html @@ -0,0 +1,719 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + String Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ + +
+ + + + +
+

String Python

+

String adalah jenis yang paling populer di bahasa pemrograman. Kita bisa membuatnya hanya dengan melampirkan karakter dalam tanda kutip. Python memperlakukan tanda kutip tunggal sama dengan tanda kutip ganda. Membuat string semudah memberi nilai pada sebuah variabel.

+

Dibawah ini adalah contoh sederhana dari sebuah string pada bahasa pemrograman Python.

+
print("Hello World")
+
+

Mengakses Nilai dalam String

+

Python tidak menggunakan tipe karakter titik koma ; Ini diperlakukan sebagai string dengan panjang satu, sehingga juga dianggap sebagai substring.

+

Untuk mengakses substring, gunakan tanda kurung siku untuk mengiris beserta indeks atau indeks untuk mendapatkan substring Anda. Sebagai contoh :

+
name = 'John Doe' message = "John Doe belajar bahasa python di Belajarpython"
+print ("name[0]: ", name[0])
+print ("message[1:4]: ", message[1:4])
+
+

Bila kode diatas dieksekusi, maka akan menghasilkan hasil sebagai berikut :

+

name[0]: J +message[1:4]: ohn

+

Mengupdate String

+

Anda dapat "memperbarui" string yang ada dengan (kembali) menugaskan variabel ke string lain. Nilai baru dapat dikaitkan dengan nilai sebelumnya atau ke string yang sama sekali berbeda sama sekali. Sebagai contoh

+
message = 'Hello World'
+print ("Updated String :- ", message[:6] + 'Python')
+
+

Bila kode diatas dieksekusi, maka akan menghasilkan hasil sebagai berikut :

+

Updated String :- Hello Python

+

Escape Characters / Karakter Escape Python

+

Dibawah ini adalah tabel dari daftar karakter escape atau karakter non-printable yang dapat diwakili/ditulis dengan awalan notasi backslash.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Notasi BackslashKarakter HexadecimalPenjelasan
\a0x07Bell atau alert
\b0x08Backspace
\cxControl-x
\C-xControl-x
\e0x1bEscape
\f0x0cFormfeed
\M-\C-xMeta-Control-x
\n0x0aNewline
\nnnOctal notation, dimana n berada di range 0.7
\r0x0dCarriage return
\s0x20Space
\t0x09Tab
\v0x0bVertical tab
\xCharacter x
\xnnNotasi Hexadecimal, dimana n berada di range 0.9, a.f, atau A.F
+

Operator Spesial String Python

+

Asumsikan variabel string adalah 'Belajar' dan variabel b adalah 'Python', lalu dibawah ini adalah operator yang bisa dipakai pada kedua string di variabel tersebut. a = "Belajar" b = "Python"

+

Berikut adalah daftar operator spesial string pada Python :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OperatorContoh PenjelasanPenjelasan
+a + bakan menghasilkan BelajarPython Concatenation - Menambahkan nilai pada kedua sisi operator
*a*2akan menghasilkan BelajarBelajar Pengulangan - Membuat string baru, menggabungkan beberapa salinan dari string yang sama
[]a[1]akan menghasilkan e Slice - Memberikan karakter dari indeks yang diberikan
[ : ]a[1:4]akan menghasilkan ela Range Slice - Memberikan karakter dari kisaran yang diberikan
inB in aakan menghasilkan 1 Keanggotaan - Mengembalikan nilai true jika ada karakter dalam string yang diberikan
not inZ not in aakan menghasilkan 1 Keanggotaan - Mengembalikan nilai true jika karakter tidak ada dalam string yang diberikan
r/Rprint r'\n' prints \n dan print R'\n'prints \n Raw String -Menekan arti aktual karakter Escape. Sintaks untuk string mentah sama persis dengan string biasa kecuali operator string mentah, huruf "r", yang mendahului tanda petik. "R" bisa berupa huruf kecil (r) atau huruf besar (R) dan harus ditempatkan tepat sebelum tanda kutip pertama.
%Format - Melakukan format String
+

Operator Format String Python

+

Salah satu fitur Python yang paling keren adalah format string operator %. Operator ini unik untuk string dan membuat paket memiliki fungsi dari keluarga printf C () C. +berikut adalah contoh sederhananya : print ("My name is %s and weight is %d kg!" % ('Zara', 21))

+

Berikut adalah daftar lengkap simbol yang bisa digunakan bersamaan dengan % :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OperatorPenjelasan
%ccharacter
%sKonversi string melalui str () sebelum memformat
%iDianggap sebagai bilangan bulat desimal
%dDianggap sebagai bilangan bulat desimal
%uUnsigned decimal integer
%oBilangan bulat oktal
%xBilangan bulat heksadesimal (huruf kecil)
%XBilangan bulat heksadesimal (huruf besar)
%eNotasi eksponensial (dengan huruf kecil 'e')
%ENotasi eksponensial (dengan huruf besar 'E')
%fBilangan real floating point
%gYang lebih pendek dari% f dan% e
%GLebih pendek dari% f dan% E
+

Triple Quote Python

+

Python triple quotes digunakan dengan membiarkan string untuk ditulis dalam beberapa baris, termasuk kata kerja NEWLINEs, TABs, dan karakter khusus lainnya. +Sintaks untuk triple quotes terdiri dari tiga tanda kutip tunggal atau ganda ditulis berturut-turut : +Berikut adalah contohnya :

+
kutipantiga = """this is a long string that is made up of
+several lines and non-printable characters such as
+TAB ( \t ) and they will show up that way when displayed.
+NEWLINEs within the string, whether explicitly given like
+this within the brackets [ \n ], or just a NEWLINE within
+the variable assignment will also show up.
+"""
+print (kutipantiga)
+
+

String Unicode Python

+

Pada Python 3, semua string diwakili dalam Unicode. Sedangkan pada Python 2 disimpan secara internal sebagai 8-bit ASCII, maka diperlukanlampiran 'u' untuk membuatnya menjadi Unicode. Tetapi hal ini tidak lagi diperlukan sekarang. :

+

Metode String Built-in

+

Python menyertakan metode built-in berikut untuk memanipulasi string

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MetodePenjelasan
capitalize()Meng-kapitalkan huruf pertama string
center(width, fillchar)Mengembalikan string yang dilapisi dengan fillchar dengan string asli yang dipusatkan pada total width kolom.
count(str, beg = 0,end = len(string))Menghitung berapa kali str yang terjadi dalam string atau dalam substring string jika memulai indeks beg dan end index end diberikan.
decode(encoding = 'UTF-8',errors = 'strict')Dekode string menggunakan codec yang terdaftar untuk pengkodean. Encoding default ke pengkodean string default.
encode(encoding = 'UTF-8',errors = 'strict')Mengembalikan versi string yang dikodekan string; Pada kesalahan, default adalah menaikkan ValueError kecuali jika kesalahan diberikan dengan 'ignore' atau 'replace'.
endswith(suffix, beg = 0, end = len(string))Menentukan apakah string atau substring string (jika memulai indeks memohon dan mengakhiri akhir indeks diberikan) berakhir dengan akhiran; Mengembalikan nilai true jika benar dan salah.
expandtabs(tabsize = 8)Memperluas tab dalam string ke banyak ruang; Default ke 8 spasi per tab jika tabsize tidak tersedia.
find(str, beg = 0 end = len(string))Tentukan jika str terjadi dalam string atau dalam substring string jika memulai indeks beg dan end index end diberikan return index jika ditemukan dan -1 sebaliknya.
index(str, beg = 0, end = len(string))Sama seperti find (), namun menimbulkan pengecualian jika str tidak ditemukan.
isalnum()Mengembalikan true jika string memiliki minimal 1 karakter dan semua karakternya alfanumerik dan false sebaliknya.
isalpha()Mengembalikan true jika string memiliki minimal 1 karakter dan semua karakter adalah abjad dan false sebaliknya.
isdigit()Mengembalikan true jika string hanya berisi digit dan false sebaliknya.
islower()Mengembalikan true jika string memiliki setidaknya 1 karakter casing dan semua karakter casing dalam huruf kecil dan false sebaliknya.
isnumeric()Mengembalikan true jika string unicode hanya berisi karakter numerik dan false sebaliknya.
isspace()Mengembalikan true jika string hanya berisi karakter spasi dan false sebaliknya.
istitle()Mengembalikan true jika string benar "titlecased" dan false sebaliknya.
isupper()Mengembalikan true jika string memiliki setidaknya satu karakter casing dan semua karakter casing ada dalam huruf besar dan false sebaliknya.
join(seq)Merges (concatenates) representasi string elemen dalam urutan seq menjadi string, dengan string pemisah.
len(string)Mengembalikan panjang string
ljust(width[, fillchar])Mengembalikan string berlapis ruang dengan string asli dibiarkan dibenarkan ke kolom lebar total.
lower()Mengonversi semua huruf besar dalam bentuk string menjadi huruf kecil.
lstrip()Menghapus semua spasi utama dalam string.
maketrans()Mengembalikan tabel terjemahan untuk digunakan dalam fungsi terjemahan.
max(str)Mengembalikan karakter alfabetik dari string str.
min(str)Mengembalikan min karakter abjad dari string str.
replace(old, new [, max])Menggantikan semua kemunculan lama dalam string dengan kejadian baru atau paling maksimal jika max diberikan.
rfind(str, beg = 0,end = len(string))Sama seperti find (), tapi cari mundur dalam string.
rindex( str, beg = 0, end = len(string))Sama seperti index (), tapi cari mundur dalam string.
rjust(width,[, fillchar])Mengembalikan string berlapis ruang dengan senar asli benar-dibenarkan untuk total kolom lebar.
rstrip()Menghapus semua spasi spasi string.
split(str="", num=string.count(str))Membagi string sesuai dengan pemisah str (ruang jika tidak disediakan) dan mengembalikan daftar substring; Terpecah menjadi paling banyak substring jika diberikan.
splitlines( num=string.count('\n'))Membagi string sama sekali (atau num) NEWLINEs dan mengembalikan daftar setiap baris dengan NEWLINEs dihapus.
startswith(str, beg=0,end=len(string)Determines if string or a substring of string (if starting index beg and ending index end are given) starts with substring str; returns true if so and false otherwise.
strip([chars])Lakukan kedua lstrip () dan rstrip () pada string
swapcase()Kasus invers untuk semua huruf dalam string.
title()Mengembalikan versi string "titlecased", yaitu, semua kata diawali dengan huruf besar dan sisanya huruf kecil.
translate(table, deletechars="")Menerjemahkan string sesuai dengan tabel terjemahan str (256 karakter), menghapus string del.
upper()Mengonversi huruf kecil dalam bentuk string ke huruf besar.
zfill (width)Mengembalikan string asli yang tertinggal dengan angka nol ke total karakter lebar; Dimaksudkan untuk angka, zfill () mempertahankan tanda apapun yang diberikan (kurang satu nol).
isdecimal()Mengembalikan nilai true jika string unicode hanya berisi karakter desimal dan false sebaliknya.
+
+
+

Edit tutorial ini

+
+ +
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/tutorial/tanggal-waktu-python/index.html b/tutorial/tanggal-waktu-python/index.html new file mode 100644 index 00000000..c751a090 --- /dev/null +++ b/tutorial/tanggal-waktu-python/index.html @@ -0,0 +1,591 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tanggal & Waktu Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ + +
+ + + + +
+

Tanggal & Waktu Python

+

Program Python dapat menangani tanggal dan waktu dengan beberapa cara. Konversi antara format tanggal adalah tugas umum untuk komputer. Modul waktu dan kalender Python melacak tanggal dan waktu.

+

Apa itu Tick?

+

Interval waktu adalah bilangan floating-point dalam satuan detik. Instansi tertentu dalam waktu dinyatakan dalam hitungan detik sejak pukul 12:00 1 Januari 1970.

+

Dibawah ini adalah contoh penggunanaya.

+
import time; # Digunakan untuk meng-import modul time
+
+ticks = time.time()
+print "Berjalan sejak 12:00am, January 1, 1970:", ticks #python 2
+print ("Berjalan sejak 12:00am, January 1, 1970:", ticks) #untuk python 3 gunakan tanda kurung, print()
+
+

Apa itu TimeTuple Python?

+

Banyak fungsi waktu Python menangani waktu sebagai tuple dari 9 nomor, seperti yang terdapat pada tabel di bawah ini.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IndexFieldValue
04-digit year2008
1Bulan1 sampai 12
2Hari1 sampai 31
3Jam0 sampai 23
4Menit0 sampai 59
5Detik0 sampai 61
6Hari dalam Minggu0 sampai 6 (0 adalah Senin)
7Hari dalam Bulan1 sampai 366
8Daylight savings-1, 0, 1, -1 means library determines DST
+

Tuple di atas setara dengan struktur struct_time. Struktur ini memiliki atribut berikut

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IndexAtributValue
0tm_year2008
1tm_mon1 sampai 12
2tm_mday1 sampai 31
3tm_hour0 sampai 23
4tm_min0 sampai 59
5tm_sec0 sampai 61
6tm_wday0 sampai 6 (0 adalah Senin)
7tm_yday1 sampai 366
8tm_isdst-1, 0, 1, -1 means library determines DST
+

Mendapatkan Waktu Saat Ini

+

Untuk menerjemahkan waktu instan dari satu detik sejak nilai floating-point ke waktu menjadi tupel waktu, lewati nilai floating-point ke fungsi (mis., Localtime) yang mengembalikan waktu tupel dengan semua sembilan item valid.

+
import time;
+
+localtime = time.localtime(time.time())
+print "Waktu lokal saat ini :", localtime #python 2
+
+

Mendapatkan Waktu yang berformat

+

Anda dapat memformat kapan saja sesuai kebutuhan Anda, namun metode sederhana untuk mendapatkan waktu dalam format yang mudah dibaca adalah asctime ()

+
import time;
+
+localtime = time.asctime( time.localtime(time.time()) )
+print "Waktu lokal saat ini :", localtime #python 2
+
+

Mendapatkan kalender dalam sebulan

+

Modul kalender memberikan berbagai macam metode untuk dimainkan dengan kalender tahunan dan bulanan. Di sini, kami mencetak kalender untuk bulan tertentu (Jan 2008)

+
import calendar
+
+cal = calendar.month(2008, 1)
+print "Dibawah ini adalah kalender:" #python 2
+print cal
+
+

Modul time pada Python

+

Ada modul waktu populer yang tersedia dengan Python yang menyediakan fungsi untuk bekerja dengan waktu dan untuk mengkonversi antara representasi. Dibawah ini adalah tabel dari modul time pada python yang ada.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Fungsi PythonPenjelasan
time.altzoneDiimbangi zona waktu DST lokal, dalam detik di sebelah barat UTC, jika seseorang didefinisikan. Ini negatif jika zona waktu DST lokal berada di sebelah timur UTC (seperti di Eropa Barat, termasuk Inggris). Gunakan saja ini jika siang hari tidak nol.
time.asctime([tupletime])Menerima time-tupel dan mengembalikan string 24-karakter yang dapat dibaca seperti 'Tue Dec 11 18:07:14 2008'.
time.clock()Mengembalikan waktu CPU saat ini sebagai jumlah floating-point detik. Untuk mengukur biaya komputasi dari berbagai pendekatan, nilai time.clock lebih bermanfaat daripada time.time ().
time.ctime([secs])Seperti asctime (localtime (detik)) dan tanpa argumen seperti asctime ()
time.gmtime([secs])Menerima instan yang diungkapkan dalam hitungan detik sejak zaman dan mengembalikan waktu tuple t dengan waktu UTC. Catatan: t.tm_isdst selalu 0
time.localtime([secs])Menerima instan yang dinyatakan dalam hitungan detik sejak zaman dan mengembalikan waktu tuple t dengan waktu setempat (t.tm_isdst adalah 0 atau 1, tergantung pada apakah DST berlaku seketika oleh peraturan lokal).
time.mktime(tupletime)Menerima instan dinyatakan sebagai time-tuple di waktu setempat dan mengembalikan nilai floating-point dengan instan yang dinyatakan dalam hitungan detik sejak zaman.
time.sleep(secs)Menangguhkan panggilan untuk beberapa detik.
time.strftime(fmt[,tupletime])Menerima instan dinyatakan sebagai tupel waktu di waktu lokal dan mengembalikan sebuah string yang mewakili instan seperti yang ditentukan oleh string fmt.
time.strptime(str,fmt='%a %b %d %H:%M:%S %Y')Parses str sesuai dengan format string fmt dan mengembalikan format instant-tuple.
time.time()Mengembalikan waktu saat ini secara instan, jumlah detik mengambang beberapa detik sejak zaman itu.
time.tzset()Mengatur ulang aturan konversi waktu yang digunakan oleh rutinitas perpustakaan. Variabel lingkungan TZ menentukan bagaimana hal ini dilakukan.
+

Ada dua atribut penting yang tersedia dengan modul waktu:

+ + + + + + + + + + + + + + + + + +
Method PythonPenjelasan
time.timezoneAtribut time.timezone adalah offset dalam detik zona waktu lokal (tanpa DST) dari UTC (> 0 di Amerika; <= 0 di sebagian besar Eropa, Asia, Afrika).
time.tznameAtribut time.tzname adalah sepasang string yang bergantung pada lokal, yang merupakan nama zona waktu lokal tanpa dan dengan DST.
+

Modul calendar pada Python

+

Modul kalender menyimpan fungsi yang berhubungan dengan kalender, termasuk fungsi untuk mencetak kalender teks untuk bulan atau tahun tertentu.

+

Secara default, kalender mengambil hari Senin sebagai hari pertama dalam minggu dan minggu sebagai yang terakhir. Untuk mengubah ini, fungsi call calendar.setfirstweekday ().

+

Berikut adalah daftar fungsi yang tersedia dengan modul kalender:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Fungsi PythonPenjelasan
calendar.calendar(year,w=2,l=1,c=6)Mengembalikan string multiline dengan kalender untuk tahun tahun yang diformat menjadi tiga kolom yang dipisahkan oleh ruang c. W adalah lebar karakter setiap tanggal; Setiap baris memiliki panjang 21 _ w + 18 + 2 _ c. L adalah jumlah baris untuk setiap minggu.
calendar.firstweekday( )Mengembalikan pengaturan saat ini untuk hari kerja yang dimulai setiap minggu. Secara default, saat kalender pertama kali diimpor, ini adalah 0, yang berarti Senin.
calendar.isleap(year)Pengembalian True jika tahun adalah tahun kabisat; Jika tidak, False
calendar.leapdays(y1,y2)Mengembalikan jumlah lompatan hari dalam tahun-tahun dalam rentang (y1, y2).
calendar.month(year,month,w=2,l=1)Mengembalikan string multiline dengan kalender untuk bulan bulan tahun, satu baris per minggu ditambah dua baris header. W adalah lebar karakter setiap tanggal; Setiap baris memiliki panjang 7 * w + 6. L adalah jumlah baris untuk setiap minggu.
calendar.monthcalendar(year,month)Mengembalikan daftar daftar int. Setiap sublist menunjukkan seminggu. Hari di luar bulan bulan tahun diatur ke 0; Hari dalam bulan ditetapkan ke hari ke bulan, 1 dan ke atas.
calendar.monthrange(year,month)Mengembalikan dua bilangan bulat. Yang pertama adalah kode hari kerja untuk hari pertama bulan bulan di tahun; Yang kedua adalah jumlah hari dalam sebulan. Kode hari kerja adalah 0 (Senin) sampai 6 (Minggu); Angka bulan adalah 1 sampai 12.
calendar.prcal(year,w=2,l=1,c=6)Seperti kalender cetak.calendar (tahun, w, l, c).
calendar.prmonth(year,month,w=2,l=1)Seperti kalender cetak. Bulan (tahun, bulan, w, l).
calendar.setfirstweekday(weekday)Mengatur hari pertama setiap minggu sampai hari kerja kode hari kerja. Kode hari kerja adalah 0 (Senin) sampai 6 (Minggu).
calendar.timegm(tupletime)Kebalikan dari time.gmtime: menerima waktu instan dalam bentuk tupel waktu dan mengembalikan detik yang sama seperti jumlah floating-point dalam hitungan detik sejak zaman.
calendar.weekday(year,month,day)Mengembalikan kode hari kerja untuk tanggal yang ditentukan. Kode hari kerja adalah 0 (Senin) sampai 6 (Minggu); Bulan adalah 1 (Januari) sampai 12 (Desember).
+
+
+

Edit tutorial ini

+
+ +
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/tutorial/tipe-data-python/index.html b/tutorial/tipe-data-python/index.html new file mode 100644 index 00000000..d9803763 --- /dev/null +++ b/tutorial/tipe-data-python/index.html @@ -0,0 +1,397 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tipe Data Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ + +
+ + + + +
+

Tipe Data Python

+

Tipe data adalah suatu media atau memori pada komputer yang digunakan untuk menampung informasi.

+

Python sendiri mempunyai tipe data yang cukup unik bila kita bandingkan dengan bahasa pemrograman yang lain.

+

Berikut adalah tipe data dari bahasa pemrograman Python :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Tipe DataContohPenjelasan
BooleanTrue atau FalseMenyatakan benar True yang bernilai 1, atau salah False yang bernilai 0
String"Ayo belajar Python"Menyatakan karakter/kalimat bisa berupa huruf angka, dll (diapit tanda " atau ')
Integer25 atau 1209Menyatakan bilangan bulat
Float3.14 atau 0.99Menyatakan bilangan yang mempunyai koma
Hexadecimal9a atau 1d3Menyatakan bilangan dalam format heksa (bilangan berbasis 16)
Complex1 + 5jMenyatakan pasangan angka real dan imajiner
List['xyz', 786, 2.23]Data untaian yang menyimpan berbagai tipe data dan isinya bisa diubah-ubah
Tuple('xyz', 768, 2.23)Data untaian yang menyimpan berbagai tipe data tapi isinya tidak bisa diubah
Dictionary{'nama': 'adi','id':2}Data untaian yang menyimpan berbagai tipe data berupa pasangan penunjuk dan nilai
+

Untuk mencoba berbagai macam tipe data, silahkan coba script Python dibawah ini.

+
#tipe data Boolean
+print(True)
+
+#tipe data String
+print("Ayo belajar Python")
+print('Belajar Python Sangat Mudah')
+
+#tipe data Integer
+print(20)
+
+#tipe data Float
+print(3.14)
+
+#tipe data Hexadecimal
+print(9a)
+
+#tipe data Complex
+print(5j)
+
+#tipe data List
+print([1,2,3,4,5])
+print(["satu", "dua", "tiga"])
+
+#tipe data Tuple
+print((1,2,3,4,5))
+print(("satu", "dua", "tiga"))
+
+#tipe data Dictionary
+print({"nama":"Budi", 'umur':20})
+#tipe data Dictionary dimasukan ke dalam variabel biodata
+biodata = {"nama":"Andi", 'umur':21} #proses inisialisasi variabel biodata
+print(biodata) #proses pencetakan variabel biodata yang berisi tipe data Dictionary
+print(type(biodata)) #fungsi untuk mengecek jenis tipe data. akan tampil <class 'dict'> yang berarti dict adalah tipe data dictionary
+
+
+
+

Edit tutorial ini

+
+ +
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/tutorial/tuple-python/index.html b/tutorial/tuple-python/index.html new file mode 100644 index 00000000..c2e73489 --- /dev/null +++ b/tutorial/tuple-python/index.html @@ -0,0 +1,458 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tuple Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ + +
+ + + + +
+

Tuple Python

+

Sebuah tupel adalah urutan objek Python yang tidak berubah. Tupel adalah urutan, seperti daftar. Perbedaan utama antara tupel dan daftarnya adalah bahwa tupel tidak dapat diubah tidak seperti List Python. Tupel menggunakan tanda kurung, sedangkan List Python menggunakan tanda kurung siku.

+

Membuat tuple semudah memasukkan nilai-nilai yang dipisahkan koma. Secara opsional, Anda dapat memasukkan nilai-nilai yang dipisahkan koma ini di antara tanda kurung juga. Sebagai contoh :

+
#Contoh sederhana pembuatan tuple pada bahasa pemrograman python
+
+tup1 = ('fisika', 'kimia', 1993, 2017)
+tup2 = (1, 2, 3, 4, 5 )
+tup3 = "a", "b", "c", "d"
+
+

Tupel kosong ditulis sebagai dua tanda kurung yang tidak berisi apa-apa, contohnya : tup1 = (); +Untuk menulis tupel yang berisi satu nilai, Anda harus memasukkan koma, meskipun hanya ada satu nilai, contohnya : tup1 = (50,) +Seperti indeks String, indeks tuple mulai dari 0, dan mereka dapat diiris, digabungkan, dan seterusnya

+

Akses Nilai Dalam Tuple Python

+

Untuk mengakses nilai dalam tupel, gunakan tanda kurung siku untuk mengiris beserta indeks atau indeks untuk mendapatkan nilai yang tersedia pada indeks tersebut. Sebagai contoh :

+
#Cara mengakses nilai tuple
+
+tup1 = ('fisika', 'kimia', 1993, 2017)
+tup2 = (1, 2, 3, 4, 5, 6, 7 )
+
+print ("tup1[0]: ", tup1[0])
+print ("tup2[1:5]: ", tup2[1:5])
+
+

Setelah Anda mengeksekusi kode diatas, hasilnya akan seperti dibawah ini :

+

tup1[0]: fisika +tup2[1:5]: (2, 3, 4, 5)

+

Update Nilai Dalam Tuple Python

+

Tuple tidak berubah, yang berarti Anda tidak dapat memperbarui atau mengubah nilai elemen tupel. Anda dapat mengambil bagian dari tupel yang ada untuk membuat tupel baru seperti ditunjukkan oleh contoh berikut.

+
tup1 = (12, 34.56)
+tup2 = ('abc', 'xyz')
+
+# Aksi seperti dibawah ini tidak bisa dilakukan pada tuple python
+
+# Karena memang nilai pada tuple python tidak bisa diubah
+
+# tup1[0] = 100;
+
+# Jadi, buatlah tuple baru sebagai berikut
+
+tup3 = tup1 + tup2
+print (tup3)
+
+

Hapus Nilai Dalam Tuple Python

+

Menghapus elemen tuple individual tidak mungkin dilakukan. Tentu saja, tidak ada yang salah dengan menggabungkan tupel lain dengan unsur-unsur yang tidak diinginkan dibuang.

+

Untuk secara eksplisit menghapus keseluruhan tuple, cukup gunakan del statement. Sebagai contoh

+
tup = ('fisika', 'kimia', 1993, 2017)
+print(tup)
+
+# hapus tuple dengan statement del
+
+del tup
+
+# lalu buat kembali tuple yang baru dengan elemen yang diinginkan
+
+tup = ('Bahasa', 'Literasi', 2020)
+print("Setelah menghapus tuple :", tup)
+
+

Operasi Dasar Pada Tuple Python

+

Tupel merespons operator + dan * sama seperti String; Mereka berarti penggabungan dan pengulangan di sini juga berlaku, kecuali hasilnya adalah tupel baru, bukan string.

+

Sebenarnya, Tuple merespons semua operasi urutan umum yang kami gunakan pada String di bab sebelumnya. Dibawah ini adalah tabel daftar operasi dasar pada Tuple python

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Python ExpressionHasilPenjelasan
len((1, 2, 3))3Length
(1, 2, 3) + (4, 5, 6)(1, 2, 3, 4, 5, 6)Concatenation
('Halo!',) \* 4('Halo!', 'Halo!', 'Halo!', 'Halo!')Repetition
3 in (1, 2, 3)TrueMembership
for x in (1,2,3) : print (x, end = ' ')1 2 3Iteration
+

Indexing, Slicing dan Matrix Pada Tuple Python

+

Karena tupel adalah urutan, pengindeksan dan pengiris bekerja dengan cara yang sama untuk tupel seperti pada String, dengan asumsi masukan berikut

+

Dengan asumsi input berikut : T = ('C++', 'Java', 'Python')

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Python ExpressionHasilPenjelasan
T[2]'Python'Offset mulai dari nol
T[-2]'Java'Negatif: hitung dari kanan
T[1:]('Java', 'Python')Slicing mengambil bagian
+

Fungsi Build-in Pada Tuple Python

+

Python menyertakan fungsi built-in sebagai berikut

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Python FunctionPenjelasan
cmp(tuple1, tuple2)# Tidak lagi tersedia dengan Python 3
len(tuple)Memberikan total panjang tuple.
max(tuple)Mengembalikan item dari tuple dengan nilai maks.
min(tuple)Mengembalikan item dari tuple dengan nilai min.
tuple(seq)Mengubah seq menjadi tuple.
+
+
+

Edit tutorial ini

+
+ +
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/tutorial/variabel-python/index.html b/tutorial/variabel-python/index.html new file mode 100644 index 00000000..a431d534 --- /dev/null +++ b/tutorial/variabel-python/index.html @@ -0,0 +1,344 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Variabel Python - Belajarpython – Situs Open Source Tutorial Pemrograman Python Bahasa Indonesia + + + +
+ + +
+ + + + +
+

Variabel Python

+

Variabel adalah lokasi memori yang dicadangkan untuk menyimpan nilai-nilai. Ini berarti bahwa ketika Anda membuat sebuah variabel Anda memesan beberapa ruang di memori. Variabel menyimpan data yang dilakukan selama program dieksekusi, yang nantinya isi dari variabel tersebut dapat diubah oleh operasi - operasi tertentu pada program yang menggunakan variabel.

+

Variabel dapat menyimpan berbagai macam tipe data. Di dalam pemrograman Python, variabel mempunyai sifat yang dinamis, artinya variabel Python tidak perlu didekralasikan tipe data tertentu dan variabel Python dapat diubah saat program dijalankan.

+

Penulisan variabel Python sendiri juga memiliki aturan tertentu, yaitu :

+
    +
  1. Karakter pertama harus berupa huruf atau garis bawah/underscore _
  2. +
  3. Karakter selanjutnya dapat berupa huruf, garis bawah/underscore _ atau angka
  4. +
  5. Karakter pada nama variabel bersifat sensitif (case-sensitif). Artinya huruf kecil dan huruf besar dibedakan. Sebagai contoh, variabel namaDepan dan namadepan adalah variabel yang berbeda.
  6. +
+

Untuk mulai membuat variabel di Python caranya sangat mudah, Anda cukup menuliskan variabel lalu mengisinya dengan suatu nilai dengan cara menambahkan tanda sama dengan = diikuti dengan nilai yang ingin dimasukan.

+

Dibawah ini adalah contoh penggunaan variabel dalam bahasa pemrograman Python

+
#proses memasukan data ke dalam variabel
+nama = "John Doe"
+#proses mencetak variabel
+print(nama)
+
+#nilai dan tipe data dalam variabel dapat diubah
+umur = 20 #nilai awal
+print(umur) #mencetak nilai umur
+type(umur) #mengecek tipe data umur
+umur = "dua puluh satu" #nilai setelah diubah
+print(umur) #mencetak nilai umur
+type(umur) #mengecek tipe data umur
+
+namaDepan = "Budi"
+namaBelakang = "Susanto"
+nama = namaDepan + " " + namaBelakang
+umur = 22
+hobi = "Berenang"
+print("Biodata\n", nama, "\n", umur, "\n", hobi)
+
+#contoh variabel lainya
+inivariabel = "Halo"
+ini_juga_variabel = "Hai"
+\_inivariabeljuga = "Hi"
+inivariabel222 = "Bye"
+
+panjang = 10
+lebar = 5
+luas = panjang \* lebar
+print(luas)
+
+
+
+

Edit tutorial ini

+
+ +
+ + + + +
+ + + + + + + + \ No newline at end of file