본문 바로가기

개발 공부/Python

프로그래밍 시작하기 : 파이썬 입문 4.흐름 제어~5.파이썬 함수 및 입력

프로그래밍 시작하기 : 파이썬 입문(inflearn Original)

 

4. 흐름 제어

 

4-1. if 구문 : 조건문은 아주 짱 중요해요

 

# 제어문
print(type(False)) # 0, "", [], (), {} ...
print()

if True:
    print('Good')

if False:
    print('Bad')

print()

if False:
    print('Good!')
else:
    print('Bad')

print()

#관계연산자
# >, >=, <, <=, !=, ==
x = 15
y = 10
print(x==y)
print(x!=y)

city = ""
print()
if city:
    print("You are in ", city)
else:
    print("plz enter your city")


city2 = "seoul"
print()
if city2:
    print("You are in ", city2)
else:
    print("plz enter your city")

# 논리 연산자(중요)
# and, or, not
a = 75
b = 40
c = 10

print('and : ', a>b and b>c)
print('or : ', a>b or b>c)
print('not : ', not a > b)

# 산술 : +, -, *, / 등
print('e1 : ', 3+12 > 7+3)
# 순서는 산술 > 관계 > 논리이다.
print('e3 : ', 5 + 10 > 3 and 7 + 3== 10)

print()
score1 = 90
score2 = 'A'

if score1 >= 90 and score2 == 'A':
    print('Pass')
else:
    print('Fail')


import sys;
import io

sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding='utf-8')


print()
id1 = 'vip'
id2 = 'admin'
grade = 'platinum'

if id1 == 'vip' or id2 == 'admin':
    print('관리자 입장')

 

import sys;
import io

sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding='utf-8')

#다중 조건문
num = 90
if num >= 90:
    print('Grade : A')
elif num >= 80:
    print('Grade : B')
elif num >= 70:
    print('Grade : C')
else:
    print('과락')

# 중첩 조건문
grade = 'A'
total = 95
if grade == 'A':
    if total >=90 :
        print('장학금 100%')
    elif total >= 80:
        print('장학금 80%')
    else:
        print('장학금 50%')
else:
    print('장학금 없음')


# in, not in
q = [10, 20, 30]
w = {70, 80, 90, 100}
e = {"name": "Lee", "city" : "Seoul", "grade": "A"}
r = (10, 12, 14)
print(15 in q)
print(90 in w)
print("name" in e)
print("Seoul" in e.values())

 

4-2. for 구문 : 하루종일 반복해봐요

 

# 파이썬 반복문 FOR

#for in <Collection>
# <loop body>

for v1 in range(10):  # 0~ 9
    print('v1 is : ', v1)

print()

for v2 in range(1, 11): #1~10
    print('v2 is : ', v2)

print()
for v3 in range(1, 11, 2):
    print('v3 is : ', v3)

# collection으로 여러 개의 데이터에 빠르게 접근할 수 있다.

# 1~1000까지의 합
print()
sum1 = 0
for v4 in range(1, 1001, 2):
    sum1 += v4
print(sum1)
print(sum(range(1, 10)))

print(type(range(1, 11)))  # 데이터를 담고 있는 list를 생성하는 함수

# Iterables 반복할 수 있는 자료형
# 문자열, 리스트, 튜플, 사전, 집합
# iterable 리턴 함수 : range, reversed , enumerate, filter, map, zip

names = ['Kim', 'Park', 'Cho', 'Lee', 'Choi', 'Yoo']
for name in names:
    print('You are : ', name)

lotto_numbers = [11, 19, 21, 28, 36, 37]
for n in lotto_numbers:
    print("Current number : ", n)

print()
word = "Beautiful"
for s in word:
    print('word : ', s)


my_info = {
"name" : "Lee",
"Age" : 33,
"City": "Seoul"
}

for key in my_info:
    print('key : ', my_info[key])

for v in my_info.values():
    print('value : ', v)

name = 'FineApple'
for n in name:
    if n.isupper():
        print(n)
    else:
        print(n.upper())

# break : 반복문 탈출
number = [14, 3, 4, 7, 10, 24, 17, 2, 33, 15, 34, 36, 38 ]
for num in number:
    if num == 4:
        print('Found 4!')
        break
    else:
        print('Not found : ', num)

# continue를 만나면 다시 조건을 검사하는 부분으로 이동
lt= ["1", 2, 5, True, 4.3, complex(4)]
for v in lt:
    if type(v) is bool:
        continue
    print("current type : ", v, type(v))

 

 

# for - else
numbers = [14, 3, 4, 7, 10, 49, 17, 2, 33, 15, 34, 36, 38 ]
for num in numbers:
    if num == 24:
        print("Found : 24")
        break
else:
    print("Not Found : 24")

for문이 break를 만나지 않으면 else 구문을 실행시킬 수 있다

 

# 구구단 출력
for i in range(2, 10):
    for j in range(1, 10):
        print('{:4d}'.format(i*j), end='')
    print()

# 변환 예제
name2 = 'Aceman'
print('Reversed', reversed(name2))
print('List', list(reversed(name2)))
print('Tuple', tuple(reversed(name2)))
print('Set', set(reversed(name2)))

 

4-3. while 문 : for문과 조금 달라요

 

# while 실습
# while <expr> :
#   <statement(s)>

n = 5
while n > 0:
    n = n - 1
    print(n)

 

 

 

a = ['foo', 'bar', 'baz']
while a:
    print(a)
# 여기서 그냥 a만 붙여놓으면 무한반복

 

a = ['foo', 'bar', 'baz']
while a:
    print(a.pop())

 

 

while도 for문처럼 break를 만나지 않았을 시 실행되는 else가 있음.

 

 

 

5. 파이썬 함수 및 입력

 

5-1. 함수는 프로그래밍에서 중요해요.

# 예제1
def first_func(w):
    print("Hello ", w)

word = "Goodboy"

first_func(word)

# 예제2
def return_func(w1):
    return "Hello, " + str(w1)

x = return_func(12)
print(x)

 

 

# 예제3 : 다중반환
def func_mul(x):
    y1 = x * 10
    y2 = x * 20
    y3 = x * 30
    return y1, y2, y3

x, y, z = func_mul(100)
print(x, y, z)

# 튜플 리턴
def func_mul2(x):
    y1 = x * 10
    y2 = x * 20
    y3 = x * 30
    return (y1, y2, y3)

q = func_mul(20)
print(type(q), q, list(q))

 

# 리스트 리턴
def func_mul3(x):
    y1 = x * 10
    y2 = x * 20
    y3 = x * 30
    return [y1, y2, y3]

q = func_mul3(30)
print(type(q), q, list(q))

# 딕셔너리 리턴
def func_mul4(x):
    y1 = x * 10
    y2 = x * 20
    y3 = x * 30
    return {'v1': y1, 'v2': y2, 'v3': y3}

d = func_mul4(10)
print(type(d), d, d.get('v2'), d.items(), d.keys())

 

 

# 중요
# *args, **kwargs

# *args(언팩킹)
def args_func(*args) :  # 매개변수 명은 자유
    for i, v in enumerate(args):
        print('Result : {}'.format(i), v)
    print('----')

args_func('Lee')
args_func('Lee', 'Park')
# 함수를 유연하게 사용할 때, parameter가 몇 개여도 상관없음(튜플로 인식)


# **kwargs(언팩킹)
def kwargs_func(**kwargs):   # 키와 밸류를 넘
    for v in kwargs.keys():
        print("{}".format(v), kwargs[v])
    print('----')

kwargs_func(name1='Lee')
kwargs_func(name1="Lee", name2='Park') #딕셔너리 형으로 매개변수를 넣는다고 생각하면 됨.

 

# 전체 혼합

def example(args_1, args_2, *args, **kwargs) :
    print(args_1, args_2, args, kwargs)

example(10, 20, 'Lee', 'Kim', 'Park', age1 = 20, age2 = 30, age3 = 40)

 

# 중첩 함수

def nested_func(num):
    def func_in_func(num):
        print(num)
    print("In func")
    func_in_func(num + 100)

nested_func(100)

 

 

 

# 람다식 예제

#메모리 절약, 가독성 향상, 코드 간결
# 일반 함수는 객체 생성 -> 리소스를 할당받는다
# 람다는 즉시 실행함수(Heap 초기화) -> 메모리 초기화
# 남발 시 가독성 오히려 감소

def mul_func(x, y):
    return x * y

lambda x, y: x*y
# 인자 : 리턴.    이름 없는 함수.

lambda_mul_func = lambda x, y: x*y
q = mul_func(10, 20)
print(q)
print(lambda_mul_func(50, 50))

print()
def func_final(x, y, func):
    print(x*y*func(100, 100))

func_final(10, 20, lambda x, y: x*y)
func_final(10, 20, mul_func)
q = mul_func
func_final(10, 20, q)

 

 

 

5-2. 사용자가 원하는 값을 입력해봐요.

 

# Input 사용법
# 기본 타입 str

# 예제1
name = input("Enter Your Name")
grade = input("Enter Your Grade")
company = input("Enter Your Company")

print(name, grade, company)

 

# 예제2
number = input("Enter number: ")
name = input("Enter name : ")
print(type(name))
print(type(number))

 

 

입력받는 것은 무조건 문자열로 나와서 형변환을 해줘야 함.

 

# 예제 3
first_number = int(input("first : "))
second_number = int(input("second: "))
total = first_number + second_number
print(total)

print("FirstNum - {0}, LastName - {1}".format(input("Enter first : "), input("Second : ")))