๐Ÿฅ Python 01: ์กฐ๊ฑด๋ฌธ, ํ•จ์ˆ˜

yeeun leeยท2020๋…„ 3์›” 24์ผ
0

Python Basic

๋ชฉ๋ก ๋ณด๊ธฐ
2/6

python์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ถ€๋ถ„์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ์•„๋ž˜ ๋ณธ๋ฌธ์€ data type๋ถ€ํ„ฐ ๋ณ€์ˆ˜์™€ ์—ฐ์‚ฐ, if์™€ ํ•จ์ˆ˜ ๊ด€๋ จ ๋‚ด์šฉ์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.

1. to start

ํŒŒ์ด์ฌ์˜ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ๋ณ€์ˆ˜ ํ• ๋‹น ๋ฐฉ๋ฒ•, ๊ทธ๋ฆฌ๊ณ  ์ฝ”๋“œ ๋‚ด ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์กฐ๊ธˆ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž.

1.1 data type

  • Integer: ์ •์ˆ˜
  • Float: ์†Œ์ˆ˜์  ์ˆซ์ž
  • Complex Numbers: ๋ณต์†Œ์ˆ˜(์‹ค์ˆ˜, ํ—ˆ์ˆ˜) i ๋Œ€์‹  j๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • String: ๋ฌธ์ž์—ด
  • Boolean: True or False. ์กฐ๊ฑด๋ฌธ์— ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
  • None: null value ๋˜๋Š” no value๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ์“ฐ์ธ๋‹ค.

1.2 variable

๋ณ€์ˆ˜ ๊ฐ’์„ ์ง€์ •ํ•  ๋•Œ๋Š” assignment ๋ถ€ํ˜ธ (=)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์กฐ๊ฑด๋ฌธ์„ ์“ธ ๋•Œ ๋‹จ์ˆœํžˆ ์˜๋ฏธ๋งŒ ์ƒ๊ฐํ•ด์„œ ์Šต๊ด€์ ์œผ๋กœ =๋ฅผ ์“ฐ๊ฒŒ ๋˜๋Š”๋ฐ, comparision operator(==)์™€ ํ—ท๊ฐˆ๋ฆฌ์ง€ ๋ง ๊ฒƒ!

๐ŸŒˆ๋ณ€์ˆ˜ ์ด๋ฆ„์˜ ๋ฒ•์น™

  • ์˜์–ด ์•ŒํŒŒ๋ฒณ๊ณผ ์ˆซ์ž ๊ทธ๋ฆฌ๊ณ  underscore (_) ๋กœ๋งŒ ๊ตฌ์„ฑ
  • ์ฒซ๊ธ€์ž๋Š” ์•ŒํŒŒ๋ฒณ์ด๋‚˜ underscore๋กœ๋งŒ ์‹œ์ž‘. ์ˆซ์ž๋กœ๋Š” ์‹œ์ž‘๋  ์ˆ˜ ์—†๋‹ค.
  • ์˜์–ด ์•ŒํŒŒ๋ฒณ์€ ๋Œ€๋ฌธ์ž์™€ ์†Œ๋ฌธ์ž๊ฐ€ ๊ตฌ๋ถ„ (case sensitive).

1.3 Literal String Interpolation

Real python ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด ๋ฌธ์žฅ์— value๋ฅผ ๋ณด๊ฐ„(์•Œ๋ ค์ง„ ๊ฐ’ ์‚ฌ์ด์— ์œ„์น˜ํ•œ ๊ฐ’์„ ์ถ”์ •)ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž.

- % formatting

๋ฌธ์ž์—ด ์•ˆ์— %s(string)์„ ๋„ฃ๊ณ , ๋ฌธ์ž์—ด ๋ฐ–์— ํ•ด๋‹น ์˜์—ญ์— ๋“ค์–ด์˜ฌ ๊ฐ’์„ ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•ด์ค€๋‹ค. ๋งŒ์•ฝ ์—ฌ๋Ÿฌ ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์–ด์•ผํ•  ๊ฒฝ์šฐ, ๋‘ ๋ฒˆ์งธ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ๋ณ€์ˆ˜๋Š” ํŠœ๋ธ”๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

name = "Eric"
Hello, %s." % name
'Hello, Eric.'
name = "Eric"
age = 74
"Hello, %s. You are %s." % (name, age)
'Hello Eric. You are 74.'

๐ŸŒˆ๋ฌธ์ž์—ด formatter์˜ ์ข…๋ฅ˜

formatter๊ธฐ๋Šฅ
%d, %x, %o์‹ญ์ง„์ˆ˜(decimal), 16์ง„์ˆ˜, 8์ง„์ˆ˜
%f์‹ค์ˆ˜๋ฅผ ์ถœ๋ ฅ
%.์ˆซ์žfํ‘œ์‹œํ•  ์†Œ์ˆ˜์  ์•„๋ž˜ ์ž๋ฆฌ์ˆ˜๋ฅผ ๋ช…์‹œํ•œ๋‹ค.
%s๋ฌธ์ž์—ด ์ถœ๋ ฅ
%%โ€˜%โ€™ ๋ฌธ์ž ์ž์ฒด๋ฅผ ์ถœ๋ ฅ

โœ…๋ณต์†Œ์ˆ˜๋Š” ์ถœ๋ ฅ์ด ๋˜์ง€ ์•Š๋Š” ์  ์ฐธ๊ณ !

์ˆซ์ž ์ ์šฉ ์˜ˆ์‹œ

num1 = int(input())
num2 = int(input())

print('๋”ํ•˜๊ธฐ: %d' %(num1+num2)) #10์ง„์ˆ˜ ์ถœ๋ ฅ
print('๋นผ๊ธฐ: %d' %(num1-num2)) 
print('๋‚˜๋ˆ„๊ธฐ: %0.2f' %(num1/num2)) #์†Œ์ˆ˜ ๋‘๋ฒˆ์งธ์ž๋ฆฌ๊นŒ์ง€ ์‹ค์ˆ˜ ์ถœ๋ ฅ
print('๊ณฑํ•˜๊ธฐ: %d' %(num1*num2))

- str.format()

Python 2.6์—์„œ ๋„์ž…๋œ ๋ฐฉ์‹์œผ๋กœ, __format__() method๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ์ฒด๊ฐ€ ๋ฌธ์ž์—ด๋กœ ์ „ํ™˜๋˜๊ฒŒ๋” ํ•œ๋‹ค. ๋ณ€์ˆ˜๋กœ ๋ณ€ํ™˜๋˜๋Š” ๋ถ€๋ถ„์„ {}๋กœ ํ‘œ์‹œํ•œ๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„์ฒ˜๋Ÿผ {} ์•ˆ์— tuple์˜ index๋ฅผ ๋„ฃ์–ด ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

"Hello, {}. You are {}.".format(name, age)

# ์ˆœ์„œ์— ๊ด€๊ณ„ ์—†์ด ํŠœํ”Œ์„ ์ž…๋ ฅํ•˜๊ณ , ํŠœํ”Œ ๋‚ด์˜ ์ธ๋ฑ์Šค๋ฅผ {}์— ๋„ฃ์–ด๋ณด์ž
"Hello, {1}. You are {0}.".format(age, name) 

์œ„ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” {} ์•ˆ์— ๋ณ€์ˆ˜ ์ž์ฒด๋ฅผ ๋„ฃ์ง€๋Š” ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ณ€์ˆ˜๋ฅผ ๋„ฃ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ๋งŒ๋“  ํ›„ **variable_name์œผ๋กœ key์— ๋Œ€ํ•œ value๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

person = {'name': 'Eric', 'age': 74}
"Hello, {name}. You are {age}.".format(**person)

- fStrings

Python 3.6๋ถ€ํ„ฐ ๋„์ž…๋˜์—ˆ์œผ๋ฉฐ ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๋ฌธ์ž์—ด ์•ž์— f๋ฅผ ๋ถ™์ด๊ณ (format์˜ ์•ž ๊ธ€์ž๋ฅผ ๋”ฐ์˜จ ๊ฒƒ์œผ๋กœ ๋Œ€๋ฌธ์ž๋กœ ํ‘œํ˜„ํ•ด๋„ ์ƒ๊ด€ ์—†๋‹ค.), ๋ฌธ์žฅ ์•ˆ์— {๋ณ€์ˆ˜}๋ฅผ ๋„ฃ์–ด ์ž‘์„ฑํ•œ๋‹ค.

name = "Eric"
age = 74
f"Hello, {name}. You are {age}."

์ˆซ์ž ์ ์šฉ ์˜ˆ์‹œ

num1 = int(input())
num2 = int(input())

print(f'๋”ํ•˜๊ธฐ: {num1+num2}')
print(f'๋นผ๊ธฐ: {num1-num2}')
print(f'๋‚˜๋ˆ„๊ธฐ:{num1/num2}')
print(f'๊ณฑํ•˜๊ธฐ: {num1*num2}')

1.4 Whitespace

javascript๋‚˜ java๋Š” ์ค‘๊ด„ํ˜ธ{} ์‚ฌ์šฉ์„ ํ†ตํ•ด ์ข…์†๋œ ์ฝ”๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‚ด๋Š” ๋ฐ˜๋ฉด, ํŒŒ์ด์ฌ์€ ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ํ†ตํ•ด ์ข…์†์„ฑ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋“ค์—ฌ์“ฐ๊ธฐ๊ฐ€ ๋‹จ๊ตฐ ๊ฐ€๋…์„ฑ์„ ์œ„ํ•œ ๊ฒƒ์ด ์•„๋‹Œ ์š”๊ตฌ์‚ฌํ•ญ์ธ ๊ฒƒ์ด๋‹ค.

๋“ค์—ฌ์“ฐ๊ธฐ๋Š” ํ•จ์ˆ˜ ๋ฟ ์•„๋‹ˆ๋ผ if๋ฌธ, for๋ฌธ, class ๋“ฑ ํŒŒ์ด์ฌ์˜ ๋ชจ๋“  ๊ฒƒ์— ์ ์šฉ๋˜๋ฏ€๋กœ ์‚ฌ์šฉ ์‹œ ๋ˆ„๋ฝ๋˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.


//javascript ์˜ˆ์‹œ
function func() { // curly bracket ์œผ๋กœ ๊ตฌ๋ถ„
	code block
}
# python ์˜ˆ์‹œ
def func(): # colon & indent๋กœ ๊ตฌ๋ถ„
	code block

2. Math expression

ํŒŒ์ด์ฌ์€ ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๋™์ผํ•˜๊ฒŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋”ํ•˜๊ธฐ(+), ๋นผ๊ธฐ(-), ๋‚˜๋ˆ„๊ธฐ(/), ๊ณฑํ•˜๊ธฐ(*) ๋“ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ธฐ๋ณธ์ ์ธ ๋ถ€๋ถ„์„ ์ œ์™ธํ•˜๊ณ  ๋น„๊ต์  ๋‚ฏ์„  ๊ฐœ๋…์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

2.1 ์ •์ˆ˜ ๋‚˜๋ˆ„๊ธฐ

๋‚˜๋ˆ„๊ธฐ ๊ฐ’์ด ์ •์ˆ˜๋กœ ๋–จ์–ด์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ๋ฐ˜ ๋‚ด๋ฆผ์œผ๋กœ ์ •์ˆ˜ ๊ฐ’๋งŒ ๋ฆฌํ„ดํ•œ๋‹ค. slicing ์‹œ ์ธ๋ฑ์Šค๋Š” ์ •์ˆ˜๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ ์œ ์šฉํ•˜๋‹ค.

num1 = 7 
num2 = 2
num3 = num1 // num2 

๐Ÿšจ๋‚˜๋ˆ„๊ธฐ ์ฃผ์˜ํ•  ์ ๐Ÿšจ
์ •์ˆ˜๋ฅผ ํ™•์ธํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ, type(b/a) == <class 'int'> ๋กœ ๊ณ„์† ์ ์šฉํ–ˆ๋Š”๋ฐ ์‹คํŒจํ–ˆ๋‹ค. ์ด์œ ๋Š” ๋ฒ„์ „ 2์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ int๊ฐ’์ด ๋‚˜์˜ค์ง€๋งŒ, ๋ฒ„์ „ 3๋ถ€ํ„ฐ๋Š” ๋‚˜๋ˆˆ ๊ฐ’์˜ type์ด float์œผ๋กœ ํ‘œ์‹œ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.... ๐Ÿ˜ 

๋งŒ์•ฝ ์ •์ˆ˜์ธ์ง€ ํ™•์ธํ•˜๋ ค๋ฉด b%a == 0 ์œผ๋กœ ํ™•์ธํ•˜์ž. type์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฑธ๋กœ...

2.2 Advanced math expression

modulo %

modulo operator, ๋‚˜๋ˆ„๊ธฐ์˜ ๋‚˜๋จธ์ง€ ๊ฐ’์„ ๊ณ„์‚ฐํ•  ๋•Œ ์“ฐ์ธ๋‹ค. ๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•  ๋•Œ, ์ •์ˆ˜์ธ์ง€ ํ™•์ธํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

+= -= /= *=

๊ฐ™์€ ๋ณ€์ˆ˜์— ๊ฐ’์„ ๋”ํ•  ๋•Œ, ๋ณ€์ˆ˜๋ฅผ ๋‘ ๋ฒˆ ์“ฐ๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

num1 = 10
num1 += 1

print(num1) # result: 11 

์—ฐ์‚ฐ ์ˆœ์„œ

๊ด„ํ˜ธ ์•ˆ์˜ ์—ฐ์‚ฐ์ด ๊ฐ€์žฅ ๋จผ์ € ์‹คํ–‰๋œ๋‹ค. ๋งŒ์ผ ์‹คํ–‰๋˜๋Š” ์ˆœ์„œ๊ฐ€ ๋™์ผํ•œ ์—ฐ์‚ฐ๋“ค์ด ์žˆ์„ ๊ฒฝ์šฐ (์˜ˆ๋ฅผ ๋“ค์–ด ๊ณฑํ•˜๊ธฐ ์™€ ๋‚˜๋ˆ„๊ธฐ), ๋จผ์ € ๋‚˜์˜ค๋Š” ์—ฐ์‚ฐ์ด ๋จผ์ € ์‹คํ–‰!

  1. ( )
  2. **
  3. *, / , ๊ทธ๋ฆฌ๊ณ  %
  4. ๋”ํ•˜๊ธฐ, ๋นผ๊ธฐ

Concatenating Text Strings

์ˆซ์ž๋ฟ ์•„๋‹ˆ๋ผ ๋ฌธ์ž๋„ ๋”ํ•˜๊ธฐ ์—ฐ์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค. Concatenate๋Š” ์—ฐ์‡„๋ผ๋Š” ๋œป์œผ๋กœ, ํ…์ŠคํŠธ๋ฅผ ์—ฐ๊ฒฐ(์ž‡๋Š” ๊ฒƒ)์„ ์˜๋ฏธํ•œ๋‹ค. ๋”ํ•˜๊ธฐ ๋ถ€ํ˜ธ๋ฟ ์•„๋‹ˆ๋ผ ์œ„์—์„œ ์ •๋ฆฌํ•œ literal string interpolation๋กœ ์ด์„ ์ˆ˜ ์žˆ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์ด ํ•จ์ˆ˜ ์•ˆ์— ๋“ค์–ด์žˆ๋Š” string, ๋ณ€์ˆ˜ ์•ˆ์˜ string ๋„ ํ•ฉ์น  ์ˆ˜ ์žˆ๋‹ค.

def my_func():
	return 'hi, '

name = 'yeni'

result = my_func() + hi 
print(result) # output: 'hi, yeni'

3. ์กฐ๊ฑด๋ฌธ

3.1 if

if ๋‹ค์Œ์— ์˜ค๋Š” ๊ตฌ๋ฌธexpression์ด True์ผ ๊ฒฝ์šฐ, code block์ด ์‹คํ–‰๋œ๋‹ค. ์‹คํ–‰ํ•  ์ฝ”๋“œ๋ธ”๋Ÿญ์ด ๋ฐ˜๋“œ์‹œ ๋“ค์—ฌ์“ฐ๊ธฐ ๋˜์–ด์žˆ์–ด์•ผ ํ•˜๋Š” ์ ์„ ์žŠ์ง€ ๋ง์ž.

if expression: # ์ฝœ๋ก ์ด ์žˆ์–ด์š”
    code block	# ๋“ค์—ฌ์“ฐ๊ธฐ ํ•ด์•ผ๋ผ์š”

elif

if ๊ตฌ๋ฌธ์„ ๋ณด์กฐํ•˜๋Š” ์—ญํ• ๋กœ, else if์˜ ์ค„์ž„๋ง์ด๋‹ค. if ๊ตฌ๋ฌธ์ด false์ผ ๋•Œ ์‹คํ–‰๋œ๋‹ค. elif๊ฐ€ false๋ฉด else๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

and, or

์—ฌ๋Ÿฌ ์กฐ๊ฑด์„ testingํ•  ๋•Œ ๊ต์ง‘ํ•ฉ ํ˜น์€ ํ•ฉ์ง‘ํ•ฉ์œผ๋กœ ์กฐ๊ฑด์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์กฐ๊ฑด์ด ์—ฌ๋Ÿฌ๊ฐœ๋ฉด ()๊ด„ํ˜ธ ์•ˆ์— ๋„ฃ๋„๋ก ํ•˜์ž.

3.2 nested if statement

๋ฐ˜๋ณต๋˜๋Š” ์ปจ๋””์…˜์ด ์žˆ์„ ๋•Œ, ์ค‘์ฒฉ๋˜๋Š” if๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€๋…์„ฑ์ด ๋†’์•„์ง€๊ณ  ์ฝ”๋“œ๋„ ๊ฐ„๊ฒฐํ•ด์ง„๋‹ค.

  • nest level๋„ indent๋กœ ๊ฐ„๊ฒฉ ์กฐ์ •์„ ๊ผญ ํ•ด์•ผ ํ•œ๋‹ค.
  • 2๋‹จ๊ณ„ ์ด์ƒ์œผ๋กœ ํ•˜๋ฉด ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ๋ณดํ†ต์€ 1๋‹จ๊ณ„์— ๊ทธ์นœ๋‹ค.

๋ฌธ์ œ) ax=b ๋ฐฉ์ •์‹์˜ x ๊ฐ’์„ ๊ตฌํ•ด๋ผ. x๊ฐ€ ์ •์ˆ˜๊ฐ’์ด ์•„๋‹ˆ๋ฉด ๊ฐ’์ด ์—†๋‹ค๋กœ, ๊ฐ’์ด ๋งŽ์œผ๋ฉด ๋งŽ๋‹ค๋กœ, ํ•˜๋‚˜๋ฉด ๊ทธ ๊ฐ’์„ ํ‘œ์‹œํ•ด๋ผ.

if a==0:
  if b==0:
    print("Many Solutions")
  else:
    print("No Solution")
else:
  if b==0:
    print(0)
  elif b%a == 0:
    print(b//a) #์ •์ˆ˜๋กœ ๋‹ต์„ ๋‚ด๋ ค๋ฉด b/a๋Š” ์“ฐ๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค
  else:
    print("No Solution")
    

์กฐ๊ฑด๋ฌธ์„ ๋งŒ๋“ค ๋•Œ

์ฒ˜์Œ์— case๊ฐ€ ๋ช‡ ๊ฐ€์ง€ ๊ฐˆ๋ž˜๋กœ ๋‚˜๋‰˜๋Š”์ง€ ์‚ดํŽด๋ณด๊ณ , ์˜ˆ์™ธ์ ์ธ ์ƒํ™ฉ์„ ๋จผ์ € ์ ๋Š” ๊ฒƒ์ด ๋…ผ๋ฆฌ๋ฅผ ํ’€ ๋•Œ ์ข‹์€ ๊ฒƒ ๊ฐ™๋‹ค. ๋‹ต์ด ๋‚˜์˜ค์ง€ ์•Š๋Š” ์‚ฌ๋ก€๋“ค์„ ๋ชจ๋‘ ์ƒ๊ฐํ•œ ๋’ค์— ๋งˆ์ง€๋ง‰์— ๋‹ต์„ ๋‚ด๋ณด๋‚ด๋Š” ๊ฒƒ์ด ํ๋ฆ„ ์ƒ ์ž˜๋ชป๋œ ๋ถ€๋ถ„์„ ์ฐพ๊ธฐ ๋” ์‰ฝ๊ณ  ๋‹จ๊ณ„๋ณ„๋กœ ์ƒ๊ฐํ•˜๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

4. ํ•จ์ˆ˜

ํ•จ์ˆ˜๋Š” ์‰ฝ๊ฒŒ ๋งํ•ด input์„ ๋ฐ›์•„ ๊ณ„์‚ฐ ๋˜๋Š” ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•˜๊ณ , ๊ฒฐ๊ณผ ๊ฐ’์ธ output์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

4.1 ์„ ์–ธ

ํ•จ์ˆ˜ ์„ ์–ธ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ์•„๋ž˜ ๋ฐฉ์‹์œผ๋กœ ์ •์˜ํ•˜๊ณ , ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๊ทธ ์ฃผ์ฒด์— ๋Œ€ํ•ด ๊ฒฐ๊ณผ๊ฐ’(output)์„ ๋ณด๋‚ด์ฃผ๊ฒŒ ๋œ๋‹ค. ํ•จ์ˆ˜์—์„œ input ์€ parameter, output์€ return ๊ฐ’์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

def def_name(parameter): #parameter๋Š” ์˜ต์…˜
    ๋ฌธ์žฅ1
    ๋ฌธ์žฅ2
    ...
    ๋ฌธ์žฅN
    return value #return์€ ์˜ต์…˜

4.2 parameter

parameter์— argument๋ฅผ ๋„ฃ๋Š” ๋ฐฉ์‹๋„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ์•„๋ž˜ ์šฐ๋ฆฌ์ง‘ ๊ณ ์–‘์ด ์บกํ‹ด, ๋งˆ๋ธ”์„ ๊ท€์—ฌ์›Œํ•˜๋Š” ํ•จ์ˆ˜์ธ my_cat()์„ ์˜ˆ๋กœ ๋“ค์–ด ์„ค๋ช…ํ•ด๋ณด์ž.

positional argument

def my_cat(cat1, cat2):
	print(f'์ฒซ์งธ๊ณ ์–‘์ด {cat1} ๋‘˜์งธ๊ณ ์–‘์ด {cat2} ๋„ˆ๋ฌด ๊ท€์—ฌ์›Œ!')

my_cat('์บกํ‹ด', '๋งˆ๋ธ”') #ํ•จ์ˆ˜ ํ˜ธ์ถœ
# reulst: ์ฒซ์งธ๊ณ ์–‘์ด ์บกํ‹ด ๋‘˜์งธ๊ณ ์–‘์ด ๋งˆ๋ธ” ๋„ˆ๋ฌด ๊ท€์—ฌ์›Œ!

์ผ๋ฐ˜์ ์ธ ํ˜•์‹์˜ ์ธ์ž์ด๋‹ค. ํ•จ์ˆ˜๋Š” cat1, cat2์˜ input parameter๋ฅผ ๋ฐ›์•„, argument๋ฅผ ํ•จ์ˆ˜์— ๊ฑด๋„ค์ฃผ์–ด์„œ(pass) output์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ print ํ•œ๋‹ค. ํ•จ์ˆ˜์—์„œ ์ •์˜ํ•œ ์œ„์น˜๋Œ€๋กœ ๋Œ€์ž…ํ•˜๋Š” ๊ฒƒ์ด๊ธด ํ•˜๋‚˜, ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ธ์ž ์ˆœ์„œ๋ฅผ ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

keyword argument

์ˆœ์„œ์— ๋งž์ถœ ํ•„์š” ์—†์ด parameter ์ด๋ฆ„์— ๋งž์ถฐ ๊ฐ’์„ ์ „๋‹ฌํ•œ๋‹ค. ๊ฐ€๋…์„ฑ์ด ๋†’์•„์ง€๊ณ  ์ฝ๋Š” ์‚ฌ๋žŒ๋„ ์–ด๋–ค ๊ฐ’์„ ๋„˜๊ธฐ๋Š”์ง€ ์ •ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ๋ณธ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐฉ์‹๊ณผ ํ˜ผ์šฉ๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ๋ฉด ์•ˆ ๋œ๋‹ค.

#๋˜๋Š” ์˜ˆ
my_cat(cat2='๋งˆ๋ธ”', cat1='์บกํ‹ด') 
my_cat('์บกํ‹ด', cat2='๋งˆ๋ธ”') # positional๊ณผ key๋ฅผ ์„ž์–ด ์“ฐ๊ธฐ

# ์•ˆ ๋˜๋Š” ์˜ˆ
my_cat(cat2='๋งˆ๋ธ”', '์บกํ‹ด' ) 
#result: SyntaxError: positional argument follows keyword argument

default parameter

ํ•จ์ˆ˜์˜ parameter์— ๋””ํดํŠธ ๊ฐ’์„ ์ •์˜ํ•ด์ฃผ๋Š” ๊ฒƒ. ํ•จ์ˆ˜ ์„ ์–ธ ์‹œ parameter์— value๋ฅผ ํ• ๋‹นํ•œ๋‹ค. ๋งŒ์ผ default value parameter๋ฅผ non-default value parameter ์•ž์— ์„ ์–ธํ•˜๋ฉด syntax error๊ฐ€ ๋‚œ๋‹ค. ์œ„์˜ positional argument์™€ keyword argument์˜ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๋ฉด ์•ˆ ๋˜๋Š” ์ด์œ ์™€ ๋™์ผํ•œ ์›์ธ์ด๋‹ค.

#๋˜๋Š” ์˜ˆ
def my_cat(cat1, cat2="๋งˆ๋ธ”"):
	print(f'์ฒซ์งธ๊ณ ์–‘์ด {cat1} ๋‘˜์งธ๊ณ ์–‘์ด {cat2} ๋„ˆ๋ฌด ๊ท€์—ฌ์›Œ!)

print('์บกํ‹ด') // reulst: ์ฒซ์งธ๊ณ ์–‘์ด ์บกํ‹ด ๋‘˜์งธ๊ณ ์–‘์ด ๋งˆ๋ธ” ๋„ˆ๋ฌด ๊ท€์—ฌ์›Œ

#์•ˆ ๋˜๋Š” ์˜ˆ
def my_cat(cat1="์บกํ‹ด", cat2):
	print(f'์ฒซ์งธ๊ณ ์–‘์ด {cat1} ๋‘˜์งธ๊ณ ์–‘์ด {cat2} ๋„ˆ๋ฌด ๊ท€์—ฌ์›Œ!)
#result: SyntaxError: non-default argument follows default argument

4.3 more complex parameter

ํ•จ์ˆ˜์— ๋„ฃ์„ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ’์ด ๋„ˆ๋ฌด ๋งŽ๊ณ , ๊ทธ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’๋งˆ์ € ์œ ๋™์ ์ด๋ผ๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ?

์ž๋™์ฐจ ์˜ต์…˜ ์‚ฌํ•ญ์ด 40๊ฐœ ์ •๋„ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž. ์ž๋™์ฐจ์— ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด, ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ 40๊ฐœ ๊ฐ€๋Ÿ‰ ์ถ”๊ฐ€ํ•ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค. ๋˜ ์ž๋™์ฐจ๊ฐ€ ์—…๊ทธ๋ ˆ์ด๋“œ ๋˜์–ด ์˜ต์…˜์ด ์‚ฌ๋ผ์ง€๊ฑฐ๋‚˜ ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ๊ณ , ์ด ๊ฒฝ์šฐ ์ •์˜๋œ ํ•จ์ˆ˜๋ฅผ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด ์žฌ๋ฐฐํฌ๋ฅผ ํ•˜๋Š” ๋“ฑ ์œ ๋™์„ฑ์ด ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค.

- dictionary ์‚ฌ์šฉ

๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ๋ฐ›๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“  ๋‹ค์Œ, ํ•จ์ˆ˜ ๋ฐ–์—์„œ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ํ•จ์ˆ˜์˜ argument์— ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ๊ฐ„๋‹จํ•˜๋‹ค๋Š” ์žฅ์ ์€ ์žˆ์ง€๋งŒ, ์˜ต์…˜์„ dict๋กœ๋งŒ ๋ฐ›์•„์•ผ ํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๊ณ  ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๊ฐ’์„ ๋„˜๊ฒจ์ค„ ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

def buy_A_car(options):
    print(f"๋‹ค์Œ ์‚ฌ์–‘์˜ ์ž๋™์ฐจ๋ฅผ ๊ตฌ์ž…ํ•˜์‹ญ๋‹ˆ๋‹ค:")

    for option in options:
        print(f"{option} : {options[option]}")

options = {"seat" : "๊ฐ€์ฃฝ", "blackbox" : "์ตœ์‹ "}

buy_A_car(options)

#result:
#๋‹ค์Œ ์‚ฌ์–‘์˜ ์ž๋™์ฐจ๋ฅผ ๊ตฌ์ž…ํ•˜์‹ญ๋‹ˆ๋‹ค:
#seat : ๊ฐ€์ฃฝ
#blackbox : ์ตœ์‹ 

**kwargs

keyworded variable length of arguments. ์ˆ˜๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์ง€ ์•Š๊ณ  ์œ ๋™์ ์œผ๋กœ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” keyword arguments. ์š”๊ฒŒ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋“ค์–ด๊ฐ€๋ฉด ๋”•์…”๋„ˆ๋ฆฌ ํ˜•ํƒœ์˜ argument๋ฅผ ๋ฐ›๋Š”๋‹ค.

  • argument ์ˆ˜๋ฅผ 0๋ถ€ํ„ฐ N๊นŒ์ง€ ์œ ๋™์ ์œผ๋กœ ๋„˜๊ฒจ์ค„ ์ˆ˜ ์žˆ๋‹ค.
  • keyword๊ฐ€ ๋ฏธ๋ฆฌ ์ •ํ•ด์ ธ ์žˆ๊ธฐ ์•Š์•„ ์›ํ•˜๋Š” keyword๋ฅผ ์œ ๋™์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • keyworded variable length of arguments ๋Š” dict ํ˜•ํƒœ๋กœ ์ง€์ •๋œ๋‹ค.
def buy_A_car(**kwargs):
    print(f"๋‹ค์Œ ์‚ฌ์–‘์˜ ์ž๋™์ฐจ๋ฅผ ๊ตฌ์ž…ํ•˜์‹ญ๋‹ˆ๋‹ค:")

    for option in kwargs:
        print(f"{option} : {kwargs[option]}")
        
buy_A_car(seat="๊ฐ€์ฃฝ", blackbox="์ตœ์‹ ", tint="yes")
# result: {'seat': '๊ฐ€์ฃฝ', 'blackbox': '์ตœ์‹ ', 'tint': 'yes'}

*args

(Non-keyworded) variable (length of) arguments. keyword๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ˆœ์„œ๋Œ€๋กœ ๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹. ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ˆœ์„œ๋Œ€๋กœ argument๋ฅผ ๋ฐ›๋Š”๋‹ค. ๋ฐ›์€ ๊ฐ’์€ ํ•จ์ˆ˜์—์„œ tuple๋กœ pass๋œ๋‹ค.

def print_arguments(*args):
	print(f'arguments: {args}')

print_arguments(1,2,3) # result: arguments: (1,2,3) 1,2,3 ์ด ์ธ์ž๋กœ ๋“ค์–ด๊ฐ€ ํŠœํ”Œ๋กœ ๋‚˜์™”๋‹ค

5. ๊ณผ์ œ

5.1 ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๋ฉด ์•ˆ ๋˜๋Š” ์ด์œ 

non default argument๋Š” ์ธ์ž๋ฅผ ํ•„์ˆ˜์ ์œผ๋กœ ๋ฐ›์•„์•ผ ํ•˜๋Š” ๋ฐ˜๋ฉด, default argument๋Š” ์ƒ๋žต๋˜์–ด๋„ ๋””ํดํŠธ ๊ฐ’์ด ์žˆ์–ด ์ธ์ž๊ฐ€ ํ•„์ˆ˜์ ์ด์ง€๊ฐ€ ์•Š๋‹ค.

๋•Œ๋ฌธ์— ์ƒํ™ฉ์— ๋”ฐ๋ผ interpreter๊ฐ€ ์–ด๋–ค parameter์— ์–ด๋–ค argument์„ ๋งค์นญํ•ด์•ผ ํ•˜๋Š”์ง€ ํ˜ผ๋ž€์„ ๊ฒช๊ฒŒ ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜์™€ ๊ฐ™์€ ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

def my_func(a="hi", b="hello", c, d):
	print(a,b,c,d)

์œ„์™€ ๊ฐ™์ด ์•ฝ์†๋œ ๊ทœ์น™ ์—†์ด parameter๋ฅผ ์„ž๊ฒŒ ๋œ๋‹ค๋ฉด, ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ๋””ํดํŠธ ๊ฐ’์„ ๋„์ถœํ•˜๊ธฐ ์œ„ํ•ด argument๋ฅผ ์ƒ๋žตํ–ˆ์„ ๋•Œ ๊ฒฐ๊ณผ๊ฐ€ ๋ฏธ๊ถ์— ๋น ์ง€๊ฒŒ ๋œ๋‹ค.

my_func(1,2,3,4) # ๊ฐ’์ด ๋„ค๊ฐœ๋ผ ํ—ท๊ฐˆ๋ฆฌ์ง€ ์•Š๋„ค
my_func(1,2,3) # a์˜ ๋””ํดํŠธ ๊ฐ’์ด ์ƒ๋žต๋œ๊ฑฐ์•ผ b์˜ ๋””ํดํŠธ ๊ฐ’์ด ์ƒ๋žต๋œ๊ฑฐ์•ผ?
my_func('bonjour', 2, 3) 
#bonjour๋Š” a์— ๊ฐ’์„ ์ค€๊ฑฐ์•ผ ์— ๊ฐ’์„ ์ค€๊ฑฐ์•ผ, ๋งŒ์•ฝ a๋ผ๋ฉด 2๋Š” b์˜ ๊ฐ’์ธ๊ฑฐ์•ผ c์˜ ๊ฐ’์ธ๊ฑฐ์•ผ?

5.2 ํ•จ์ˆ˜์—์„œ parameter๋ฅผ ์ •์˜ํ•˜๋Š” ์ˆœ์„œ

์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด parameter๋ฅผ ์ •์˜ํ•˜๋Š” ์ˆœ์„œ๋ฅผ ์ง€์ผœ์„œ ๋‚˜์—ดํ•ด์•ผ ํ•œ๋‹ค. ์•„๋ž˜ ์ด๋ฏธ์ง€ ์ถœ์ฒ˜๋Š” getKT์˜ ๋ธ”๋กœ๊ทธ์ด๋‹ค.

  1. positional parameter or non-default parameter i.e (a,b,c)
  2. keyword parameter or default parameter i.e (a="b",r="j")
  3. keyword-only parameter i.e (*args)
  4. var-keyword parameter i.e (**kwargs)

args?

argument์˜ ์ค„์ž„๋ง. ๊ผญ ํ•ด๋‹น ๋‹จ์–ด๋ฅผ ์“ธ ํ•„์š”๋Š” ์—†๊ณ , *์ด ํ•œ๊ฐœ๋ผ๋Š” ๊ฒƒ์ด ํฌ์ธํŠธ๋‹ค. ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›๊ณ  ์‹ถ์„ ๋•Œ ํŒŒ๋ผ๋ฏธํ„ฐ์— ์“ด๋‹ค. ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ธ์ž๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋Š” ์ด๋ฅผ ํŠœํ”Œ๋กœ ์ธ์‹ํ•œ๋‹ค.

kwars?

keyword argument์˜ ์ค„์ž„๋ง. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ *์ด ๋‘๊ฐœ๋ผ๋Š” ๊ฒƒ์ด ํฌ์ธํŠธ. ํ•จ์ˆ˜์—์„œ ์ธ์ž๋ฅผ ๋”•์…”๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ ๋ฐ›๊ณ  ์‹ถ์„ ๋•Œ ํŒŒ๋ผ๋ฏธํ„ฐ์— ์“ด๋‹ค.

์˜ˆ์‹œ๋ฅผ ์ฐพ์•„๋ณด๋‹ค๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์“ฐ๋Š” print๋„ ์‚ฌ์‹ค keyword argument๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ํ•จ์ˆ˜๋ผ๋Š”๊ฑธ ์•Œ๊ฒŒ๋๋‹ค ๐Ÿ˜ฆ

์žฌ๋ฏธ์žˆ๋Š” ์˜ˆ์‹œ!

print ํ•จ์ˆ˜์˜ parameter end ์˜ ๋””ํดํŠธ ๊ฐ’์€ '\n'๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ print๋ฅผ ์ผ์„ ๋•Œ ์ž๋™์œผ๋กœ ์ค„๋ฐ”๊ฟˆ์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ ์•„๋ž˜์™€ ๊ฐ™์ด end๊ฐ’์„ ์ง€์ •ํ•˜๊ฒŒ ๋˜๋ฉด, ์ค„๋ฐ”๊ฟˆ์ด ์‚ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.

# ์ผ๋ฐ˜์ ์ธ print ํ•จ์ˆ˜
print('์บกํ‹ด๋งˆ๋ธ”')
print('๋„ˆ๋ฌด ๊ท€์—ฌ์›Œ')

'''result
์บกํ‹ด๋งˆ๋ธ”
๋„ˆ๋ฌด ๊ท€์—ฌ์›Œ'''

#keyword argument ์ž…๋ ฅ 
print('์บกํ‹ด๋งˆ๋ธ”', end='')
print('๋„ˆ๋ฌด ๊ท€์—ฌ์›Œ')

'''result
์บกํ‹ด๋งˆ๋ธ” ๋„ˆ๋ฌด ๊ท€์—ฌ์›Œ'''

print('์บกํ‹ด๋งˆ๋ธ”', end='์‚ฌ๋ž‘ํ•ด')
print('๋„ˆ๋ฌด ๊ท€์—ฌ์›Œ')

'''result
์บกํ‹ด๋งˆ๋ธ” ์‚ฌ๋ž‘ํ•ด ๋„ˆ๋ฌด ๊ท€์—ฌ์›Œ'''

5.3 parameter ์˜ˆ์‹œ

stack overflow์—์„œ keyword only argument๋ฅผ ์งˆ๋ฌธํ•œ ์‚ฌ๋žŒ์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด๋‹ˆ args, kwars๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐ›๋Š” ๊ฒƒ์ธ์ง€ ์กฐ๊ธˆ ๋” ์ดํ•ด๊ฐ€ ๋˜์–ด ๊ฐ€์ ธ์™€๋ณด์•˜๋‹ค.

def total(initial=5, *numbers, **keywords):
    count = initial
    for number in numbers:
        count += number
    for key in keywords:
        count += keywords[key]
    return count

print(total(10, 1, 2, 3, vegetables=50, fruits=100))
#result: 166

๋งจ ์•„๋žซ์ค„์—์„œ ํ˜ธ์ถœ๋œ total ํ•จ์ˆ˜์—์„œ numbers์˜ ์ธ์ž๋Š” (1,2,3)์˜ ์ˆซ์ž ํŠœํ”Œ, keywords ์˜ ์ธ์ž๋Š” key๊ฐ€ vegetables, fruits value๊ฐ€ 50, 100์ธ ๋”•์…”๋„ˆ๋ฆฌ๋‹ค.

์กฐ๊ธˆ ๋ถ€์‹คํ•œ ์˜ˆ์‹œ์ธ ์ด์œ 

initial=5๋กœ ๋””ํดํŠธ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์žˆ๊ธด ํ•˜์ง€๋งŒ, 10์ด initial ํŒŒ๋ผ๋ฏธํ„ฐ์—๊ฒŒ ์ค€ ๊ฒƒ์ธ์ง€, ์•„๋‹ˆ๋ฉด numbers์— ํฌํ•จ๋˜๋Š”์ง€๋Š” ํ•œ ๋ˆˆ์— ์•Œ ์ˆ˜ ์—†๋‹ค. ์œ„ ์˜ˆ์‹œ์—์„œ๋Š” initial์— 10์ด passํ•˜๊ธด ํ–ˆ์ง€๋งŒ, ๋งŒ์•ฝ numbers๊ฐ€ (10, 1, 2, 3)์ธ ํŠœํ”Œ์ด๊ณ  initial ๊ฐ’์„ ๋””ํดํŠธ๋กœ ์ฃผ๊ณ  ์‹ถ๋‹ค๋ฉด...?

์š” ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ๋Š” ์กฐ๊ธˆ ๋” ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ํ‘œํ˜„์‹์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ข‹์€ ์˜ˆ์‹œ๋Š” ์•„๋‹ˆ๋‹ค!

profile
์ด์‚ฌ๊ฐ„ ๋ธ”๋กœ๊ทธ: yenilee.github.io

0๊ฐœ์˜ ๋Œ“๊ธ€