Freecodecamp: Kurikulum Python Masa Depan [Diskusi]

Dibuat pada 25 Apr 2017  ·  56Komentar  ·  Sumber: freeCodeCamp/freeCodeCamp

Kurikulum Python

Masalah ini akan menjadi utas utama untuk perencanaan & pengembangan Kurikulum Python FCC di masa depan.

Untuk diskusi apa pun tentang Mengintegrasikan Kelas REPL.it, silakan kunjungi https://github.com/freeCodeCamp/freeCodeCamp/issues/14736 sebagai gantinya

Kami sedang bekerja untuk menjalankan rangkaian pengujian Python yang dapat diverifikasi pada widget Repl.it iframe. Setelah kami membuatnya berfungsi, kami akan mulai menerapkan kurikulum yang ditetapkan yang ditentukan di utas ini. Jika Anda tertarik untuk mengembangkan bagian dari kurikulum FCC Python ini, silakan kirim pesan ke diri saya sendiri (Ethan Arrowood) di Gitter atau beri komentar di bawah.

Harap dicatat untuk menulis semua tantangan Python di versi 3.6



Struktur saat ini untuk Kurikulum Python FCC adalah: Bagian Pemula, Bagian Menengah, & Bagian Topik Khusus.

Bagian Pemula:

  • [] Pengantar Python
  • [] Keluaran

    • Mencetak

    • Karakter Escape

    • memasukkan

  • [] Jenis Data

    • Integer, Float

    • String

    • Tuple

    • Daftar

    • Set

    • Kamus

  • [] Operator

    • +, - ,, /,%, *

    • <,>, <=,> =, ==,! =

    • =

    • Benar, Salah, dan, atau, tidak

    • di, bukan di

    • adalah, bukan

  • [x] Matematika - @bgroveben

    • Tambah, Kurangi, Kalikan, Bagi

    • Power, sqrt (), abs (), round (), sum (), max (), min ()

  • [] Variabel
  • [] Persyaratan

    • if, elif, else

  • [] Loop

    • sementara, untuk (dalam kisaran), untuk (dalam daftar), untuk (dalam string)

  • [] Fungsi
  • [] Kelas

Bagian Menengah:

  • [] Berkas I / O
  • [] Iterator & Generator
  • [x] Lambda - @robbiemu
  • [] Persyaratan
  • [] OOP
  • [] Modul, Perpustakaan, Paket
  • [] File dan Penanganan Kesalahan
  • [] Objek Lanjutan dan Tipe Data
  • [] Format Cetak
  • [] Daftar Pemahaman
  • [] Dekorator

Bagian Topik Khusus:

  • [ ] Pembelajaran mesin
  • [] Pengembangan Game
  • [] Webscraping (BeautifulSoup)
  • [] GIS (Leaflet / Folium)
  • [] Flask / Django (lebih baik fokus pada salah satu, tidak keduanya)
  • [] Analisis Data (Panda / Numpy)
  • [] Visualisasi Data (brokeh)
  • [] GUI (tkinter)
  • [] Geocoding (geopy)
  • [] Perangkat Bahasa Alami (NLTK)

Punya ide untuk pelajaran bagian?

Beri komentar di bawah dan tentukan Bagian mana yang harus ditambahkan dan mengapa.

Ingin mengembangkan kurikulum untuk pelajaran?

Beri komentar di bawah detail berikut:

  • Judul
  • Deskripsi / Penjelasan / Pelajaran
  • Kode Prompt / Tantangan
  • Kode yang telah ditentukan sebelumnya
  • Larutan
  • Tes

Ingin mengubah pelajaran yang sudah ada?

Berikan pembaruan Anda dengan penjelasan mendetail mengapa Anda membuat perubahan yang diberikan.



Segera akan datang

-

Bagaimana Mengusulkan Tantangan Python

https://github.com/freeCodeCamp/freeCodeCamp/tree/feature/python-challenges

Mengusulkan tantangan Python?

learn

Komentar yang paling membantu

Hai teman-teman, saya pendiri / CEO Repl.it. FCC dekat dan sangat disayangi, jadi kami akan melakukan apa pun yang dapat kami lakukan agar dapat mendukungnya di sini. Apa kendala utama dalam mengadopsi ruang kelas Repl.it untuk ini?

Semua 56 komentar

Inilah yang bisa kita tambahkan ::
Pemula

  • Persyaratan

Menengah:

  • Iterator & Generator
  • Lambda
  • Persyaratan
  • OOP
  • Modul, Perpustakaan, Paket
  • File dan Penanganan Kesalahan
  • Objek Tingkat Lanjut dan Tipe Data
  • Format Cetak

Maju:

  • Webscraping (BeautifulSoup)
  • GIS (Leaflet / Folium)
  • Flask / Django (saya lebih condong ke arah Django)
  • Analisis Data (Panda / Numpy)
  • Visualisasi Data (brokeh)
  • GUI (tkinter)
  • Geocoding (geopy)

@mstellaluna Terima kasih atas rekomendasi Anda. Apa perbedaan antara bagian bersyarat Pemula dan bagian bersyarat Menengah?

@ Ethan-Arrowood bagi saya dasar-dasarnya seharusnya hanya berupa pengetahuan minimal (jika, lain, untuk, yang mana). Entri saya untuk "bersyarat" di perantara akan menjadi kondisional berdasarkan masukan pengguna atau pernyataan terner .. hal yang sama untuk pemformatan cetak .. dasar akan menjadi pernyataan cetak sederhana sedangkan perantara kita dapat memperkenalkan pernyataan cetak dengan variabel,% s. dll

Repl.it memiliki area baru untuk membuat ruang kelas khusus. Anda dapat membuat tugas dengan instruksi.

Repl.it Kelas
https://repl.it/site/classrooms

Daftar ruang kelas Komunitas
https://repl.it/community

Saya sarankan untuk menambahkan bagian algoritme dasar, menengah, dan lanjutan (mirip dengan kurikulum Front End FCC untuk JavaScript).

Saya telah melihat contoh FCC-Python-Variable-Challenge yang diberikan, dan saya perhatikan bahwa tantangan tersebut mengharapkan sedikit pengetahuan 'prasyarat'. Seolah-olah camper telah diperkenalkan dengan variabel sebelumnya.

Deskripsi / Penjelasan tantangan variabel tidak menjelaskan apa itu variabel. Tidak seperti tantangan Declare JavaScript Variables , yang memberikan sedikit pengantar tentang apa itu variabel.

Saya tahu ini hanya sebuah contoh - tetapi hanya untuk memastikan - apakah kita akan menganggap bahwa pekemah sudah melalui kurikulum JavaScript saat membangun kurikulum Python?

@jamesperrin Ya, kami telah

@ U-cara Ya itu kesalahan saya. Tujuannya agar ini menjadi kurikulum mandiri sehingga penjelasan sebenarnya jauh lebih detail (seperti versi JS). Terima kasih telah menyoroti ini :)

@AnikaErceg ini akan menjadi bagian latihan yang bagus. Pasti akan mengingatnya. Terima kasih!

@ Ethan-Arrowood Anda mungkin ingin memasukkan Natural Language Toolkit.

Saya menambahkan pemahaman daftar ke menengah

Bagaimana dengan dekorator di bawah mahir? Saya berasumsi manajer konteks akan muncul selama penanganan file?

@ t3h2mas Saya menempatkan dekorator di bawah perantara.

Jika Anda menambahkan for (in list) , mungkin Anda juga bisa menambahkan for (in string) ?
Juga, pengenalan operator in juga bagus (saya tahu saya menemukan hidup saya lebih mudah ketika saya menemukan bahwa itu tidak harus digunakan hanya dengan for loop: smiley :).

@AnikaErceg saran bagus. Selesai. Saya menambahkan adalah dan tidak juga.

@ginoskotheon Anda lupa menambahkan for (in string) bawah pengulangan atau tidak ada gunanya memperkenalkannya? : smiley:

Saya seorang pengembang yang bahasa pertamanya adalah Python ... Saya sudah membantu dengan bab FCC lokal saya dan penyelenggara menyarankan saya mungkin ingin membantu dengan kurikulum baru. Saya tidak 100% yakin bagaimana cara mulai berkontribusi, tapi saya pasti ingin. Saya juga cukup aktif dalam komunitas Python, baik secara lokal maupun luas, jadi saya bisa mendapatkan banyak mata yang berpengetahuan saat dibutuhkan.

Saran pertama saya:

  • [] buat semua contoh mengikuti PEP 8
  • [] Pelajaran boolean harus dalam 'tipe data' bersama dengan nilai 'truthy' dan 'falsy'
  • [] beberapa pustaka standar harus disertakan di suatu tempat ( itertools , collections )
  • [] beberapa perpustakaan dasar dapat disertakan ( requests , scrapy , dll)
  • [] Saya tidak yakin apa arti 'Escape sequences' dalam 'Output', tetapi jika mengacu pada string gaya %s .... biarkan itu untuk 'hal-hal lama yang mungkin Anda temui, tetapi jangan benar-benar perlu khawatir tentang 'bagian dan cukup ajarkan gaya baru f dan .format() string gaya.
  • [] bagian perulangan menyebutkan range , list , dan 'string' seperti semuanya berbeda, tetapi dalam Python semuanya dapat diulang, itulah mengapa Anda dapat mengulanginya dengan hal yang sama kata kunci. Mungkin itu bisa disinggung di bagian 'iterator & generator'.

    • [] enumerate()

  • [] manajer konteks harus disebutkan di suatu tempat.
  • [] mungkin ada bagian lanjutan untuk asyncio
  • [] biasanya PEP 20 diajarkan di suatu tempat di awal bersama dengan beberapa contoh spam dan eggs .
  • [] tes
  • [] virtualenvs
  • [] memasang
  • [] komentar
    Saya akan sangat senang membantu proyek ini sebisa saya. Saya sudah berpikir cukup lama bahwa kami membutuhkan sesuatu seperti ini.

@cldershem Begitu banyak saran bagus terima kasih! Dengan pengalaman Anda, jenis kontribusi terbaik yang dapat Anda berikan adalah menulis pelajaran / tantangan itu sendiri. Beri tahu saya mana yang ingin Anda tulis 😄

@tokopedia

Saya tidak 100% yakin bagaimana cara mulai berkontribusi, tapi saya pasti ingin.

https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Pull-Request-Contribute

Mungkin mengarahkan Anda ke arah yang benar.

Mungkin @ Ethan-Arrowood akan menerima kiriman melalui komentar Github juga?

@ t3h2mas Ya, seperti yang saya katakan di bagian paling atas, pengiriman pelajaran / tantangan dapat dilakukan di sini di utas ini sebagai komentar 😄

@cldershem Cara lain Anda dapat membantu adalah jika Anda mengetahui cara yang baik untuk membuat tantangan dalam browser yang benar-benar dapat diuji (dengan unittest). Kami menjelajahi semua jenis opsi dari REPL.it ke codeMirror hingga Skulpt.

@cldershem Saya mungkin harus menulis "karakter melarikan diri". Itu adalah hal-hal seperti '\ n', '\ t', dll.

Dan saya tahu itu dapat diulang tetapi saya mulai memecah hal-hal dalam hal pelajaran seukuran gigitan individu.

Omong-omong, terima kasih atas semua saran dan semua bantuannya. Saya berencana mengerjakan contoh pelajaran / tantangan selama akhir pekan dan semoga bisa menjadi semacam template untuk orang lain. Jika Anda ingin menangani pelajaran / tantangan yang fungsinya mirip dengan cara kerja tantangan Free Code Camp, silakan kirim kode Anda. Saya ingin sekali melihatnya.

@ Ethan-Arrowood @ginoskeon @ldershem
Saya juga ingin membantu menulis pelajaran dan tantangan untuk kursus FCC-Python.
Saya melihat dari komentar sebelumnya bahwa Repl.it Classroom bukanlah pilihan terbaik, tetapi saya dapat mulai mengerjakan pelajaran (judul, deskripsi, tes, dll yang dijelaskan di atas) di sana. Setelah platform / kerangka kerja ditetapkan, saya selalu dapat memodifikasi kode dan memindahkannya.
Saya menulis beberapa contoh latihan yang dapat Anda temukan di sini ; Anda seharusnya dapat melihatnya, tetapi Anda harus masuk untuk mengimpornya, lihat di balik terpal dan memodifikasinya.
Silakan berkomentar, mengkritik, dan mengubah pelajaran itu sendiri, dan beri tahu saya jika platform / kerangka kerja yang lebih sesuai telah diputuskan.
Sementara itu, saya dapat mengerjakan pelajaran Pemula yang dijelaskan di atas, dimulai dengan matematika dan melanjutkan ke hal lain yang perlu dilakukan.

Hai teman-teman, saya pendiri / CEO Repl.it. FCC dekat dan sangat disayangi, jadi kami akan melakukan apa pun yang dapat kami lakukan agar dapat mendukungnya di sini. Apa kendala utama dalam mengadopsi ruang kelas Repl.it untuk ini?

@amasad halo! Senang kamu ada di sini 😄
Rintangan utama yang kita hadapi dalam mengadopsi Repl.it ke dalam kursus FCC Python adalah berinteraksi dengan unit Repl.it Classroom. Kami menyukai struktur Repl.it Classroom untuk dapat menjalankan file independen dengan pengujian unit; Namun, kami tidak tahu bagaimana cara mengetahui saat pengguna menyelesaikan tantangan (melewati semua unittests). Tentu saja perilaku ini tertanam dalam Repl.it, tetapi untuk menjaga nuansa FreeCodeCamp saat ini, kami ingin dapat mengarahkan pengguna ke tantangan berikutnya secara otomatis (atau meminta mereka untuk melakukannya) setelah mereka menyelesaikan tantangan saat ini (yaitu berhasil melewati semua unittests).

Ada ide tentang bagaimana kita bisa menerapkan ini? FCC ditulis dalam JavaScript sehingga segala jenis api web atau modul npm akan bekerja dengan cukup baik.

Jika menurut Anda banyak pemirsa Anda akan berasal dari latar belakang JavaScript, saya pikir dasar tentang perbedaan akan berguna. Sebagai contoh

// javascript
var dict = {
    a : 1
};

console.log(dict.a)
# python
dict = {
    "a" : 1
}

print(dict["a"])

Contoh lain akan melakukan perulangan melalui kamus atau larik dengan for loop. Ini membuatku tersandung sepanjang waktu.

_Title_ Pengantar Lambdas

_Deskripsi / Penjelasan / Pelajaran_
srcs:

1 http://stackoverflow.com/questions/890128/why-are-python-lambdas-useful
2 http://www.secnetix.de/olli/Python/lambda_functions.hawk
3 https://pythonconquerstheuniverse.wordpress.com/2011/08/29/lambda_tutorial/
4 http://stackoverflow.com/questions/16501/what-is-a-lambda-function
5 https://en.wikipedia.org/wiki/Anonymous_function

"Fungsi anonim (fungsi literal, abstraksi lambda) adalah definisi fungsi yang tidak terikat ke pengenal." [5] Kata "Lambda berasal dari Lambda Calculus" [4]. Dalam python, lambda adalah kata kunci untuk mendefinisikan fungsi anonim. Menggunakan kata kunci lambda alih-alih kata kunci def , lambda dasar terlihat seperti ini: lambda x: x**2 Ini dapat ditempatkan ke variabel dan digunakan kembali seperti fungsi:

>>> def f (x): return x**2
>>> print f(8)
64
>>> g = lambda x: x**2
>>> print g(8)
64

_src 2_

Kasus penggunaan yang paling umum adalah membuat kode tetap pendek dan dapat dibaca, daripada memisahkan definisi dan penggunaan sesuai contoh ini:

def __init__(self, parent):
    """Constructor"""
    frame = tk.Frame(parent)
    frame.pack()

    btn22 = tk.Button(frame,
        text="22", command=self.buttonCmd22)
    btn22.pack(side=tk.LEFT)

    btn44 = tk.Button(frame,
        text="44", command=self.buttonCmd44)
    btn44.pack(side=tk.LEFT)

def buttonCmd22(self):
    self.printNum(22)

def buttonCmd44(self):
    self.printNum(44)

_src 3_

Dalam antarmuka GUI Tkinter ini, sebuah fungsi harus diteruskan ke atribut _command_. Fungsi-fungsi ini dinamai dengan angka karena dibuat dengan pembuat RAD. Ini bagus dan fungsional, tetapi tidak terlalu terbaca. Anda dapat mengganti namanya dan itu membuat semuanya lebih jelas, tetapi jika Anda memiliki banyak tombol, akan menjadi rumit untuk mencari melalui kode untuk menemukan perintah yang tepat, dan karena mereka hanya mengembalikan nilai dasar, solusi yang lebih baik adalah dengan mendefinisikan berfungsi di sana, secara anonim:

frame = tk.Frame(parent)
frame.pack()

btn22 = tk.Button(frame,
        text="22", command=lambda: self.printNum(22))
btn22.pack(side=tk.LEFT)

btn44 = tk.Button(frame,
        text="44", command=lambda: self.printNum(44))
btn44.pack(side=tk.LEFT)

_src 3_

Fitur utama lain dari penggunaan ini adalah membuat kode lebih pendek juga, yang berarti lebih mudah tersedia bagi programmer saat mencari alat sebagai bagian dari solusi yang lebih besar.

_Code Prompt / Challenge_
Tulis ekspresi lambda yang memiliki fitur utama yang dijelaskan di atas; membuat kode lebih terbaca dengan memindahkan semua kode yang digunakan ke tempat yang sama; menghasilkan kode yang lebih pendek dan alami.

_Kode yang telah ditentukan sebelumnya_

# only edit below this line
def y(z):
  return abs(5-z)

print(sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=y))

_src 1_

_Larutan_
print(sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x)))

@robbiemu kerja bagus! Satu-satunya saran saya adalah menambahkan komentar di bagian Kode yang Ditentukan sebelumnya di sebelah baris cetak yang mengatakan sesuatu seperti # only edit this line . Juga saya percaya ini adalah kode python 2 dan kami akan mengajarkan python 3 jadi saya pikir satu-satunya perubahan adalah baris cetak membutuhkan pembungkus '()'.
Terima kasih atas kontribusi anda!

Ethan, terima kasih. Saya akan terus mengerjakan ini. Masalah dan solusinya dapat diubah sehingga ada tes yang masuk akal juga (tidak menggunakan kumpulan data statis, seperti yang saya miliki di sini). Saya ingin melihat contoh pelajaran untuk pendekatan terbaik untuk melakukan ini.

@robbiemu tentu saja. Kami masih mengerjakan REPL.it dan akan memperbarui utas ini segera setelah kami mengetahui lebih banyak informasi. Kerja bagus untuk saat ini 😄

Ini adalah salah satu tantangan kode untuk bagian Pemula - Matematika yang tercantum di awal utas ini.

_Title_ - Nilai Mutlak

_Deskripsi / Penjelasan / Pelajaran_ -
Nilai absolut mengacu pada seberapa jauh sebuah angka dari nol.
Jika suatu angka negatif, abs () akan mengubahnya menjadi positif.
Dalam abs (x), x bisa berupa bilangan bulat, float, atau kompleks.
https://docs.python.org/3/library/functions.html#abs
https://docs.python.org/3/library/stdtypes.html#numeric -types-int-float-complex

>>> abs(2)
2
>>> abs(-2)
2
>>> abs(-2.0)
2.0

_Code Prompt / Challenge_ -
Variabel absolute_value sama dengan -42.
Ubah nilai_mutlak sehingga sama dengan nilai absolut -42.

_Kode yang telah ditentukan sebelumnya_ -

absolute_value = -42

_Solusi_ -

absolute_value = abs(-42)

_Tests_ -

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(absolute_value, int)
        self.assertEqual(absolute_value, 42)

@brovinsi Banten. kerja bagus!

@ Ethan-Arrowood Terima kasih! Saya juga telah menulis pelajaran untuk tantangan dasar / matematika lainnya yang tercantum di atas. Saya dapat memposting masing-masing di utas ini jika Anda mau. Juga, saya pikir akan menjadi ide yang bagus untuk memasukkan round (), sum (), max (), dan min () dengan pelajaran dasar matematika - mereka akan berguna.

@bgroveben Saya akan menandainya sebagai selesai dan ya, silakan. Tolong lakukan setiap tantangan dalam komentar terpisah; akan lebih mudah untuk mereferensikan perubahan atau apapun. Terima kasih atas kontribusi Anda!

@ Ethan-Arrow

@amasad halo! Senang kamu ada di sini 😄

Senang berada di sini 💃

Rintangan utama yang kita hadapi dalam mengadopsi Repl.it ke dalam kursus FCC Python adalah berinteraksi dengan unit Repl.it Classroom. Kami menyukai struktur Repl.it Classroom untuk dapat menjalankan file independen dengan pengujian unit; Namun, kami tidak tahu bagaimana cara mengetahui saat pengguna menyelesaikan tantangan (melewati semua unittests). Tentu saja perilaku ini tertanam dalam Repl.it, tetapi untuk menjaga nuansa FreeCodeCamp saat ini, kami ingin dapat mengarahkan pengguna ke tantangan berikutnya secara otomatis (atau meminta mereka untuk melakukannya) setelah mereka menyelesaikan tantangan saat ini (yaitu berhasil melewati semua unittests).

Ada ide tentang bagaimana kita bisa menerapkan ini? FCC ditulis dalam JavaScript sehingga segala jenis api web atau modul npm akan bekerja dengan cukup baik.

Yang paling mudah adalah kita memanggangnya. Buat pengaturan di sisi guru untuk hal-hal yang mengatakan "maju otomatis" atau semacamnya. (Kami tidak menentang penambahan webhook dll, tetapi demi mengurangi kerumitan) Apakah itu berhasil?

@amasad menggunakan fitur "auto-advance", kami pasti dapat meniru FreeCodeCamp di kelas Repl.it, tetapi kami masih tidak dapat melacak kemajuan pengguna di bagian akhir FCC yang sangat penting bagi nuansa FCC.

Bagaimana dengan fitur yang memungkinkan kita DAPATKAN / POSKAN data dari 'Kelas'. Dengan cara ini kita bisa melakukan sesuatu seperti:

repl.getUser('classroomID', 'userID').then( () => {
    // do stuff async 
}).catch( (error) => {
    // handle error
});

atau lebih baik lagi:

repl.getProgress('classroomID', 'lessonID', 'userID').then( () => { }).catch( (e) => { });

Sekarang kedua metode ini akan berjalan di pihak kami, tetapi karena REPL Classroom disematkan melalui iframe, kami setidaknya memerlukan beberapa pemicu peristiwa sederhana dari sisi REPL untuk melacak kemajuan pengguna individu dengan benar.

Selain itu, karena Kelas akan disematkan melalui iframe, kami berpotensi mendapatkan fitur bahwa ketika pengguna menyelesaikan pelajaran, Kelas REPL menjalankan beberapa baris JavaScript (yang dapat kami tentukan melalui portal Guru) sehingga kami dapat mengarahkan ruang kelas berkomunikasi dengan FCC?

Kami berharap dapat menggunakan ruang kelas REPL tidak hanya untuk Python, tetapi juga untuk bahasa lain. Setelah Kurikulum Python FCC aktif dan berjalan dengan sukses, kami akan melanjutkan untuk mengimplementasikan bahasa seperti Java atau C ++ (atau secara harfiah bahasa apa pun yang dapat ditawarkan REPL untuk kami gunakan!).

Saya ingin mendapatkan opini @QuincyLarson tentang hal ini serta beberapa kontributor utama FCC lainnya (saya akan mencoba menghubungi mereka di Gitter / Forum).

Halo semuanya, terima kasih banyak atas komentar dan sarannya.

@amasad Terima kasih telah meluangkan waktu untuk membagikan pemikiran dan ide Anda di sini. Senang mengetahui bahwa REPL.it sedang mengerjakan produk ruang kelas, yang ingin kami integrasikan dalam platform.

Sebagai permulaan, akan sangat bagus jika kita dapat membahas ini dalam diskusi terpisah alih-alih utas kurikulum ini, agar lebih relevan dengan integrasi itu sendiri.

@ Ethan-Arrowood Kerja yang luar biasa dengan inisiatif ini. Terima kasih atas kerja keras Anda.

@amasad @QuincyLarson Saya telah secara resmi memindahkan diskusi kelas REPL ke utas masalah ini (sesuai rekomendasi @raisedadead ). https://github.com/freeCodeCamp/freeCodeCamp/issues/14736

menindaklanjuti komentar oleh cldershem (dikomentari 8 hari yang lalu), ini satu untuk collections -

Judul

Namedtuples

Deskripsi / Penjelasan / Pelajaran

1 https://en.wikipedia.org/wiki/Tuple
2 https://docs.python.org/3.6/library/collections.html
3 https://docs.python.org/3.6/library/collections.html#collections.namedtuple
4 https://pythonprogramming.net/reading-csv-files-python-3/

Tupel adalah konsep umum dalam matematika. Ini dianggap sebagai daftar elemen yang berurutan terbatas. [1] Dalam python, ini secara fungsional mirip dengan kamus, di mana kunci ditentukan sebelumnya. Namedtuple dapat digunakan untuk menyediakan pohon properti cepat untuk penggunaan apa pun: seperti jika aplikasi Anda harus berurusan dengan kaus kaki dan semua kaus kaki memiliki ukuran dan harga, maka tuple dengan dua bidang berguna, mendekati kamus {size: _size_, price: _price_} . Untuk mendapatkan tupel dengan bidang ini Anda meneruskan bidang ke fungsi pabrik collections.namedtuple : [2]
collections.namedtuple(Socks, ['size', 'price'])
Untuk kenyamanan, terutama saat memproses informasi dari sumber teks biasa, nama kolom dapat berupa larik, atau string tunggal dengan nilai dipisahkan koma dan / atau dipisahkan spasi: [3]
EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')
Semua pengenal Python yang valid dapat digunakan untuk _fieldname_ kecuali untuk nama yang dimulai dengan garis bawah. Pengenal yang valid terdiri dari huruf, angka, dan garis bawah tetapi tidak dimulai dengan digit atau garis bawah dan tidak dapat berupa kata kunci seperti class, for, return, global, pass, atau raise. [3]
Setelah dibuat, mereka dapat digunakan untuk membuat instance dengan entri seperti kamus:

Point = namedtuple('Point', ['x', 'y'])
p = Point(x=11, y=22)
p[0] + p[1] # 33
x, y = p # (11, 22)
p.x + p.y # 33
p # Point(x=11, y=22)

_from_ [3]

Kode Prompt / Tantangan

Penggunaan yang baik dari nametuple adalah untuk memfasilitasi penyerapan data, seperti dari ekspor csv dari database. Pada kode berikut, perbaiki impor CSV ini dengan tupel.

Kode yang telah ditentukan sebelumnya

import csv
import collections

# only change code below this line!
recordData = ['fieldNames'] # find the fieldnames in the code below
# only change code above this line!
EmployeeRecord = collections.namedtuple('EmployeeRecord', recordData)

with open('employee-records.csv') as csvfile:
    readCSV = csv.reader(csvfile, delimiter=',')
    for row in readCSV:
# onlt change code below this line!
        name = row[0]
        age = row[1]
        title = row[2]
        department = row[3]
        paygrade = row[4]

        processEmployee([name, age, title, department, paygrade]) # fails because processEmployee accepts an EmployeeRecord Tuple!
# only change code above this line!

_berasal dari_ [4]

_note_: di atas menggunakan file sebenarnya, tetapi kita dapat mengganti with ... readCSV lines dengan sesuatu seperti:
readCSV = csv.reader(['Alan,42,Manager,Sales, N1', 'Beth,38,Regional Director,Operations,CO','Robin,23,Associate,Sales,C2']

Larutan

import csv
import collections

# only change code below this line!
recordData = ['name', 'age', 'title', 'department', 'paygrade']
# only change code above this line!
EmployeeRecord = collections.namedtuple('EmployeeRecord', recordData)

with open('employee-records.csv') as csvfile:
    readCSV = csv.reader(csvfile, delimiter=',')
    for row in readCSV:
# onlt change code below this line!
        employee = EmployeeRecord(*row)

        processEmployee(employee)
# only change code above this line!

Pelajaran 2:

Judul

nametuples._make

Deskripsi / Penjelasan / Pelajaran

1 https://docs.python.org/3.6/library/collections.html#collections.namedtuple

Metode NamedTuples yang disebut __make_ memfasilitasi pembuatan instance dalam fungsi iterator. Ini akan membuat masalah dari pelajaran sebelumnya menjadi lebih singkat.
Ini digunakan seperti:

for emp in map(EmployeeRecord._make, allRows):
    print(emp.name, emp.title)

Kode Prompt / Tantangan

Kami meninjau kembali pelajaran sebelumnya dan merevisi kode. Hampir selesai, tapi pekerjaannya belum selesai. Demi kenyamanan Anda, beberapa catatan dicetak di mana Anda harus memproses catatan tersebut. Ingat, kita perlu membuat EmployeeRecord dan meneruskannya ke fungsi lain dalam kode, seperti:

        employee = EmployeeRecord(*row)

        processEmployee(employee)

Kode yang telah ditentukan sebelumnya

import csv
from collections import namedtuple

EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')

for emp in map(EmployeeRecord._make, csv.reader(open("employees.csv", "rb"))):
# only change code below this line!
    print(emp.name, emp.title)

Larutan

EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')

import csv
for emp in map(EmployeeRecord._make, csv.reader(open("employees.csv", "rb"))):
# only change code below this line!
    processEmployee(emp)

Kami mungkin juga dapat menggunakan pelajaran singkat yang menggambarkan:

  • n = NamedTuple(**Dictionary)
  • gunakan ._fields untuk membuat formulir pengganti: TwoD = namedtuple('TwoD', 'x y') => ThreeD = namedtuple('ThreeD', TWo._fields + ('z',))
  • cakupan kasus penggunaan dasar: konsumsi data (seperti csv), transaksi database, transaksi jaringan, memfasilitasi POJO (atau .. apakah POPO adalah sesuatu dengan Python? lol)

Berikut adalah tantangan matematika pemula lainnya:

__Title: __ Penambahan Python

__Keterangan / Penjelasan / Pelajaran: __

Dalam Python, integer (int) adalah salah satu dari 3 tipe numerik yang berbeda.
Dalam latihan ini, Anda akan menambahkan dua bilangan bulat menggunakan operator plus (+).

>>> 2 + 2
4

__Code Prompt / Challenge: __

Ubah 0 sehingga totalnya menjadi 20.

__Kode yang ditentukan sebelumnya: __

total = 10 + 0

__Larutan:__

total = 10 + 10

__Tests: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(total, int)
        self.assertEqual(total, 20)

__Judul:__
Hitung hasil bagi dan sisa menggunakan fungsi divmod ().

__Keterangan / Penjelasan / Pelajaran: __

Divmod mengambil dua bilangan (non kompleks) sebagai argumen dan mengembalikan sepasang bilangan yang terdiri dari hasil bagi dan sisa saat menggunakan pembagian integer.
Untuk bilangan bulat, hasilnya sama dengan (a // b, a% b).

>>> divmod(1, 1)
(1, 0)
>>> divmod(3, 2)
(1, 1)

__Code Prompt / Challenge: __

Dalam latihan ini, variabel a dan b ditentukan untuk Anda.
Tentukan hasil bernama variabel yang memanggil fungsi divmod pada variabel a dan b (dalam urutan itu).

__Kode yang ditentukan sebelumnya: __

a = 11
b = 3

__Larutan:__

a = 11
b = 3
result = divmod(a, b)

__Tests: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(result, tuple)
        self.assertEqual(result, (3, 2))

__Title: __ Eksponen Python

__Keterangan / Penjelasan / Pelajaran: __

Python menggunakan operator tanda bintang ganda (**) untuk menangani eksponensial.
Angka sebelum tanda bintang adalah basis, dan angka setelahnya adalah eksponen.
Python juga memungkinkan Anda menggunakan fungsi built-in pow (x, y), yang memberi Anda x pangkat y.

>>> 2 ** 2
4
>>> pow(2, 4)
16

__Code Prompt / Challenge: __

Di konsol, Anda diberikan dua variabel, a dan b.
Menggunakan salah satu metode yang dijelaskan dalam pelajaran ini, tentukan variabel bernama pangkat yang sama dengan a pangkat b.

__Kode yang ditentukan sebelumnya: __

a = 3
b = 4

__Larutan:__

a = 3
b = 4
power = pow(a, b)
# or #
power = a ** b

__Tests: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(power, int)
        self.assertEqual(power, 81)

__Title: __ Divisi Float Python

__Keterangan / Penjelasan / Pelajaran: __

Python 3 membedakan antara divisi integer (floor) dan divisi float (true).
Python menggunakan satu operator garis miring (/) untuk pembagian float.
Saat menggunakan pembagian float, bahkan jika hasil bagi (result) adalah bilangan bulat seperti 1 atau 2, bilangan floating point akan dikembalikan, bukan int.

>>> 1 / 1
1.0
>>> 3 / 2
1.5

__Code Prompt / Challenge: __

Ketika Anda menjalankan kode yang ada, variabel bernama hasil bagi akan memiliki nilai 1,0.
Ubah bilangan kedua (penyebut) sehingga hasil bagi memiliki nilai 2,5.

__Kode yang ditentukan sebelumnya: __

quotient = 5 / 5

__Larutan:__

quotient = 5 / 2

__Tests: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(quotient, float)
        self.assertEqual(quotient, 2.5)

__Title: __ Divisi Integer Python

__Keterangan / Penjelasan / Pelajaran: __

Python 3 membedakan antara divisi integer (floor) dan divisi float (true).
Python menggunakan operator garis miring ganda (//) untuk pembagian integer.
Saat menggunakan pembagian bilangan bulat, Python akan membulatkan hasil bagi ke bawah ke bilangan bulat terdekat.

>>> 1 // 1
1
>>> 3 // 2
1

__Code Prompt / Challenge: __

Saat Anda menjalankan kode yang ada, variabel bernama hasil bagi akan memiliki nilai 1.
Ubah bilangan kedua (penyebut) sehingga hasil bagi memiliki nilai 2.

__Kode yang ditentukan sebelumnya: __

quotient = 5 // 5

__Larutan:__

quotient = 5 // 2

__Tests: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(quotient, int)
        self.assertEqual(quotient, 2)

__Title: __ Nilai Maksimum Python

__Keterangan / Penjelasan / Pelajaran: __

Fungsi max () mengembalikan item terbesar dalam iterable (seperti daftar atau string), atau yang terbesar dari dua argumen atau lebih.
Saat memberikan iterable sebagai argumen, kita harus memastikan bahwa semua elemen dalam iterable memiliki tipe yang sama.
Jika iterable kosong dan default tidak disediakan, ValueError akan dimunculkan.

>>> max(1,2,3,4)
4
>>> list1 = ['a', 'e', 'i', 'o', 'u']
>>> max(list1)
'u'
>>> string1 = "largest"
>>> max(string1)
't'

__Code Prompt / Challenge: __

Kode awal memiliki daftar nomor yang diberi nama, yah, nomor.
Variabel tertinggi diinisialisasi ke angka.
Buat nilai tertinggi sama dengan angka terbesar dalam angka.

__Kode yang ditentukan sebelumnya: __

numbers = [8, 2, 4, 3, 6, 5, 9, 1]
highest = numbers

__Larutan:__

numbers = [8, 2, 4, 3, 6, 5, 9, 1]
highest = max(numbers)

__Tests: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(highest, int)
        self.assertEqual(highest, 9)

__Title: __ Nilai Minimum Python

__Keterangan / Penjelasan / Pelajaran: __

Fungsi min () mengembalikan item terkecil dalam iterable (seperti daftar atau string), atau yang terkecil dari dua argumen atau lebih.
Saat memberikan iterable sebagai argumen, kita harus memastikan bahwa semua elemen dalam iterable memiliki tipe yang sama.
Jika iterable kosong dan default tidak disediakan, ValueError akan dimunculkan.

>>> min(1,2,3,4)
1
>>> list1 = ['a', 'e', 'i', 'o', 'u']
>>> min(list1)
'a'
>>> string1 = "smallest"
>>> min(string1)
'a'

__Code Prompt / Challenge: __

Kode awal memiliki daftar huruf bernama, yah, huruf.
Variabel terendah diinisialisasi ke huruf.
Buat nilai terendah sama dengan huruf 'terkecil' (menurut abjad pertama) dalam huruf.

__Kode yang ditentukan sebelumnya: __

letters = ['m','o','n','t','y','p','y','t','h','o','n']
lowest = letters

__Larutan:__

letters = ['m','o','n','t','y','p','y','t','h','o','n']
lowest = min(letters)

__Tests: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(lowest, str)
        self.assertEqual(lowest, 'h')

__Title: __ Perkalian Python

__Keterangan / Penjelasan / Pelajaran: __

Python menggunakan operator asterisk (*) untuk perkalian.

>>> 3 * 3
9

__Code Prompt / Challenge: __

Ubah 0 sehingga hasil kali akan sama dengan 80.

__Kode yang ditentukan sebelumnya: __

product = 8 * 0

__Larutan:__

product = 8 * 10

__Tests: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(product, int)
        self.assertEqual(product, 80)

__Title: __ Sisa Python

__Keterangan / Penjelasan / Pelajaran: __

Operator% (modulo) menghasilkan sisa dari pembagian argumen pertama dengan argumen kedua.
Operator modulo selalu menghasilkan hasil dengan tanda yang sama dengan operan keduanya (atau nol).

>>> 3 % 2
1
>>> 3 % 2.0
1.0

Cara sederhana untuk menentukan apakah suatu bilangan ganjil atau genap adalah dengan memeriksa sisanya ketika bilangan itu dibagi 2.
Untuk bilangan ganjil, sisanya adalah 1.
Untuk bilangan genap, sisanya adalah 0.

>>> 3 % 2
1
>>> 4 % 2
0

__Code Prompt / Challenge: __

Tetapkan sisa variabel yang sama dengan sisa 11 dibagi 3 menggunakan operator modulo (%).

__Kode yang ditentukan sebelumnya: __

remainder = "Solution goes here"

__Larutan:__

remainder = 11 % 3

__Tests: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(remainder, int)
        self.assertEqual(remainder, 2)

__Title: __ Pembulatan Python

__Keterangan / Penjelasan / Pelajaran: __

Fungsi putaran (angka, n-digit) mengembalikan angka yang dibulatkan ke presisi n-digit setelah koma desimal.
Jika n-digit dihilangkan atau None, ia mengembalikan integer terdekat ke inputnya.
Nilai yang dikembalikan adalah bilangan bulat jika dipanggil dengan satu argumen, jika tidak, jenisnya sama dengan bilangan yang diberikan.

>>> round(5)
5
>>> round(5.5)
6
>>> round(5.555, 1)
5.6

__Code Prompt / Challenge: __

Variabel long_pi memiliki terlalu banyak digit setelah tempat desimal.
Buat variabel bernama lebih pendek_pi yang bisa kita gunakan sebagai gantinya.
Gunakan fungsi round () untuk menampilkan hanya 2 digit pertama setelah koma desimal, dan tetapkan nilai tersebut ke short_pi.

__Kode yang ditentukan sebelumnya: __

longer_pi = 3.14159265358979323846

__Larutan:__

longer_pi = 3.14159265358979323846
shorter_pi = round(longer_pi, 2)

__Tests: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(shorter_pi, float)
        self.assertEqual(shorter_pi, 3.14)

__Title: __ Akar Persegi Python

__Keterangan / Penjelasan / Pelajaran: __

Fungsi math.sqrt () adalah bagian dari modul matematika Python, yang selalu tersedia tetapi harus diimpor.
Math.sqrt (x) mengembalikan akar kuadrat dari x sebagai bilangan floating-point.

>>> import math
>>> math.sqrt(4)
2.0
>>> math.sqrt(2)
1.4142135623730951

__Code Prompt / Challenge: __

Variabel square_root didefinisikan sebagai angka 81.
Ubah akar kuadrat sehingga sama dengan akar kuadrat dari 81.
Modul matematika telah diimpor untuk Anda.

__Kode yang ditentukan sebelumnya: __

import math
square_root = 81

__Larutan:___

import math
square_root = math.sqrt(81)

__Tests: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(square_root, float)
        self.assertEqual(square_root, 9.0)

__Title: __ Pengurangan Python

__Keterangan / Penjelasan / Pelajaran: __

Dalam Python, integer (int) adalah salah satu dari 3 tipe numerik yang berbeda.
Dalam latihan ini, Anda akan mengurangi dua bilangan bulat menggunakan operator minus (-).

>>> 2 - 1
1

__Code Prompt / Challenge: __

Ubah 0 sehingga totalnya menjadi 10.

__Kode yang ditentukan sebelumnya: __

total = 20 - 0

__Larutan:__

total = 20 - 10

__Tests: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(total, int)
        self.assertEqual(total, 10)

__Title: __ Python Sum

__Keterangan / Penjelasan / Pelajaran: __

Fungsi jumlah (iterable) menambahkan semua item dalam Python iterable (list, tuple, dan seterusnya) dari kiri ke kanan dan mengembalikan total.
Ada argumen opsional kedua, mulai, yang defaultnya 0 dan ditambahkan ke total.
Item iterable biasanya berupa angka, dan nilai awal tidak boleh berupa string.

>>> numbers = [1, 2, 3, 4, 5]
>>> sum(numbers)
15
>>> sum(numbers, 1)
16
>>> sum(numbers, 10)
25

__Code Prompt / Challenge: __

Ada dua daftar angka.
Temukan jumlah semua item di kedua daftar dan tetapkan nilai itu ke variabel bernama total.

__Kode yang ditentukan sebelumnya: __

list1 = [1, 3, 5, 7, 9]
list2 = [2, 4, 6, 8, 10]

__Larutan:__

list1 = [1, 3, 5, 7, 9]
list2 = [2, 4, 6, 8, 10]
total = sum(list1, sum(list2))

__Tests: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(total, int)
        self.assertEqual(total, 55)

Saya pikir itu mencakup semua pelajaran yang tercantum di bagian dasar / matematika.
Tolong beri tahu saya jika Anda ingin menambahkan lagi.
Selain itu, jangan ragu untuk melakukan pengeditan, perubahan, saran, dan sebagainya.
Saya memiliki semua pelajaran yang baru saja saya posting dalam file .py dan .md di:
https://github.com/bgroveben/FCC_Python.
Saya juga telah menyiapkan REPL Classroom di:
https://repl.it/community/classrooms/18388.

Harap dicatat - kami memindahkan diskusi tentang tantangan pengkodean Python kami ke repositori baru ini: https://github.com/freeCodeCamp/python-coding-challenges/issues

Posting di sini untuk referensi:
Saya pikir Max dan Min mungkin ingin keduanya:

  1. Gunakan angka untuk kejelasan - pengguna mungkin tidak tahu bagaimana char adalah integer
  2. Pastikan untuk menggunakan beberapa contoh dari satu nomor - untuk benar-benar mendorong perilaku tersebut
Apakah halaman ini membantu?
0 / 5 - 0 peringkat