Freecodecamp: ๋ฏธ๋ž˜ ํŒŒ์ด์ฌ ์ปค๋ฆฌํ˜๋Ÿผ [ํ† ๋ก ]

์— ๋งŒ๋“  2017๋…„ 04์›” 25์ผ  ยท  56์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: freeCodeCamp/freeCodeCamp

Python ์ปค๋ฆฌํ˜๋Ÿผ

์ด ๋ฌธ์ œ๋Š” ํ–ฅํ›„ FCC Python ์ปค๋ฆฌํ˜๋Ÿผ์„ ๊ณ„ํšํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๋Š” ์ฃผ์š” ์Šค๋ ˆ๋“œ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

REPL.it ํด๋ž˜์Šค ๋ฃธ ํ†ตํ•ฉ์— ๋Œ€ํ•œ ๋…ผ์˜๋Š” https://github.com/freeCodeCamp/freeCodeCamp/issues/14736 ์„ ๋ฐฉ๋ฌธ

์šฐ๋ฆฌ๋Š” ํ˜„์žฌ iframe Repl.it ์œ„์ ฏ์—์„œ ๊ฒ€์ฆ ๊ฐ€๋Šฅํ•œ Python ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ž‘๋™ํ•˜๊ฒŒ๋˜๋ฉด์ด ์Šค๋ ˆ๋“œ์— ์ •์˜ ๋œ ๋ ˆ์ด์•„์›ƒ ์ปค๋ฆฌํ˜๋Ÿผ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์‹œ์ž‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. FCC Python ์ปค๋ฆฌํ˜๋Ÿผ์˜์ด ๋ถ€๋ถ„์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ์œผ์‹œ๋ฉด Gitter์— ๋‚˜ ์ž์‹  (Ethan Arrowood)์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ฑฐ๋‚˜ ์•„๋ž˜์— ์˜๊ฒฌ์„ ๋‚จ๊ฒจ์ฃผ์‹ญ์‹œ์˜ค.

๋ฒ„์ „ 3.6์—์„œ ๋ชจ๋“  Python ๋ฌธ์ œ๋ฅผ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค.



FCC Python ์ปค๋ฆฌํ˜๋Ÿผ์˜ ํ˜„์žฌ ๊ตฌ์กฐ๋Š” ์ดˆ๊ธ‰ ์„น์…˜, ์ค‘๊ธ‰ ์„น์…˜ ๋ฐ ํŠน๋ณ„ ์ฃผ์ œ ์„น์…˜์ž…๋‹ˆ๋‹ค.

์ดˆ๊ธ‰ ์„น์…˜ :

  • [] Python ์†Œ๊ฐœ
  • [] ์ถœ๋ ฅ

    • ์ธ์‡„

    • ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž

    • ์ž…๋ ฅ

  • [] ๋ฐ์ดํ„ฐ ์œ ํ˜•

    • ์ •์ˆ˜, ๋ถ€๋™ ์†Œ์ˆ˜์ 

    • ๋ฌธ์ž์—ด

    • ํŠœํ”Œ

    • ๊ธฐ์šธ๊ธฐ

    • ์„ธํŠธ

    • ์‚ฌ์ „

  • [] ์—ฐ์‚ฐ์ž

    • +,-,, /, %, *

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

    • =

    • ์ฐธ, ๊ฑฐ์ง“ ๋ฐ ๋˜๋Š”

    • ์•ˆ, ์•ˆ

    • ์ด๋‹ค, ์•„๋‹ˆ๋‹ค

  • [x] ์ˆ˜ํ•™-@bgroveben

    • ๋”ํ•˜๊ธฐ, ๋นผ๊ธฐ, ๊ณฑํ•˜๊ธฐ, ๋‚˜๋ˆ„๊ธฐ

    • ๊ฑฐ๋“ญ ์ œ๊ณฑ, sqrt (), abs (), round (), sum (), max (), min ()

  • [ ] ๋ณ€์ˆ˜
  • [] ์กฐ๊ฑด๋ถ€

    • if, elif, else

  • [] ๋ฃจํ”„

    • while, for (in range), for (in list), for (in string)

  • [] ๊ธฐ๋Šฅ
  • [ ] ํด๋ž˜์Šค

์ค‘๊ฐ„ ์„น์…˜ :

  • [] ํŒŒ์ผ I / O
  • [] ๋ฐ˜๋ณต๊ธฐ ๋ฐ ์ƒ์„ฑ๊ธฐ
  • [x] Lambda-@robbiemu
  • [] ์กฐ๊ฑด๋ถ€
  • [] OOP
  • [] ๋ชจ๋“ˆ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํŒจํ‚ค์ง€
  • [] ํŒŒ์ผ ๋ฐ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ
  • [] ๊ณ ๊ธ‰ ๊ฐœ์ฒด ๋ฐ ๋ฐ์ดํ„ฐ ์œ ํ˜•
  • [] ์ธ์‡„ ์„œ์‹
  • [] ๋ชฉ๋ก ์ดํ•ด
  • [] ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ

ํŠน๋ณ„ ์ฃผ์ œ ์„น์…˜ :

  • [] ๋จธ์‹  ๋Ÿฌ๋‹
  • [] ๊ฒŒ์ž„ ๊ฐœ๋ฐœ
  • [] ์›น ์Šคํฌ๋ž˜ํ•‘ (BeautifulSoup)
  • [] GIS (๋ฆฌํ”Œ๋ฆฟ / ํด๋ฆฌ ์›€)
  • [] Flask / Django (๋‘˜ ๋‹ค๊ฐ€ ์•„๋‹Œ ํ•˜๋‚˜์— ์ง‘์ค‘ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค)
  • [] ๋ฐ์ดํ„ฐ ๋ถ„์„ (Panda / Numpy)
  • [] ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” (ํŒŒ์†)
  • [] GUI (tkinter)
  • [] ์ง€์˜ค ์ฝ”๋”ฉ (geopy)
  • [] ์ž์—ฐ์–ด ๋„๊ตฌ ํ‚คํŠธ (NLTK)

์„น์…˜ ์ˆ˜์—…์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋ž˜์— ์ฃผ์„์„ ๋‹ฌ๊ณ  ์ถ”๊ฐ€ํ•ด์•ผํ•˜๋Š” ์„น์…˜๊ณผ ์ด์œ ๋ฅผ ์ง€์ •ํ•˜์‹ญ์‹œ์˜ค.

์ˆ˜์—…์„์œ„ํ•œ ์ปค๋ฆฌํ˜๋Ÿผ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์‹ถ์œผ์‹ญ๋‹ˆ๊นŒ?

๋‹ค์Œ ์„ธ๋ถ€ ์ •๋ณด ์•„๋ž˜์— ์˜๊ฒฌ์„ ๋‚จ๊ฒจ์ฃผ์„ธ์š”.

  • ํ‘œ์ œ
  • ์„ค๋ช… / ์„ค๋ช… / ๊ฐ•์˜
  • ์ฝ”๋“œ ํ”„๋กฌํ”„ํŠธ / ์ฑŒ๋ฆฐ์ง€
  • ๋ฏธ๋ฆฌ ์ •์˜ ๋œ ์ฝ”๋“œ
  • ํ•ด๊ฒฐ์ฑ…
  • ํ…Œ์ŠคํŠธ

๊ธฐ์กด ๊ฐ•์˜๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์œผ์‹ญ๋‹ˆ๊นŒ?

๋ณ€๊ฒฝ ํ•œ ์ด์œ ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…๊ณผ ํ•จ๊ป˜ ์—…๋ฐ์ดํŠธ๋ฅผ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.



๊ณง ์ถœ์‹œ

-

ํŒŒ์ด์ฌ ์ฑŒ๋ฆฐ์ง€๋ฅผ ์ œ์•ˆํ•˜๋Š” ๋ฐฉ๋ฒ•

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

ํŒŒ์ด์ฌ ์ฑŒ๋ฆฐ์ง€๋ฅผ ์ œ์•ˆ ํ•˜์‹œ๋‚˜์š”?

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์•ˆ๋…•ํ•˜์„ธ์š”, ์ €๋Š” Repl.it์˜ ์ฐฝ๋ฆฝ์ž ๊ฒธ CEO์ž…๋‹ˆ๋‹ค. FCC๋Š” ์šฐ๋ฆฌ ๋งˆ์Œ์— ๊ฐ€๊น๊ณ  ์†Œ์ค‘ํ•˜๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ˆ˜์žˆ๋Š” ๋ชจ๋“  ์ผ์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด Repl.it ๊ฐ•์˜์‹ค์„ ์ฑ„ํƒํ•˜๋Š” ๋ฐ์žˆ์–ด ์ฃผ์š” ์žฅ์• ๋ฌผ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋ชจ๋“  56 ๋Œ“๊ธ€

์ถ”๊ฐ€ ํ•  ์ˆ˜์žˆ๋Š” ํ•ญ๋ชฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ดˆ๋ณด์ž

  • ์กฐ๊ฑด๋ถ€

์ค‘๊ธ‰ :

  • ๋ฐ˜๋ณต๊ธฐ ๋ฐ ์ƒ์„ฑ๊ธฐ
  • ๋žŒ๋‹ค
  • ์กฐ๊ฑด๋ถ€
  • OOP
  • ๋ชจ๋“ˆ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํŒจํ‚ค์ง€
  • ํŒŒ์ผ ๋ฐ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ
  • ๊ณ ๊ธ‰ ๊ฐœ์ฒด ๋ฐ ๋ฐ์ดํ„ฐ ์œ ํ˜•
  • ์ธ์‡„ ์„œ์‹

๋งŽ์€:

  • ์›น ์Šคํฌ๋ž˜ํ•‘ (BeautifulSoup)
  • GIS (๋ฆฌํ”Œ๋ฆฟ / ํด๋ฆฌ ์›€)
  • Flask / Django (Django์— ๋” ์˜์ง€ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค)
  • ๋ฐ์ดํ„ฐ ๋ถ„์„ (Panda / Numpy)
  • ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” (ํŒŒ์†)
  • GUI (tkinter)
  • ์ง€์˜ค ์ฝ”๋”ฉ (geopy)

@mstellaluna ์ถ”์ฒœ

@ Ethan-Arrowood ๋‚˜๋ฅผ ์œ„ํ•ด ๊ธฐ๋ณธ์€ ์ตœ์†Œํ•œ์˜ ์ง€์‹์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค (if, else, for, which). ์ค‘๊ฐ„์—์žˆ๋Š” "์กฐ๊ฑด๋ถ€"ํ•ญ๋ชฉ์€ ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๋˜๋Š” ์‚ผ ํ•ญ๋ฌธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์กฐ๊ฑด๋ฌธ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ธ์‡„ ํ˜•์‹ํ™” .. ๊ธฐ๋ณธ์€ ๊ฐ„๋‹จํ•œ ์ธ์‡„ ๋ช…๋ น๋ฌธ์ด์ง€๋งŒ ์ค‘๊ฐ„ ๋ณ€์ˆ˜ ์ธ % s๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์‡„ ๋ช…๋ น๋ฌธ์„ ๋„์ž… ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. . ๋“ฑ

Repl.it์—๋Š” ๋งž์ถคํ˜• ๊ต์‹ค์„ ๋งŒ๋“ค๊ธฐ์œ„ํ•œ ์ƒˆ๋กœ์šด ์˜์—ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์นจ์— ๋”ฐ๋ผ ๊ณผ์ œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Repl.it ๊ฐ•์˜์‹ค
https://repl.it/site/classrooms

์ปค๋ฎค๋‹ˆํ‹ฐ ๊ต์‹ค ๋ชฉ๋ก
https://repl.it/community

๊ธฐ๋ณธ, ์ค‘๊ธ‰ ๋ฐ ๊ณ ๊ธ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„น์…˜์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค (FCC ํ”„๋ŸฐํŠธ ์—”๋“œ ์ปค๋ฆฌํ˜๋Ÿผ์ด JavaScript์— ๋Œ€ํ•ด ๊ฐ–๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌ).

์ฃผ์–ด์ง„ FCC-Python-Variable-Challenge ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณธ ๊ฒฐ๊ณผ ๋„์ „์ด ์•ฝ๊ฐ„์˜ '์ „์ œ ์กฐ๊ฑด'์ง€์‹์„ ๊ธฐ๋Œ€ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ์บ ํ•‘์นด๊ฐ€ ์ „์— ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ์†Œ๊ฐœ ๋œ ๊ฒƒ์ฒ˜๋Ÿผ.

๋ณ€์ˆ˜ ์ฑŒ๋ฆฐ์ง€์— ๋Œ€ํ•œ ์„ค๋ช… / ์„ค๋ช…์€ ๋ณ€์ˆ˜๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. JavaScript์˜ Declare JavaScript Variables challenge ์™€ ๋‹ฌ๋ฆฌ ๋ณ€์ˆ˜๊ฐ€ ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•œ ์•ฝ๊ฐ„์˜ ์†Œ๊ฐœ๊ฐ€ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.

์ €๋Š” ์ด๊ฒƒ์ด ๋‹จ์ง€ ์˜ˆ์ผ ๋ฟ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ํ™•์‹คํžˆํ•˜๊ธฐ ์œ„ํ•ด ์บ ํ”„ ์ฐธ๊ฐ€์ž๊ฐ€ Python ์ปค๋ฆฌํ˜๋Ÿผ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋™์•ˆ ์ด๋ฏธ JavaScript ์ปค๋ฆฌํ˜๋Ÿผ์„ ํ†ต๊ณผํ–ˆ๋‹ค๊ณ  ๊ฐ€์ • ํ•  ๊ฒƒ์ž…๋‹ˆ๊นŒ?

@jamesperrin ์˜ˆ, ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์กฐ์‚ฌํ–ˆ์ง€๋งŒ FCC ์‚ฌ์ดํŠธ์— ์‚ฌ์šฉ์ž๋ฅผ ์œ ์ง€ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋ฌธ์ œ๊ฐ€ ํฌํ•จ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Repl Classrooms์˜ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ์— ์•ก์„ธ์Šค ํ•  ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค.

@ U-ways ๋„ค ๊ทธ๊ฑด ๋‚ด ์‹ค์ˆ˜์˜€์Šต๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” ์ด๊ฒƒ์ด ๋…๋ฆฝ์  ์ธ ์ปค๋ฆฌํ˜๋Ÿผ์ด๋ฏ€๋กœ ์‹ค์ œ ์„ค๋ช…์ด ํ›จ์”ฌ ๋” ์ž์„ธํ•ด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค (JS ๋ฒ„์ „์ฒ˜๋Ÿผ). ์ด๊ฒƒ์„ ๊ฐ•์กฐ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :)

@AnikaErceg ์ด๊ฒƒ๋“ค์€ ํ›Œ๋ฅญํ•œ ์—ฐ์Šต ์„น์…˜์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ๋ช…์‹ฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

@ Ethan-Arrowood Natural Language Toolkit์„ ํฌํ•จ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ค‘๊ธ‰์— ๋ชฉ๋ก ์ดํ•ด๋ ฅ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ณ ๊ธ‰ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ํŒŒ์ผ ์ฒ˜๋ฆฌ ์ค‘์— ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ์ž๊ฐ€ ์˜ฌ ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๊นŒ?

@ t3h2mas ๋‚˜๋Š” ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์ค‘๊ฐ„์— ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

for (in list) ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค๋ฉด for (in string) ๋„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
๋˜ํ•œ,์— ๋Œ€ํ•œ ์†Œ๊ฐœ in ์šด์˜์ž๋„ ์ข‹์€ ๊ฒƒ (๋‚˜๋Š” ๋‹จ์ง€์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜์—†๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์„ ๋•Œ ๋‚ด ์ธ์ƒ ์‰ฝ๊ฒŒ ์ฐพ์„ ์•Œ๊ณ  for ๋ฃจํ”„ : ์Šค๋งˆ์ผ :).

@AnikaErceg ์ข‹์€ ์ œ์•ˆ. ๋๋‚œ. ๋‚ด๊ฐ€ ์ถ”๊ฐ€ ํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

@ginoskotheon ๋ฃจํ”„ ์•„๋ž˜์— for (in string) ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์—ˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋„์ž… ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๊นŒ? : ์Šค๋งˆ์ผ :

์ €๋Š” Python์ด ๋ชจ๊ตญ์–ด ์ธ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค ... ์ €๋Š” ์ด๋ฏธ ์ง€์—ญ FCC ์ง€๋ถ€์—์„œ ๋„์›€์„ ๋ฐ›์•˜๊ณ  ์ฃผ์ตœ์ž๋Š” ์ƒˆ๋กœ์šด ์ปค๋ฆฌํ˜๋Ÿผ์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ๊ธฐ์—ฌ๋ฅผ ์‹œ์ž‘ํ•ด์•ผํ• ์ง€ 100 % ํ™•์‹คํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ํ™•์‹คํžˆํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ Python ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ง€์—ญ์ ์œผ๋กœ๋‚˜ ์ „์ฒด์ ์œผ๋กœ ๊ฝค ํ™œ๋™ ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•  ๋•Œ ๋งŽ์€ ์ง€์‹์„ ๊ฐ€์ง„ ๋ˆˆ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜์˜ ์ฒซ ๋ฒˆ์งธ ์ œ์•ˆ :

  • [] ๋ชจ๋“  ์˜ˆ์ œ๊ฐ€ PEP 8์„ ๋”ฐ๋ฅด๋„๋กํ•ฉ๋‹ˆ๋‹ค.
  • [] ๋ถ€์šธ ๋ ˆ์Šจ์€ 'truthy'๋ฐ 'falsy'๊ฐ’๊ณผ ํ•จ๊ป˜ '๋ฐ์ดํ„ฐ ์œ ํ˜•'์— ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  • [] ์ผ๋ถ€ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์–ด๋”˜๊ฐ€์— ํฌํ•จ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค ( itertools , collections ).
  • [] ์ผ๋ถ€ ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ( requests , scrapy ๋“ฑ).
  • [] '์ถœ๋ ฅ'์—์„œ '์ด์Šค์ผ€์ดํ”„ ์‹œํ€€์Šค'๊ฐ€ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ %s ์Šคํƒ€์ผ ๋ฌธ์ž์—ด์„ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ ... '๋ ˆ๊ฑฐ์‹œ ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ํ•ด๋‹น ํ•ญ๋ชฉ์„ ๋‚จ๊ฒจ ๋‘์‹ญ์‹œ์˜ค. ์„น์…˜์— ๋Œ€ํ•ด ์ •๋ง ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์žˆ์œผ๋ฉฐ ์ƒˆ๋กœ์šด ์Šคํƒ€์ผ f ๋ฐ .format() ์Šคํƒ€์ผ ๋ฌธ์ž์—ด์„ ๊ฐ€๋ฅด์น˜๊ธฐ ๋งŒํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค.
  • [] ๋ฃจํ”„ ์„น์…˜์€ range , list , 'string'์„ ๋ชจ๋‘ ๋‹ค๋ฅธ ๊ฒƒ์ฒ˜๋Ÿผ ์–ธ๊ธ‰ํ•˜์ง€๋งŒ Python์—์„œ๋Š” ๋ชจ๋‘ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋™์ผํ•œ ์ฝ”๋“œ๋กœ ๋ฐ˜๋ณต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ‚ค์›Œ๋“œ. '๋ฐ˜๋ณต์ž ๋ฐ ์ƒ์„ฑ๊ธฐ'์„น์…˜์—์„œ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • [] enumerate()

  • [] ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ์ž๋Š” ์–ด๋”˜๊ฐ€์— ์–ธ๊ธ‰๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  • [] asyncio ๋Œ€ํ•œ ๊ณ ๊ธ‰ ์„น์…˜์ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • [] ์ „ํ†ต์ ์œผ๋กœ PEP 20 ์€ spam ๋ฐ eggs ์˜ˆ์ œ์™€ ํ•จ๊ป˜ ์ฒ˜์Œ์— ์–ด๋”˜๊ฐ€์—์„œ ๊ฐ€๋ฅด์นฉ๋‹ˆ๋‹ค.
  • [] ํ…Œ์ŠคํŠธ
  • [] ๊ฐ€์ƒ ํ™˜๊ฒฝ
  • [] ์„ค์น˜
  • [ ] ์ฝ”๋ฉ˜ํŠธ
    ์ œ๊ฐ€ ํ•  ์ˆ˜์žˆ๋Š” ๋ชจ๋“  ๋ฐฉ๋ฒ•์œผ๋กœ์ด ํ”„๋กœ์ ํŠธ์— ๋„์›€์„ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ด์™€ ๊ฐ™์€ ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๊ฝค ์˜ค๋žซ๋™์•ˆ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

@cldershem ์ •๋ง ๋งŽ์€ ํ›Œ๋ฅญํ•œ ์ œ์•ˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๊ฒฝํ—˜์„ ๋ฐ”ํƒ•์œผ๋กœ ํ•  ์ˆ˜์žˆ๋Š” ์ตœ์„ ์˜ ๊ธฐ์—ฌ๋Š” ์ˆ˜์—… / ๋„์ „์„ ์ง์ ‘ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ๊ธ€์„ ์“ฐ๊ณ  ์‹ถ์€์ง€ ์•Œ๋ ค์ฃผ์„ธ์š” ๐Ÿ˜„

๋ฟก๋ฟก

์–ด๋–ป๊ฒŒ ๊ธฐ์—ฌ๋ฅผ ์‹œ์ž‘ํ•ด์•ผํ• ์ง€ 100 % ํ™•์‹คํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ํ™•์‹คํžˆํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

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

์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์„ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@ Ethan-Arrowood๊ฐ€ Github ๋Œ“๊ธ€์„ ํ†ตํ•ด ์ œ์ถœํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๊นŒ?

@ t3h2mas ๋„ค, ์ œ๊ฐ€ ์ตœ๊ณ ์˜ ๋ ˆ์Šจ / ์ฑŒ๋ฆฐ์ง€์—์„œ ๋งํ–ˆ๋“ฏ์ด์ด ์Šค๋ ˆ๋“œ์—์„œ ๋ฐ”๋กœ ์ฝ”๋ฉ˜ํŠธ๋กœ ์ œ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜„

@cldershem ๋„์›€์ด ๋  ์ˆ˜์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ์‹ค์ œ๋กœ ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜์žˆ๋Š” ๋ธŒ๋ผ์šฐ์ € ๋‚ด ์ฑŒ๋ฆฐ์ง€๋ฅผ ๋งŒ๋“œ๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ ์žˆ๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค (unittest ์‚ฌ์šฉ). ์šฐ๋ฆฌ๋Š” REPL.it์—์„œ codeMirror์—์„œ Skulpt๊นŒ์ง€ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ์˜ต์…˜์„ ํƒ์ƒ‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@cldershem ์•„๋งˆ "์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž"๋ฅผ ์จ์•ผํ•ฉ๋‹ˆ๋‹ค. 'n', 't'๋“ฑ๊ณผ ๊ฐ™์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ๊ทธ๋“ค์ด ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ๋‚˜๋Š” ๊ฐœ๋ณ„์ ์ธ ํ•œ ์ž… ํฌ๊ธฐ์˜ ์ˆ˜์—…์œผ๋กœ ์ผ์„ ๋‚˜๋ˆ„๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ๋ชจ๋“  ์ œ์•ˆ๊ณผ ๋ชจ๋“  ๋„์›€์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ฃผ๋ง ๋™์•ˆ ์ƒ˜ํ”Œ ๋ ˆ์Šจ / ๋„์ „ ์ž‘์—…์„ ๊ณ„ํš ์ค‘์ด๋ฉฐ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ผ์ข…์˜ ํ…œํ”Œ๋ฆฟ์ด ๋  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. Free Code Camp ์ฑŒ๋ฆฐ์ง€๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š” ๋ ˆ์Šจ / ์ฑŒ๋ฆฐ์ง€๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์ฝ”๋“œ๋ฅผ ๊ฒŒ์‹œํ•˜์‹ญ์‹œ์˜ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„๋ณด๊ณ  ์‹ถ๋‹ค.

ํŠธ์œ— ๋‹ด์•„ ๊ฐ€๊ธฐ
๋˜ํ•œ FCC-Python ๊ณผ์ •์˜ ๊ตํ›ˆ๊ณผ ๊ณผ์ œ ์ž‘์„ฑ์„ ๋•๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
์ด์ „ ๋Œ“๊ธ€์—์„œ Repl.it Classrooms๊ฐ€ ์ตœ์„ ์˜ ์„ ํƒ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์ง€๋งŒ ์—ฌ๊ธฐ์—์„œ ๋ ˆ์Šจ (์ œ๋ชฉ, ์„ค๋ช…, ํ…Œ์ŠคํŠธ ๋“ฑ) ์ž‘์—…์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋žซํผ / ํ”„๋ ˆ์ž„ ์›Œํฌ๊ฐ€ ์ •ํ•ด์ง€๋ฉด ์–ธ์ œ๋“ ์ง€ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์—์„œ ์ฐพ์„ ์ˆ˜์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ์ƒ˜ํ”Œ ์—ฐ์Šต ๋ฌธ์ œ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์„ ๋ณผ ์ˆ˜ ์žˆ์–ด์•ผํ•˜์ง€๋งŒ ๊ฐ€์ ธ ์˜ค๋ ค๋ฉด ๋กœ๊ทธ์ธํ•ด์•ผํ•˜๋ฉฐ ๋‚ด๋ถ€๋ฅผ ์‚ดํŽด๋ณด๊ณ  ์ˆ˜์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
์ž์œ ๋กญ๊ฒŒ ์˜๊ฒฌ์„ ๋งํ•˜๊ณ , ๋น„ํ‰ํ•˜๊ณ , ๊ฐ•์˜๋ฅผ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜๊ณ , ๋” ์ ์ ˆํ•œ ํ”Œ๋žซํผ / ํ”„๋ ˆ์ž„ ์›Œํฌ๊ฐ€ ๊ฒฐ์ •๋˜๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”.
๊ทธ ๋™์•ˆ ์ €๋Š” ์œ„์—์„œ ์„ค๋ช…ํ•œ ์ดˆ๊ธ‰ ์ˆ˜์—…์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜ํ•™๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ๋‹ค๋ฅธํ•ด์•ผ ํ•  ์ผ๋กœ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, ์ €๋Š” Repl.it์˜ ์ฐฝ๋ฆฝ์ž ๊ฒธ CEO์ž…๋‹ˆ๋‹ค. FCC๋Š” ์šฐ๋ฆฌ ๋งˆ์Œ์— ๊ฐ€๊น๊ณ  ์†Œ์ค‘ํ•˜๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ˆ˜์žˆ๋Š” ๋ชจ๋“  ์ผ์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด Repl.it ๊ฐ•์˜์‹ค์„ ์ฑ„ํƒํ•˜๋Š” ๋ฐ์žˆ์–ด ์ฃผ์š” ์žฅ์• ๋ฌผ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@amasad ์•ˆ๋…•ํ•˜์„ธ์š”! ๋‹น์‹ ์ด ์—ฌ๊ธฐ์—์žˆ์–ด์„œ ๊ธฐ๋ป์š” ๐Ÿ˜„
FCC Python ๊ณผ์ •์— Repl.it์„ ์ฑ„ํƒํ•˜๋Š” ๋ฐ ์ง๋ฉด ํ•œ ์ฃผ์š” ์žฅ์• ๋ฌผ์€ Repl.it Classroom unittest์™€ ์ธํ„ฐํŽ˜์ด์Šคํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๋…๋ฆฝ์  ์ธ ํŒŒ์ผ์„ ์‹คํ–‰ํ•  ์ˆ˜์žˆ๋Š” Repl.it Classroom ๊ตฌ์กฐ๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ฑŒ๋ฆฐ์ง€๋ฅผ ์™„๋ฃŒํ•˜๋ฉด (๋ชจ๋“  ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผ) ์•Œ ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก ์ด ๋™์ž‘์€ Repl.it์— ํฌํ•จ๋˜์–ด ์žˆ์ง€๋งŒ ํ˜„์žฌ FreeCodeCamp์˜ ๋Š๋‚Œ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์—…์„ ์™„๋ฃŒํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋‹ค์Œ ์ฑŒ๋ฆฐ์ง€๋กœ ์ด๋™ (๋˜๋Š” ๊ทธ๋ ‡๊ฒŒํ•˜๋„๋ก ํ”„๋กฌํ”„ํŠธ) ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ํ˜„์žฌ ์ฑŒ๋ฆฐ์ง€ (์ฆ‰, ๋ชจ๋“  unittest๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ํ†ต๊ณผ).

์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? FCC๋Š” JavaScript๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฏ€๋กœ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ์›น API ๋˜๋Š” npm ๋ชจ๋“ˆ์ด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋งŽ์€ ์‹œ์ฒญ์ž๊ฐ€ JavaScript ๋ฐฐ๊ฒฝ์—์„œ ์˜ฌ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด ์ฐจ์ด์ ์— ๋Œ€ํ•œ ์ž…๋ฌธ์„œ๊ฐ€ ์œ ์šฉ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด

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

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

print(dict["a"])

๋˜ ๋‹ค๋ฅธ ์˜ˆ๋Š” for ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์ „์ด๋‚˜ ๋ฐฐ์—ด์„ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ•ญ์ƒ ๋‚˜๋ฅผ ๊ดด๋กญํžŒ๋‹ค.

_Title_ Lambda ์†Œ๊ฐœ

_ ์„ค๋ช… / ์„ค๋ช… / ๊ฐ•์˜ _
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

"์ต๋ช… ํ•จ์ˆ˜ (ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด, ๋žŒ๋‹ค ์ถ”์ƒํ™”)๋Š” ์‹๋ณ„์ž์— ๋ฐ”์ธ๋”ฉ๋˜์ง€ ์•Š์€ ํ•จ์ˆ˜ ์ •์˜์ž…๋‹ˆ๋‹ค." [5] "Lambda๋Š” Lambda ๋ฏธ์ ๋ถ„์—์„œ ์œ ๋ž˜ํ–ˆ์Šต๋‹ˆ๋‹ค"[4]๋ผ๋Š” ๋‹จ์–ด. ํŒŒ์ด์ฌ์—์„œ ๋žŒ๋‹ค๋Š” ์ต๋ช… ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ธฐ์œ„ํ•œ ํ‚ค์›Œ๋“œ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ lambda ํ‚ค์›Œ๋“œ ๋Œ€์‹ ์˜ def ์ด๋Ÿฐ ํ‚ค์›Œ๋“œ, ๊ธฐ๋ณธ ๋žŒ๋‹ค ์™ธ๋ชจ : lambda x: x**2 ์ด์ด ๋ณ€์ˆ˜์— ํ• ๋‹น ๋ฐ ๊ธฐ๋Šฅ์ฒ˜๋Ÿผ ๋งŽ์ด ์žฌ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค :

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

_src 2_

๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋‹ค์Œ ์˜ˆ์ œ์— ๋”ฐ๋ผ ์ •์˜ ๋ฐ ์‚ฌ์šฉ์„ ๋ถ„ํ• ํ•˜๋Š” ๋Œ€์‹  ์ฝ”๋“œ๋ฅผ ์งง๊ณ  ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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_

์ด Tkinter GUI ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ํ•จ์ˆ˜๋Š” _command_ ์†์„ฑ์— ์ „๋‹ฌ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜๋Š” RAD ๋นŒ๋”๋กœ ์ƒ์„ฑ๋˜์—ˆ์œผ๋ฏ€๋กœ ์ˆซ์ž๋กœ ์ด๋ฆ„์ด ์ง€์ •๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ›Œ๋ฅญํ•˜๊ณ  ๊ธฐ๋Šฅ์ ์ด์ง€๋งŒ ์ฝ๊ธฐ ์‰ฝ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๊ณ  ๊ทธ๋ ‡๊ฒŒํ•˜๋ฉด ์ƒํ™ฉ์ด ๋” ๋ช…ํ™• ํ•ด์ง€์ง€ ๋งŒ ๋ฒ„ํŠผ์ด ๋งŽ์œผ๋ฉด ์˜ฌ๋ฐ”๋ฅธ ๋ช…๋ น์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด ๋ฒˆ๊ฑฐ๋กœ์šธ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’๋งŒ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ ๋” ๋‚˜์€ ์†”๋ฃจ์…˜์€ ๋‹ค์Œ์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ต๋ช…์œผ๋กœ ๋ฐ”๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

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_

์ด ์‚ฌ์šฉ์˜ ๋˜ ๋‹ค๋ฅธ ์ฃผ์š” ํŠน์ง•์€ ์ฝ”๋“œ๋ฅผ ๋” ์งง๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋” ํฐ ์†”๋ฃจ์…˜์˜ ์ผ๋ถ€๋กœ ๋„๊ตฌ๋ฅผ ์ฐพ์„ ๋•Œ ๋” ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

_ ์ฝ”๋“œ ํ”„๋กฌํ”„ํŠธ / ์ฑŒ๋ฆฐ์ง€ _
์œ„์—์„œ ์„ค๋ช…ํ•œ ์ฃผ์š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ๋žŒ๋‹ค ์‹์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ค‘์ธ ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ๋™์ผํ•œ ์œ„์น˜๋กœ ์ด๋™ํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋” ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋” ์งง๊ณ  ์ž์—ฐ์Šค๋Ÿฌ์šด ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

_ ์‚ฌ์ „ ์ •์˜ ๋œ ์ฝ”๋“œ _

# 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_

_ํ•ด๊ฒฐ์ฑ…_
print(sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x)))

@robbiemu ๋Œ€๋‹จํ•œ ์ผ! ๋‚ด ์œ ์ผํ•œ ์ œ์•ˆ์€ # only edit this line ์™€ ๊ฐ™์€ ์ธ์‡„ ์ค„ ์˜†์—์žˆ๋Š” ๋ฏธ๋ฆฌ ์ •์˜ ๋œ ์ฝ”๋“œ ์„น์…˜์— ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‚˜๋Š” ์ด๊ฒƒ์ด ํŒŒ์ด์ฌ 2 ์ฝ”๋“œ๋ผ๊ณ  ๋ฏฟ๊ณ  ์šฐ๋ฆฌ๋Š” ํŒŒ์ด์ฌ 3์„ ๊ฐ€๋ฅด ์น  ๊ฒƒ์ด๋ฏ€๋กœ ์œ ์ผํ•œ ๋ณ€ํ™”๋Š” ์ธ์‡„ ์ค„์— '()'๋ฅผ ๋ž˜ํ•‘ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋‹น์‹ ์˜ ๊ธฐ์—ฌ์— ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ด๋“ , ๊ณ ๋งˆ์›Œ. ๊ณ„์†ํ•ด์„œ ์ž‘์—…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ์ฑ…์ด ๋ณ€๊ฒฝ ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ•ฉ๋ฆฌ์ ์ธ ํ…Œ์ŠคํŠธ๋„ ์žˆ์Šต๋‹ˆ๋‹ค (์—ฌ๊ธฐ์—์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ •์  ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ). ์ด๋ฅผ์œ„ํ•œ ์ตœ์„ ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์˜ˆ์ œ ๊ฐ•์˜๋ฅผ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  @robbiemu . REPL.it์—์„œ ๊ณ„์† ์ž‘์—… ์ค‘์ด๋ฉฐ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜๋Š” ์ฆ‰์‹œ์ด ์Šค๋ ˆ๋“œ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ์ž˜ ํ–ˆ์–ด์š” ๐Ÿ˜„

์ด๊ฒƒ์€์ด ์Šค๋ ˆ๋“œ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ๋‚˜์—ด๋œ Beginner-Math ์„น์…˜์˜ ์ฝ”๋“œ ๊ณผ์ œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

_Title_-์ ˆ๋Œ€ ๊ฐ’

_ ์„ค๋ช… / ์„ค๋ช… / ๊ฐ•์˜ _-
์ ˆ๋Œ€ ๊ฐ’์€ ์ˆซ์ž๊ฐ€ 0์—์„œ ์–ผ๋งˆ๋‚˜ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
์ˆซ์ž๊ฐ€ ์Œ์ˆ˜์ด๋ฉด abs ()๋Š”์ด๋ฅผ ์–‘์ˆ˜๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
abs (x)์—์„œ x๋Š” ์ •์ˆ˜, ๋ถ€๋™ ์†Œ์ˆ˜์  ๋˜๋Š” ๋ณต์†Œ์ˆ˜ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
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

_ ์ฝ”๋“œ ํ”„๋กฌํ”„ํŠธ / ์ฑŒ๋ฆฐ์ง€ _-
๋ณ€์ˆ˜ absolute_value๋Š” -42์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
-42์˜ ์ ˆ๋Œ€ ๊ฐ’๊ณผ ๊ฐ™๋„๋ก absolute_value๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

_ ์‚ฌ์ „ ์ •์˜ ๋œ ์ฝ”๋“œ _-

absolute_value = -42

_ํ•ด๊ฒฐ์ฑ…_ --

absolute_value = abs(-42)

_ ํ…Œ์ŠคํŠธ _-

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

@bgroveben LGTM. ์ž˜ ํ–ˆ์–ด!

@ Ethan-Arrowood ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์œ„์— ๋‚˜์—ด๋œ ๋‹ค๋ฅธ ๊ธฐ๋ณธ / ์ˆ˜ํ•™ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ˆ˜์—…๋„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์›ํ•˜์‹œ๋ฉด์ด ์Šค๋ ˆ๋“œ์— ๊ฐ๊ฐ ๊ฒŒ์‹œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ˆ˜ํ•™ ๊ธฐ์ดˆ ์ˆ˜์—…์— round (), sum (), max () ๋ฐ min ()์„ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@bgroveben ์™„๋ฃŒ๋กœ ํ‘œ์‹œํ•˜๊ณ  ๋„ค ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ์˜๊ฒฌ์œผ๋กœ ๊ฐ ๋„์ „์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค. ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋“ฑ์„ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ๊ธฐ์—ฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

@ Ethan-Arrowood

@amasad ์•ˆ๋…•ํ•˜์„ธ์š”! ๋‹น์‹ ์ด ์—ฌ๊ธฐ์—์žˆ์–ด์„œ ๊ธฐ๋ป์š” ๐Ÿ˜„

์—ฌ๊ธฐ์žˆ์–ด์„œ ๊ธฐ๋ป์š” ๐Ÿ’ƒ

FCC Python ๊ณผ์ •์— Repl.it์„ ์ฑ„ํƒํ•˜๋Š” ๋ฐ ์ง๋ฉด ํ•œ ์ฃผ์š” ์žฅ์• ๋ฌผ์€ Repl.it Classroom unittest์™€ ์ธํ„ฐํŽ˜์ด์Šคํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๋…๋ฆฝ์  ์ธ ํŒŒ์ผ์„ ์‹คํ–‰ํ•  ์ˆ˜์žˆ๋Š” Repl.it Classroom ๊ตฌ์กฐ๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ฑŒ๋ฆฐ์ง€๋ฅผ ์™„๋ฃŒํ•˜๋ฉด (๋ชจ๋“  ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผ) ์•Œ ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก ์ด ๋™์ž‘์€ Repl.it์— ํฌํ•จ๋˜์–ด ์žˆ์ง€๋งŒ ํ˜„์žฌ FreeCodeCamp์˜ ๋Š๋‚Œ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์—…์„ ์™„๋ฃŒํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋‹ค์Œ ์ฑŒ๋ฆฐ์ง€๋กœ ์ด๋™ (๋˜๋Š” ๊ทธ๋ ‡๊ฒŒํ•˜๋„๋ก ํ”„๋กฌํ”„ํŠธ) ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ํ˜„์žฌ ์ฑŒ๋ฆฐ์ง€ (์ฆ‰, ๋ชจ๋“  unittest๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ํ†ต๊ณผ).

์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? FCC๋Š” JavaScript๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฏ€๋กœ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ์›น API ๋˜๋Š” npm ๋ชจ๋“ˆ์ด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ์šฐ๋ฆฌ๊ฐ€ ๊ตฌ์›Œ๋‚ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ต์‚ฌ ์ธก์— "์ž๋™ ์ง„ํ–‰"๋“ฑ์˜ ์„ค์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค. (์šฐ๋ฆฌ๋Š” ์›น ํ›„ํฌ ๋“ฑ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์— ๋ฐ˜๋Œ€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ณต์žก์„ฑ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด) ์ž‘๋™ํ• ๊นŒ์š”?

@amasad ๋Š” "์ž๋™ ์ง„ํ–‰"๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ Repl.it ๊ฐ•์˜์‹ค์—์„œ FreeCodeCamp๋ฅผ ํ™•์‹คํžˆ ์—๋ฎฌ๋ ˆ์ด์…˜ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ FCC์˜ ๋Š๋‚Œ์— ๋งค์šฐ ์ค‘์š”ํ•œ FCC ๋์—์„œ ์‚ฌ์šฉ์ž ์ง„ํ–‰ ์ƒํ™ฉ์„ ์ถ”์  ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

'๊ต์‹ค'์˜ ๋ฐ์ดํ„ฐ๋ฅผ GET / POST ํ•  ์ˆ˜์žˆ๋Š” ๊ธฐ๋Šฅ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ์ด๋ ‡๊ฒŒํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋˜๋Š” ๋” ๋‚˜์€ ๋ฐฉ๋ฒ• :

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

์ด์ œ์ด ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ๋ชจ๋‘ ์šฐ๋ฆฌ ์ชฝ์—์„œ ์‹คํ–‰๋˜์ง€๋งŒ REPL ํด๋ž˜์Šค ๋ฃธ์€ iframe์„ ํ†ตํ•ด ์ž„๋ฒ ๋“œ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ณ„ ์‚ฌ์šฉ์ž ์ง„ํ–‰ ์ƒํ™ฉ์„ ์ ์ ˆํ•˜๊ฒŒ ์ถ”์ ํ•˜๋ ค๋ฉด REPL ์ธก์˜ ๊ฐ„๋‹จํ•œ ์ด๋ฒคํŠธ ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ํด๋ž˜์Šค ๋ฃธ์€ iframe์„ ํ†ตํ•ด ์ž„๋ฒ ๋“œ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜์—…์„ ์™„๋ฃŒํ•˜๋ฉด REPL ํด๋ž˜์Šค ๋ฃธ์ด ๋ช‡ ์ค„์˜ JavaScript (์„ ์ƒ๋‹˜ ํฌํ„ธ์„ ํ†ตํ•ด ์ •์˜ ํ•  ์ˆ˜ ์žˆ์Œ)๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๊ต์‹ค์—์„œ FCC์™€ ํ†ต์‹ ํ•ฉ๋‹ˆ๊นŒ?

์šฐ๋ฆฌ๋Š” ํŒŒ์ด์ฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ์–ธ์–ด์—๋„ REPL ๊ต์‹ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. FCC Python ์ปค๋ฆฌํ˜๋Ÿผ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋˜๊ณ  ๋‚˜๋ฉด Java ๋˜๋Š” C ++ (๋˜๋Š” ๋ฌธ์ž ๊ทธ๋Œ€๋กœ REPL์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๋ชจ๋“  ์–ธ์–ด)์™€ ๊ฐ™์€ ์–ธ์–ด๋ฅผ ๊ตฌํ˜„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•œ

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„, ์˜๊ฒฌ๊ณผ ์ œ์•ˆ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

@amasad ์—ฌ๊ธฐ์—์„œ ๊ท€ํ•˜์˜ ์ƒ๊ฐ๊ณผ ์•„์ด๋””์–ด๋ฅผ ๊ณต์œ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. REPL.it์ด ํ”Œ๋žซํผ ๋‚ด์—์„œ ํ†ตํ•ฉํ•˜๊ณ  ์‹ถ์€ ๊ฐ•์˜์‹ค ์ œํ’ˆ์— ๋Œ€ํ•ด ์ž‘์—…ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

์šฐ์„ ,์ด ์ปค๋ฆฌํ˜๋Ÿผ ์Šค๋ ˆ๋“œ ๋Œ€์‹  ๋ณ„๋„์˜ ํ† ๋ก ์—์„œ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์—ฌ ํ†ตํ•ฉ ์ž์ฒด์™€ ๋” ๊ด€๋ จ์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@ Ethan-Arrowood ์ด๋‹ˆ์…”ํ‹ฐ๋ธŒ์— ๋Œ€ํ•œ ๋ฉ‹์ง„ ์ž‘์—…. ๋‹น์‹ ์˜ ๋…ธ๋ ฅ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

@amasad @QuincyLarson ๊ณต์‹์ ์œผ๋กœ REPL ๊ฐ•์˜์‹ค ํ† ๋ก ์„์ด ์ด์Šˆ ์Šค๋ ˆ๋“œ๋กœ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค ( @raisedadead ๊ถŒ์žฅ ์‚ฌํ•ญ์— ๋”ฐ๋ผ). https://github.com/freeCodeCamp/freeCodeCamp/issues/14736

cldershem ์˜ ๋Œ“๊ธ€์— ๋Œ€ํ•œ collections -

ํ‘œ์ œ

๋ช…๋ช… ๋œ ํŠœํ”Œ

์„ค๋ช… / ์„ค๋ช… / ๊ฐ•์˜

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/

ํŠœํ”Œ์€ ์ˆ˜ํ•™์—์„œ ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ์œ ํ•œ ํ•œ ์ˆœ์„œ์˜ ์š”์†Œ ๋ชฉ๋ก์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค. [1] ํŒŒ์ด์ฌ์—์„œ๋Š” ํ‚ค๊ฐ€ ๋ฏธ๋ฆฌ ์ •์˜๋˜์–ด์žˆ๋Š” ์‚ฌ์ „๊ณผ ๊ธฐ๋Šฅ์ ์œผ๋กœ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. Namedtuples๋Š” ์–ด๋–ค ์šฉ๋„๋กœ๋“  ๋น ๋ฅธ ์†์„ฑ ํŠธ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์•ฑ์ด ์–‘๋ง์„ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๊ณ  ๋ชจ๋“  ์–‘๋ง์— ํฌ๊ธฐ์™€ ๊ฐ€๊ฒฉ์ด์žˆ๋Š” ๊ฒฝ์šฐ ๋‘ ๊ฐœ์˜ ํ•„๋“œ๊ฐ€์žˆ๋Š” ํŠœํ”Œ์ด ์œ ์šฉํ•˜๋ฉฐ ์‚ฌ์ „ {size: _size_, price: _price_} ์™€ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. . ์ด๋Ÿฌํ•œ ํ•„๋“œ๊ฐ€์žˆ๋Š” ํŠœํ”Œ์„ ์–ป์œผ๋ ค๋ฉด ํ•„๋“œ๋ฅผ collections.namedtuple ํŒฉํ† ๋ฆฌ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. [2]
collections.namedtuple(Socks, ['size', 'price'])
ํŽธ์˜์ƒ, ํŠนํžˆ ์ผ๋ฐ˜ ํ…์ŠคํŠธ ์†Œ์Šค์˜ ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌ ํ•  ๋•Œ ํ•„๋“œ ์ด๋ฆ„์€ ๋ฐฐ์—ด์ด๊ฑฐ๋‚˜ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ ๋œ ๊ฐ’ ๋ฐ / ๋˜๋Š” ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ ๋œ ๊ฐ’์ด์žˆ๋Š” ๋‹จ์ผ ๋ฌธ์ž์—ด ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. [3]
EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')
๋ฐ‘์ค„๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ด๋ฆ„์„ ์ œ์™ธํ•˜๊ณ  ๋ชจ๋“  ์œ ํšจํ•œ Python ์‹๋ณ„์ž๋ฅผ _fieldname_์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ํšจํ•œ ์‹๋ณ„์ž๋Š” ๋ฌธ์ž, ์ˆซ์ž ๋ฐ ๋ฐ‘์ค„๋กœ ๊ตฌ์„ฑ๋˜์ง€๋งŒ ์ˆซ์ž ๋˜๋Š” ๋ฐ‘์ค„๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š์œผ๋ฉฐ class, for, return, global, pass ๋˜๋Š” raise์™€ ๊ฐ™์€ ํ‚ค์›Œ๋“œ๊ฐ€ ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. [3]
์ƒ์„ฑ๋˜๋ฉด ์‚ฌ์ „๊ณผ ์œ ์‚ฌํ•œ ํ•ญ๋ชฉ์œผ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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]

์ฝ”๋“œ ํ”„๋กฌํ”„ํŠธ / ์ฑŒ๋ฆฐ์ง€

namedtuples์˜ ์ข‹์€ ์‚ฌ์šฉ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ CSV ๋‚ด๋ณด๋‚ด๊ธฐ์™€ ๊ฐ™์ด ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์„ ์šฉ์ดํ•˜๊ฒŒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ์—์„œ ํŠœํ”Œ์„ ์‚ฌ์šฉํ•˜์—ฌ์ด CSV ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

๋ฏธ๋ฆฌ ์ •์˜ ๋œ ์ฝ”๋“œ

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!

_์—์„œ ํŒŒ์ƒ ๋จ _ [4]

_note_ : ์œ„๋Š” ์‹ค์ œ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ with ... readCSV ์ค„์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
readCSV = csv.reader(['Alan,42,Manager,Sales, N1', 'Beth,38,Regional Director,Operations,CO','Robin,23,Associate,Sales,C2']

ํ•ด๊ฒฐ์ฑ…

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!

๊ฐ•์˜ 2 :

ํ‘œ์ œ

namedtuples._make

์„ค๋ช… / ์„ค๋ช… / ๊ฐ•์˜

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

__make_๋ผ๋Š” NamedTuples ๋ฉ”์„œ๋“œ๋Š” ๋ฐ˜๋ณต์ž ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์„ ์šฉ์ดํ•˜๊ฒŒํ•˜๋ฏ€๋กœ ์ด์ „ ๋‹จ์›์˜ ๋ฌธ์ œ๋ฅผ ๋”์šฑ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

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

์ฝ”๋“œ ํ”„๋กฌํ”„ํŠธ / ์ฑŒ๋ฆฐ์ง€

์ด์ „ ๊ฐ•์˜๋ฅผ ๋‹ค์‹œ ๊ฒ€ํ† ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฑฐ์˜ ๋‹ค ์™”์ง€๋งŒ ์ž‘์—…์ด ๋๋‚˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํŽธ์˜๋ฅผ ์œ„ํ•ด ์ผ๋ถ€ ๊ธฐ๋ก์€ ๊ธฐ๋ก์„ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ์œ„์น˜์— ์ธ์‡„๋ฉ๋‹ˆ๋‹ค. EmployeeRecord๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ์˜ ๋‹ค๋ฅธ ๊ณณ์—์„œ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

        employee = EmployeeRecord(*row)

        processEmployee(employee)

๋ฏธ๋ฆฌ ์ •์˜ ๋œ ์ฝ”๋“œ

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)

ํ•ด๊ฒฐ์ฑ…

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)

๋‹ค์Œ์„ ์„ค๋ช…ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๊ตํ›ˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  • n = NamedTuple(**Dictionary)
  • ._fields ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์ฒด ์–‘์‹ ๋งŒ๋“ค๊ธฐ : TwoD = namedtuple('TwoD', 'x y') => ThreeD = namedtuple('ThreeD', TWo._fields + ('z',))
  • ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•œ ๋ฒ”์œ„ : ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ (์˜ˆ : csv), ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠธ๋žœ์žญ์…˜, ๋„คํŠธ์›Œํฌ ํŠธ๋žœ์žญ์…˜, POJO ์ด‰์ง„ (๋˜๋Š” POPO๊ฐ€ Python์—์„œ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? lol)

๋‚˜๋จธ์ง€ ์ดˆ๊ธ‰ ์ˆ˜ํ•™ ๊ณผ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

__Title : __ Python ์ถ”๊ฐ€

__ ์„ค๋ช… / ์„ค๋ช… / ๊ฐ•์˜ : __

Python์—์„œ ์ •์ˆ˜ (int)๋Š” ์„ธ ๊ฐ€์ง€ ๊ณ ์œ  ํ•œ ์ˆซ์ž ์œ ํ˜• ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.
์ด ์—ฐ์Šต์—์„œ๋Š” ๋”ํ•˜๊ธฐ (+) ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๊ฐœ์˜ ์ •์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

>>> 2 + 2
4

__ ์ฝ”๋“œ ํ”„๋กฌํ”„ํŠธ / ์ฑŒ๋ฆฐ์ง€ : __

ํ•ฉ๊ณ„๊ฐ€ 20์ด๋˜๋„๋ก 0์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

__ ์‚ฌ์ „ ์ •์˜ ๋œ ์ฝ”๋“œ : __

total = 10 + 0

__ํ•ด๊ฒฐ์ฑ…:__

total = 10 + 10

__ ํ…Œ์ŠคํŠธ : __

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

__ํ‘œ์ œ:__
divmod () ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชซ๊ณผ ๋‚˜๋จธ์ง€๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

__ ์„ค๋ช… / ์„ค๋ช… / ๊ฐ•์˜ : __

Divmod๋Š” ๋‘ ๊ฐœ์˜ (๋ณต์†Œ์ˆ˜๊ฐ€ ์•„๋‹Œ) ์ˆซ์ž๋ฅผ ์ธ์ˆ˜๋กœ ์ทจํ•˜๊ณ  ์ •์ˆ˜ ๋‚˜๋ˆ„๊ธฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ชซ๊ณผ ๋‚˜๋จธ์ง€๋กœ ๊ตฌ์„ฑ๋œ ์ˆซ์ž ์Œ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
์ •์ˆ˜์˜ ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๋Š” (a // b, a % b)์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

__ ์ฝ”๋“œ ํ”„๋กฌํ”„ํŠธ / ์ฑŒ๋ฆฐ์ง€ : __

์ด ์—ฐ์Šต์—์„œ๋Š” ๋ณ€์ˆ˜ a์™€ b๊ฐ€ ์ •์˜๋ฉ๋‹ˆ๋‹ค.
๋ณ€์ˆ˜ a ๋ฐ b์— ๋Œ€ํ•ด divmod ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” result๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค (์ˆœ์„œ๋Œ€๋กœ).

__ ์‚ฌ์ „ ์ •์˜ ๋œ ์ฝ”๋“œ : __

a = 11
b = 3

__ํ•ด๊ฒฐ์ฑ…:__

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

__ ํ…Œ์ŠคํŠธ : __

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

__Title : __ Python ์ง€์ˆ˜

__ ์„ค๋ช… / ์„ค๋ช… / ๊ฐ•์˜ : __

ํŒŒ์ด์ฌ์€ ์ด์ค‘ ๋ณ„ํ‘œ (**) ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
๋ณ„ํ‘œ ์•ž์˜ ์ˆซ์ž๋Š” ๋ฐ‘์ด๊ณ  ๋’ค์˜ ์ˆซ์ž๋Š” ์ง€์ˆ˜์ž…๋‹ˆ๋‹ค.
ํŒŒ์ด์ฌ์€ ๋˜ํ•œ ๋‚ด์žฅ ํ•จ์ˆ˜ pow (x, y)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๊ฒŒํ•˜์—ฌ x์— y์˜ ๊ฑฐ๋“ญ ์ œ๊ณฑ์„์ค๋‹ˆ๋‹ค.

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

__ ์ฝ”๋“œ ํ”„๋กฌํ”„ํŠธ / ์ฑŒ๋ฆฐ์ง€ : __

์ฝ˜์†”์—๋Š” ๋‘ ๊ฐœ์˜ ๋ณ€์ˆ˜ a์™€ b๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
์ด ๋‹จ์›์— ์„ค๋ช… ๋œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ a์™€ b์˜ ๊ฑฐ๋“ญ ์ œ๊ณฑ๊ณผ ๊ฐ™์€ power๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

__ ์‚ฌ์ „ ์ •์˜ ๋œ ์ฝ”๋“œ : __

a = 3
b = 4

__ํ•ด๊ฒฐ์ฑ…:__

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

__ ํ…Œ์ŠคํŠธ : __

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

__Title : __ Python Float Division

__ ์„ค๋ช… / ์„ค๋ช… / ๊ฐ•์˜ : __

Python 3์€ ์ •์ˆ˜ (๋ฐ”๋‹ฅ) ๋‚˜๋ˆ—์…ˆ๊ณผ ๋ถ€๋™ (์ฐธ) ๋‚˜๋ˆ—์…ˆ์„ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.
ํŒŒ์ด์ฌ์€ float ๋‚˜๋ˆ„๊ธฐ์— ๋‹จ์ผ ์Šฌ๋ž˜์‹œ (/) ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
float ๋‚˜๋ˆ„๊ธฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ชซ (๊ฒฐ๊ณผ)์ด 1 ๋˜๋Š” 2์™€ ๊ฐ™์€ ์ •์ˆ˜์ธ ๊ฒฝ์šฐ์—๋„ ์ •์ˆ˜ ๋Œ€์‹  ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

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

__ ์ฝ”๋“œ ํ”„๋กฌํ”„ํŠธ / ์ฑŒ๋ฆฐ์ง€ : __

๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ quotient๋ผ๋Š” ๋ณ€์ˆ˜์˜ ๊ฐ’์€ 1.0์ด๋ฉ๋‹ˆ๋‹ค.
๋ชซ์˜ ๊ฐ’์ด 2.5๊ฐ€๋˜๋„๋ก ๋‘ ๋ฒˆ์งธ ์ˆซ์ž (๋ถ„๋ชจ)๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

__ ์‚ฌ์ „ ์ •์˜ ๋œ ์ฝ”๋“œ : __

quotient = 5 / 5

__ํ•ด๊ฒฐ์ฑ…:__

quotient = 5 / 2

__ ํ…Œ์ŠคํŠธ : __

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

__Title : __ Python ์ •์ˆ˜ ๋‚˜๋ˆ„๊ธฐ

__ ์„ค๋ช… / ์„ค๋ช… / ๊ฐ•์˜ : __

Python 3์€ ์ •์ˆ˜ (๋ฐ”๋‹ฅ) ๋‚˜๋ˆ—์…ˆ๊ณผ ๋ถ€๋™ (์ฐธ) ๋‚˜๋ˆ—์…ˆ์„ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.
ํŒŒ์ด์ฌ์€ ์ •์ˆ˜ ๋‚˜๋ˆ„๊ธฐ์— ์ด์ค‘ ์Šฌ๋ž˜์‹œ (//) ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์ •์ˆ˜ ๋‚˜๋ˆ—์…ˆ์„ ์‚ฌ์šฉํ•  ๋•Œ Python์€ ๋ชซ์„ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •์ˆ˜๋กœ ๋‚ด๋ฆผํ•ฉ๋‹ˆ๋‹ค.

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

__ ์ฝ”๋“œ ํ”„๋กฌํ”„ํŠธ / ์ฑŒ๋ฆฐ์ง€ : __

๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ quotient๋ผ๋Š” ๋ณ€์ˆ˜์˜ ๊ฐ’์€ 1์ด๋ฉ๋‹ˆ๋‹ค.
๋ชซ์˜ ๊ฐ’์ด 2๊ฐ€๋˜๋„๋ก ๋‘ ๋ฒˆ์งธ ์ˆซ์ž (๋ถ„๋ชจ)๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

__ ์‚ฌ์ „ ์ •์˜ ๋œ ์ฝ”๋“œ : __

quotient = 5 // 5

__ํ•ด๊ฒฐ์ฑ…:__

quotient = 5 // 2

__ ํ…Œ์ŠคํŠธ : __

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

__Title : __ Python ์ตœ๋Œ€ ๊ฐ’

__ ์„ค๋ช… / ์„ค๋ช… / ๊ฐ•์˜ : __

max () ํ•จ์ˆ˜๋Š” ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ํ•ญ๋ชฉ (๋ชฉ๋ก ๋˜๋Š” ๋ฌธ์ž์—ด ๋“ฑ)์—์„œ ๊ฐ€์žฅ ํฐ ํ•ญ๋ชฉ ๋˜๋Š” ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ธ์ˆ˜ ์ค‘ ๊ฐ€์žฅ ํฐ ํ•ญ๋ชฉ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
iterable์„ ์ธ์ˆ˜๋กœ ์ œ๊ณตํ•˜๋Š” ๋™์•ˆ iterable์˜ ๋ชจ๋“  ์š”์†Œ๊ฐ€ ๋™์ผํ•œ ์œ ํ˜•์ธ์ง€ ํ™•์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
iterable์ด ๋น„์–ด ์žˆ๊ณ  ๊ธฐ๋ณธ๊ฐ’์ด ์ œ๊ณต๋˜์ง€ ์•Š์œผ๋ฉด ValueError๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

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

__ ์ฝ”๋“œ ํ”„๋กฌํ”„ํŠธ / ์ฑŒ๋ฆฐ์ง€ : __

์‹œ์ž‘ ์ฝ”๋“œ์—๋Š” ์ด๋ฆ„์ด ์ง€์ •๋œ ์ˆซ์ž ๋ชฉ๋ก์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฐ€์žฅ ๋†’์€ ๋ณ€์ˆ˜๋Š” ์ˆซ์ž๋กœ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.
๊ฐ€์žฅ ๋†’์€ ๊ฐ’์„ ์ˆซ์ž์—์„œ ๊ฐ€์žฅ ํฐ ์ˆซ์ž์™€ ๋™์ผํ•˜๊ฒŒ ๋งŒ๋“œ์‹ญ์‹œ์˜ค.

__ ์‚ฌ์ „ ์ •์˜ ๋œ ์ฝ”๋“œ : __

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

__ํ•ด๊ฒฐ์ฑ…:__

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

__ ํ…Œ์ŠคํŠธ : __

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

__Title : __ Python ์ตœ์†Œ๊ฐ’

__ ์„ค๋ช… / ์„ค๋ช… / ๊ฐ•์˜ : __

min () ํ•จ์ˆ˜๋Š” ์ดํ„ฐ ๋Ÿฌ๋ธ”์—์„œ ๊ฐ€์žฅ ์ž‘์€ ํ•ญ๋ชฉ (์˜ˆ : ๋ชฉ๋ก ๋˜๋Š” ๋ฌธ์ž์—ด) ๋˜๋Š” ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ธ์ˆ˜ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ํ•ญ๋ชฉ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
iterable์„ ์ธ์ˆ˜๋กœ ์ œ๊ณตํ•˜๋Š” ๋™์•ˆ iterable์˜ ๋ชจ๋“  ์š”์†Œ๊ฐ€ ๋™์ผํ•œ ์œ ํ˜•์ธ์ง€ ํ™•์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
iterable์ด ๋น„์–ด ์žˆ๊ณ  ๊ธฐ๋ณธ๊ฐ’์ด ์ œ๊ณต๋˜์ง€ ์•Š์œผ๋ฉด ValueError๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

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

__ ์ฝ”๋“œ ํ”„๋กฌํ”„ํŠธ / ์ฑŒ๋ฆฐ์ง€ : __

์‹œ์ž‘ ์ฝ”๋“œ์—๋Š” ๋ฌธ์ž๋ผ๋Š” ์ด๋ฆ„์˜ ๋ฌธ์ž ๋ชฉ๋ก์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ตœ์ € ๋ณ€์ˆ˜๋Š” ๋ฌธ์ž๋กœ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.
๊ฐ€์žฅ ๋‚ฎ์€ ๊ฐ’์„ ๋ฌธ์ž์˜ '๊ฐ€์žฅ ์ž‘์€'(์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๋กœ ์ฒซ ๋ฒˆ์งธ) ๋ฌธ์ž์™€ ๋™์ผํ•˜๊ฒŒ ๋งŒ๋“œ์‹ญ์‹œ์˜ค.

__ ์‚ฌ์ „ ์ •์˜ ๋œ ์ฝ”๋“œ : __

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

__ํ•ด๊ฒฐ์ฑ…:__

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

__ ํ…Œ์ŠคํŠธ : __

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

__Title : __ ํŒŒ์ด์ฌ ๊ณฑ์…ˆ

__ ์„ค๋ช… / ์„ค๋ช… / ๊ฐ•์˜ : __

ํŒŒ์ด์ฌ์€ ๊ณฑ์…ˆ์— ๋ณ„ํ‘œ (*) ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

>>> 3 * 3
9

__ ์ฝ”๋“œ ํ”„๋กฌํ”„ํŠธ / ์ฑŒ๋ฆฐ์ง€ : __

์ œํ’ˆ์ด 80์ด๋˜๋„๋ก 0์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

__ ์‚ฌ์ „ ์ •์˜ ๋œ ์ฝ”๋“œ : __

product = 8 * 0

__ํ•ด๊ฒฐ์ฑ…:__

product = 8 * 10

__ ํ…Œ์ŠคํŠธ : __

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

__Title : __ Python ๋‚˜๋จธ์ง€

__ ์„ค๋ช… / ์„ค๋ช… / ๊ฐ•์˜ : __

% (๋ชจ๋“ˆ๋กœ) ์—ฐ์‚ฐ์ž๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋ฅผ ๋‘ ๋ฒˆ์งธ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค.
๋ชจ๋“ˆ๋กœ ์—ฐ์‚ฐ์ž๋Š” ํ•ญ์ƒ ๋‘ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž์™€ ๊ฐ™์€ ๋ถ€ํ˜ธ (๋˜๋Š” 0)๋ฅผ ๊ฐ€์ง„ ๊ฒฐ๊ณผ๋ฅผ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค.

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

์ˆซ์ž๊ฐ€ ํ™€์ˆ˜์ธ์ง€ ์ง์ˆ˜์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ ํ•ด๋‹น ์ˆซ์ž๋ฅผ 2๋กœ ๋‚˜๋ˆŒ ๋•Œ ๋‚˜๋จธ์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
ํ™€์ˆ˜์˜ ๊ฒฝ์šฐ ๋‚˜๋จธ์ง€๋Š” 1์ž…๋‹ˆ๋‹ค.
์ง์ˆ˜์˜ ๊ฒฝ์šฐ ๋‚˜๋จธ์ง€๋Š” 0์ž…๋‹ˆ๋‹ค.

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

__ ์ฝ”๋“œ ํ”„๋กฌํ”„ํŠธ / ์ฑŒ๋ฆฐ์ง€ : __

๋‚˜๋จธ์ง€ ๋ณ€์ˆ˜๋ฅผ ๋ชจ๋“ˆ๋กœ (%) ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 11์„ 3์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€์™€ ๋™์ผํ•˜๊ฒŒ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

__ ์‚ฌ์ „ ์ •์˜ ๋œ ์ฝ”๋“œ : __

remainder = "Solution goes here"

__ํ•ด๊ฒฐ์ฑ…:__

remainder = 11 % 3

__ ํ…Œ์ŠคํŠธ : __

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

__Title : __ Python ๋ฐ˜์˜ฌ๋ฆผ

__ ์„ค๋ช… / ์„ค๋ช… / ๊ฐ•์˜ : __

round (number, n-digits) ํ•จ์ˆ˜๋Š” ์†Œ์ˆ˜์  ๋’ค์˜ n ์ž๋ฆฌ ์ •๋ฐ€๋„๋กœ ๋ฐ˜์˜ฌ๋ฆผ ๋œ ์ฃผ์–ด์ง„ ์ˆซ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
n-digits๊ฐ€ ์ƒ๋žต๋˜๊ฑฐ๋‚˜ None์ด๋ฉด ์ž…๋ ฅ์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
๋ฐ˜ํ™˜ ๊ฐ’์€ ํ•˜๋‚˜์˜ ์ธ์ˆ˜๋กœ ํ˜ธ์ถœํ•˜๋ฉด ์ •์ˆ˜์ด๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ฃผ์–ด์ง„ ์ˆซ์ž์™€ ๋™์ผํ•œ ์œ ํ˜•์ž…๋‹ˆ๋‹ค.

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

__ ์ฝ”๋“œ ํ”„๋กฌํ”„ํŠธ / ์ฑŒ๋ฆฐ์ง€ : __

long_pi ๋ณ€์ˆ˜์— ์†Œ์ˆ˜์  ์ดํ•˜ ์ž๋ฆฟ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์Šต๋‹ˆ๋‹ค.
๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” shorter_pi๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
round () ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์ˆ˜์  ๋’ค์˜ ์ฒ˜์Œ 2 ์ž๋ฆฌ ๋งŒ ํ‘œ์‹œํ•˜๊ณ  ํ•ด๋‹น ๊ฐ’์„ shorter_pi์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

__ ์‚ฌ์ „ ์ •์˜ ๋œ ์ฝ”๋“œ : __

longer_pi = 3.14159265358979323846

__ํ•ด๊ฒฐ์ฑ…:__

longer_pi = 3.14159265358979323846
shorter_pi = round(longer_pi, 2)

__ ํ…Œ์ŠคํŠธ : __

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

__Title : __ ํŒŒ์ด์ฌ ์ œ๊ณฑ๊ทผ

__ ์„ค๋ช… / ์„ค๋ช… / ๊ฐ•์˜ : __

math.sqrt () ํ•จ์ˆ˜๋Š” ํ•ญ์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐ€์ ธ์™€์•ผํ•˜๋Š” Python ์ˆ˜ํ•™ ๋ชจ๋“ˆ์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.
Math.sqrt (x)๋Š” x์˜ ์ œ๊ณฑ๊ทผ์„ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

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

__ ์ฝ”๋“œ ํ”„๋กฌํ”„ํŠธ / ์ฑŒ๋ฆฐ์ง€ : __

square_root ๋ณ€์ˆ˜๋Š” ์ˆซ์ž 81๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค.
81์˜ ์ œ๊ณฑ๊ทผ๊ณผ ๊ฐ™๋„๋ก square_root๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
์ˆ˜ํ•™ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ ์™”์Šต๋‹ˆ๋‹ค.

__ ์‚ฌ์ „ ์ •์˜ ๋œ ์ฝ”๋“œ : __

import math
square_root = 81

__ํ•ด๊ฒฐ์ฑ…:___

import math
square_root = math.sqrt(81)

__ ํ…Œ์ŠคํŠธ : __

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

__Title : __ ํŒŒ์ด์ฌ ๋นผ๊ธฐ

__ ์„ค๋ช… / ์„ค๋ช… / ๊ฐ•์˜ : __

Python์—์„œ ์ •์ˆ˜ (int)๋Š” ์„ธ ๊ฐ€์ง€ ๊ณ ์œ  ํ•œ ์ˆซ์ž ์œ ํ˜• ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.
์ด ์—ฐ์Šต์—์„œ๋Š” ๋นผ๊ธฐ (-) ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ์ •์ˆ˜๋ฅผ ๋บ๋‹ˆ๋‹ค.

>>> 2 - 1
1

__ ์ฝ”๋“œ ํ”„๋กฌํ”„ํŠธ / ์ฑŒ๋ฆฐ์ง€ : __

ํ•ฉ๊ณ„๊ฐ€ 10์ด๋˜๋„๋ก 0์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

__ ์‚ฌ์ „ ์ •์˜ ๋œ ์ฝ”๋“œ : __

total = 20 - 0

__ํ•ด๊ฒฐ์ฑ…:__

total = 20 - 10

__ ํ…Œ์ŠคํŠธ : __

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

__Title : __ Python ํ•ฉ๊ณ„

__ ์„ค๋ช… / ์„ค๋ช… / ๊ฐ•์˜ : __

sum (iterable) ํ•จ์ˆ˜๋Š” Python iterable (๋ชฉ๋ก, ํŠœํ”Œ ๋“ฑ)์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์„ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ถ”๊ฐ€ํ•˜๊ณ  ํ•ฉ๊ณ„๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
์„ ํƒ์ ์ธ ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜ ์ธ start๊ฐ€ ์žˆ์œผ๋ฉฐ ๊ธฐ๋ณธ๊ฐ’์€ 0์ด๊ณ  ํ•ฉ๊ณ„์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
์ดํ„ฐ ๋Ÿฌ๋ธ”์˜ ํ•ญ๋ชฉ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆซ์ž์ด๋ฉฐ ์‹œ์ž‘ ๊ฐ’์€ ๋ฌธ์ž์—ด์ด ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

__ ์ฝ”๋“œ ํ”„๋กฌํ”„ํŠธ / ์ฑŒ๋ฆฐ์ง€ : __

๋‘ ๊ฐœ์˜ ์ˆซ์ž ๋ชฉ๋ก์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋‘ ๋ชฉ๋ก์—์„œ ๋ชจ๋“  ํ•ญ๋ชฉ์˜ ํ•ฉ๊ณ„๋ฅผ ์ฐพ์•„ ๊ทธ ๊ฐ’์„ total์ด๋ผ๋Š” ๋ณ€์ˆ˜์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

__ ์‚ฌ์ „ ์ •์˜ ๋œ ์ฝ”๋“œ : __

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

__ํ•ด๊ฒฐ์ฑ…:__

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

__ ํ…Œ์ŠคํŠธ : __

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

๊ธฐ๋ณธ / ์ˆ˜ํ•™ ์„น์…˜์— ๋‚˜์—ด๋œ ๋ชจ๋“  ๋ ˆ์Šจ์„ ๋‹ค๋ฃฌ๋‹ค ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๋” ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”.
๋˜ํ•œ ํŽธ์ง‘, ๋ณ€๊ฒฝ, ์ œ์•ˆ ๋“ฑ์„ ์ž์œ ๋กญ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฐฉ๊ธˆ .py ๋ฐ .md ํŒŒ์ผ์— ๊ฒŒ์‹œ ํ•œ ๋ชจ๋“  ์ˆ˜์—…์ด ์žˆ์Šต๋‹ˆ๋‹ค.
https://github.com/bgroveben/FCC_Python.
๋˜ํ•œ ๋‹ค์Œ ์œ„์น˜์— REPL ํด๋ž˜์Šค ๋ฃธ์„ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
https://repl.it/community/classrooms/18388.

์ฐธ๊ณ -Python ์ฝ”๋”ฉ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ† ๋ก ์„์ด ์ƒˆ๋กœ์šด ์ €์žฅ์†Œ ( https://github.com/freeCodeCamp/python-coding-challenges/issues)๋กœ ์ด๋™ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ์กฐ๋ฅผ ์œ„ํ•ด ์—ฌ๊ธฐ์— ๊ฒŒ์‹œ :
Max์™€ Min์ด ๋‘˜ ๋‹ค ์›ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

  1. ๋ช…ํ™•์„ฑ์„ ์œ„ํ•ด ์ˆซ์ž ์‚ฌ์šฉ-์‚ฌ์šฉ์ž๋Š” ๋ฌธ์ž๊ฐ€ ์ •์ˆ˜์ธ์ง€ ๋ชจ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ํ•œ ์ˆซ์ž์˜ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ๋กœ ํ–‰๋™์„ ์œ ๋„ํ•˜์‹ญ์‹œ์˜ค.
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰