Python Programming [Day 3]

 Published On

Python 4일만에 뽀개기 - Day 3

# 제어문
# 비교연산자(< > <= >= == !=) / 논리연산자(or and not)
# 참 조건 - True, 1, 공백이 아닌 문자열, [리스트], (튜플), {집합}
# 거짓 조건 - False, 0, "", '', None, [], (), {}
# 조건문 - if문 / if-else문 / if-elif-else / switch-case문이 없다.
# 반복문 - while / for

money = 1000
if money:
    print('택시를 타고')
print('가자')

# 두 변수의 크기 비교에 따라 분기하기
a = 10
b = 20
if a > b:
    print('a가 b보다 크다')
else:
    print('b가 a보다 크다')

# 홀수인지 짝수인지 명령 실행하기
# 숫자 % 2 = 0 -> 짝수
# 홀수 % 2 = 1 -> 홀수
myNum = int(input('숫자를 입력하시오...'))
if myNum % 2 == 0:
    print('짝수')
if myNum % 2 != 0:
    print('홀수')

# 두 조건 분기:
'''
if 조건:
    명령문 A
else:
    명령문 B
'''
# 3의 배수이면 메세지 출력
myNum = int(input('숫자를 입력하시오...'))
if myNum % 3 == 0:
    print('3의 배수')
if myNum % 3 != 0:
    print('3의 배수가 아님')

# 조건에 논리연산자 사용하기
# id, password 변수 지정
# id, password 둘 다 맞다면 메시지 출력
id = 'admin'
pwd = '1234'
if id == 'admin' and pwd == '1234':
    print('회원님 환영합니다')
else:
    print('잘못된 접근입니다')

# 특정 멤버가 리스트에 있는가?
bts = ['지민', 'RM', '뷔', '정국']
member = '정국'
if member in bts:
    print(f'{member}은(는) bts 멤버이다')
else:
    print(f'{member}은(는) bts 멤버가 아니다')

# 수강 과목이 튜플안에 있는가?
myClass = {'파이썬', 'C', 'C++'}
subject = 'Java'
if subject not in myClass:
    print('수강 과목이 아닙니다')
else:
    print('수강 과목이 맞습니다')

# 조건문 다중 분기
'''
if 조건A:
    실행문 A
elif 조건B:
    실행문 B
elif 조건 C:
    실행문 C
else:
    실행문 X
'''

# 양수인지 음수인지 0인지 따라서 실행문 실행하기
num1 = 0
if num1 > 0:
    print('양수')
elif num1 < 0:
    print('음수')
else:
    print('0')

# 태어난 년도를 입력하면 해당하는 띠를 출력하기
# 태어난 년도 % 12 = 나머지 값에 따라서 리스트의 인덱스값으로 분기
# 예) 태어난 년도 = 2009
# 2009 % 12 = 5
animalList = ['원숭이띠', '닭띠', '개띠', '돼지띠', '쥐띠',
              '소띠', '범띠', '토끼띠', '용띠', '뱀띠', '말띠', '양띠']

birth = int(input('태어난 년도를 입력하세요...'))
animal = birth % 12
print(f'태어난 년도는 {birth}년이고, {animalList[animal]}입니다.')

# if.. elif.. else문 + in/not 연산자
# if 값 in 문자열/리스트/튜플/집합:
#   명령문1
# elif 값 in 문자열/리스트/튜플/집합:
#   명령문2
# else:
#   명령문3

fruit = ['바나나', '포도', '자두', '수박']
if '체리' in fruit:
    print('체리가 냉장고에 있다')
elif '포도' in fruit:
    print('포도가 냉장고에 있다')
else:
    print('냉장고에 비었다')

# pass 키워드
# 실행되지 않는 명령문
pocket = ['paper', 'money', 'cellphone']
if 'money1' in pocket:
    pass
elif 'cellphone1' in pocket:
    pass
else:
    print('카드를 사용해라')

# while 조건:
#   실행문
# 조건이 True 인동안 실행문을 계속 반복하여라

# 초기값
# while 초기값을이용한조건:
#   초기값 증감
#   실행

# 1-10까지 출력하여라
count = 1
while count <= 10:
    print(f'count = {count}')
    count += 1

# 10-1까지 출력하여라
count = 10
while count > 0:
    print(f'count = {count}')
    count -= 1

# 1-100까지의 합은?
# 1+2+3+...+100 = ?
count = 1
# 누적합의 변수
result = 0
while count <= 100:
    count += 1
    result += count
print(f'1-100까지의 합은? {result}')

# while문 + 조건문 if 사용하기
# 1-50에서 짝수만 출력하기
cnt = 1
while cnt <= 50:
    cnt += 1
    if cnt % 2 == 0:
        print(cnt, end=' ')

# 1-10까지 출력하기
cnt = 1
while True:
    print('cnt = %d' % cnt)
    cnt += 1
    if cnt > 10:
        break
print('무한루프 테스트 끝')

# q를 입력할 때까지 리스트에 값을 추가하여라
myList = []
while True:
    indata = input('q를 입력하면 끝. 그렇지 않으면 리스트에 값 추가 => ')
    if indata == 'q':
        break
    else:
        myList.append(indata)
print(f'myList = {myList}')

# continue
# : 반복문을 탈출하지는 않고 그 다음 단계로 분기
# : continue문이 실행되면 반복문 안에서는 하단 명령은 실행되지 않는다.
# 1-10까지 출력하는 데 5라는 숫자는 스킵
cnt = 0
while cnt <= 10:
    cnt += 1
    if cnt == 5:
        continue
    elif cnt <= 10:
        print(f'cnt = {cnt}')

# for 변수 in 문자열/리스트/튜플:
#   실행문
# 리스트의 값을 순차적으로 출력하여라
myList = [100, 5, 8, 45, -100]
for i in myList:
    print(f'** {i}')
print()

# 문자열에서 홀수번째만 찍기
myText = '도레미파솔라시'
cnt = 1
for i in myText:
    if cnt % 2 != 0:
        print(i, end=' ')
    cnt += 1
print('\n')

# 리스트의 평균과 총점 구하기
grade = [78, 55, 66, 34, 97]
print(f'총점은? {sum(grade)}')
print(f'평균은? {sum(grade)//len(grade)}')
print()

# 딕셔너리와 for문
# for key in 딕셔너리 변수:
#   key 명령문
myDict = {1:'q', 2:'w', 3:'e', 4:'r', 5:'t', 6:'y'}
for key, value in myDict.items():
    print('{0}: {1}'.format(key, value))

# range(start, end, step)
# range 객체로 생성
# start - end - 1 까지 step 만큼
print(range(1, 11))
# 리스트화
print(list(range(1, 11)))
# 튜플화
print(tuple(range(1, 50, 2)))
# 집합화
print(set(range(1, 50, 2)))

# 0-50에서 3의 배수만 출력하기
for i in range(3, 50, 3):
    print(i, end=' ')
print()

# 특정 숫자의 구구단 출력하기
num1 = 3
for i in range(1, 10):
    print(f' {num1} x {i} = {i*i}')

# 1-100까지의 합 구하기
tot = 0
for i in range(1, 101):
    tot += i
print(tot)

# 구구단 모두 찍기
for i in range(1, 10):
    print(f' {i} 단')
    for j in range(1, 10):
        print(f' {i} x {j} = {i*j}')

# 퀴즈1: 1-25까지 한 줄에 5개씩 출력하기
for i in range(1, 26):
    if i % 5 != 0:
        print(i, end=' ')
    else:
        print(i)

# 퀴즈2: 1-27까지 5의 배수만 빼고 출력하기
for i in range(1, 28):
    if i % 5 != 0:
        print(i, end=' ')

# 2차원 리스트와 for문
list_2d = [[1, 2, 3], ['가', '나', '다'], ['python', 'c', 'c++']]
print(list_2d)
print(list_2d[0])
print(list_2d[2][0])

# 다중 for문과 이차원 리스트
for i in range(0, 3):
    for j in range(0, 3):
        print(list_2d[i][j], end=' ')
print('\n')

# 이차원 리스트(동일 값이 들어있는 경우)에 인덱스 변수 3개 사용하기
# for (변수1, 변수2, 변수3, ...) in 이중리스트
for (i, j, k) in list_2d:
    print(f'i = {i}, j = {j}, k = {k}')

# 퀴즈3: 학생 이름, 국어, 영어, 수학으로 구성된 2차원 리스트를 생성한다.
# 출력 형식은 아래와 같이 한다.
'''
학생이름   국어  영어  수학  합계  평균
김태희      30   40   100    ?    ?
'''

stGradeList = [['김태희', 30, 50, 55],
               ['신민아', 50, 90, 80],
               ['아이린', 50, 90, 40],
               ['한고은', 60, 50, 56],
               ['박보영', 90, 88, 66]]

print('학생이름    국어  영어  수학  합계    평균')
for std in stGradeList:
    print('{0:8s} {1:d} {2:4d} {3:5d} {4:5d} {5:8.2f}'.format(std[0], std[1], std[2], std[3], sum(std[1:]), sum(std[1:])//3))
print()
for (stName, i, j, k) in stGradeList:
    tot = i+j+k
    print('%s %7d %4d %5d %5d %8.2f' % (stName, i, j, k, tot, tot/3))

    # # 반올림 함수 round(값, 소숫점자릿수)
    # print(sum, round((tot / 3), 2))
    # print()
    # print('-' * 10)

# 리스트 내포 - 한줄 for 리스트
# 리스트 변수 = [결과값이나 수식 for문]
# 1-10으로 구성된 리스트 만들기
# 빈 리스트를 만들고 1-10까지 값 추가
result1 = []
for i in range(1, 11):
    result1.append(i)
print(result1)

result2 = [i for i in range(1, 11)]
print(result2)

# 3단의 결과값으로 리스트를 만들어라
result3 = []
for i in range(1, 10):
    result3.append(i*3)
print(result3)

result4 = [i*3 for i in range(1, 10)]
print(result4)

# 3단의 결과값에서 -1 한 값으로 리스트를 만들어라.
result5 = []
for i in range(1, 10):
    result5.append(i*3-1)
print(result5)

result6 = [i*3-1 for i in range(1, 10)]
print(result6)

# 다음과 같은 형태로 리스트를 만들어라.
# ['*', '**', ..., '*********']
result7 = []
for i in range(1, 10):
    result7.append('*'*i)

print(result7)

result8 = ['*'*i for i in range(1, 10)]
print(result8)

# 이중 for문으로 리스트 만ㄷ르기 - 리스트 다중 for
# 리스트 변수 = [결과값이나 수식 for문 for문]
# 구구단의 결과값으로 리스트를 만들어라
result9 = []
for i in range(2, 10):
    for j in range(1, 10):
        print(f'{i} X {j} = {i * j}')
        result9.append(i*j)
print(result9)

result10 = [i*j for i in range(2, 10) for j in range(1, 10)]
print(result10)

# 함수1 - 인자(Parameter, 전달값) x, 결과값(return) x
'''
# 함수 정의
def 함수명():
    명령문

# 함수 호출
함수명()
'''

# 특정 메시지를 출력하는 함수 정의하고 호출하기
def helloWord():
    print(f'*** Hello Word')

# 함수 호출
helloWord()

# 함수2 - 인자(Parameter, 전달값) O, 결과값(return) X
'''
# 함수 정의
def 함수명(인자):
    명령문
    
# 함수 호출
함수명(인자값)
'''

# 특정 메시지를 전달한 후 출력하는 함수 정의 및 호출하기
# 함수 정의
def helloWord2(m):
    print(f'*** {m}')

# 인자값을 지정해서 호출하기
helloWord2('안녕')

# 두 수의 합을 구하는 함수를 정의하고 호출하여라
def add(x, y):
    print(f'{x} + {y} = {x+y}')

add(10, 90)


# 함수3 -  인자(Parameter,전달값) X, 결과값(return) O
# 함수 정의
'''
def 함수명():
    return 값/수식

# 함수 호출
함수명()
'''
def helloWorld3():
    # print('-'*10)
    return '** Helloworld'

print(helloWorld3())


# 함수4 - 인자(Parameter, 전달값) O, 결과값(return) O
'''
# 함수 정의
def 함수명(인자):
    return 값/수식
# 함수 호출
함수명(인자)
'''

# 고객 이름을 인자로 전달해서 환영메시지를 리턴한다.
def message(userName):
    return userName + '님 환영합니다.'

print(message('홍길동'))

# 1부터 특정 숫자까지의 합을 리턴한다.
def totalN(n):
    tot = 0
    for i in range(1, n+1):
        tot += i
    return tot

print('1-100까지의 합은?', totalN(100))
print('1-1000까지의 합은?', totalN(1000))
print('1-10000까지의 합은?', totalN(10000))

# 함수5 - 인자(Parameter, 전달값) O, 결과값(return) 다중 O
# 리턴값이 다중인 경우에는 튜플로 저장된다.
'''
# 함수 정의
def 함수명(인자):
    return 값1/수식1, 값2/수식2, ...
# 함수 호출
함수명(인자)
'''

# 두 수를 인자로 전달한 후 합과 곱의 결과를 리턴한다.
def sumMul(x, y):
    return x+y, x*y

print(sumMul(10, 4))
print(sumMul(7, 89))

# 3수를 인자로 전달한 후 더하기/빼기/곱하기/나누기 한 값을 출력하는 함수를 정의하고 호출하여라.
def myFunc(n1, n2, n3):
    return n1+n2+n3, n1-n2-n3, n1*n2*n3, n1/n2/n3

print(myFunc(10, 5, 2))

# 함수6 - 인자값에 모두 초기값이 있는 경우
'''
# 함수 정의
def 함수명(인자=값):
    return 값/수식
# 함수 호출
함수명() -> 인자를 주지 않는 경우, 초기값으로 설정됨
함수명(인자)
'''
# 인자의 합을 구하는 함수 정의
def sum1(n1=0, n2=0, n3=0):
    return n1+n2+n3

print(sum1())
print(sum1(1))
print(sum1(1,2))
print(sum1(1,2,3))

# 함수7 - 인자의 일부만 초기값이 있는 경우
'''
# 함수 정의
def 함수명(인자1, 인자2, 인자3=값):
    return 값/수식
# 함수 호출
함수명(인자1, 인자2)
함수명(인자1, 인자2, 인자3)
'''
# 세 수의 곱을 리턴한다.
# 마지막 인자에만 초기값이 지정되어 있다.
def threeMul(n1, n2, n3=1):
    return n1*n2*n3

print(threeMul(3, 4))
print(threeMul(3, 4, 9))

# 함수8 - 가변인자 함수
'''
# 함수 정의
def 함수명(*args):
    명령문
    return 값/수식

# 함수 호출
함수명(인자1)
함수명(인자1, 인자2)
함수명(인자1, 인자2, 인자3)
'''
# 가변인자로 함수를 정의한 후 가변인자의 값을 출력한다.
def f1(*args):
    print(args)
    print(*args)
    print(type(args))

f1('*', '**', '***')

# 학생이름을 인자로 전달하고 출력한다.
def f2(*args):
    if len(args) == 0:
        print('학생이 없다')
    for i in args:
        print(f'학생 이름 = {i}')
    print()

f2()
f2('홍길동', '고은비')
f2('이몽룡', '성춘향', '김콩쥐')

# 함수9 - 인자 + 가변인자가 함께 전달하는 함수
'''
# 함수 정의
def 함수명(인자0, *args):
    명령문
    return 값/수식

# 함수 호출
함수명(인자0)
함수명(인자0, 인자1, 인자2, ...)
'''
def f3(num, *args):
    return num, args

print(f3(10))
print(f3(10, '강아지'))
print(f3(10, '고양이', '강아지', '펭귄'))

# 퀴즈: 계산기호 인자 값에 따라서 뒤의 가변인자값을 계산하여라.
def calChoice(operator, *args):
    if operator == '+':
        result = 0
        for arg in args:
            result += arg
    elif operator == '-':
        result = 0
        for arg in args:
            result -= arg
    elif operator == '*':
        result = 1
        for arg in args:
            result *= arg
    else:
        result = sum([arg for arg in args]) // len(args)

    return result

print(calChoice('*', 20, 30))
print(calChoice('+', 20, 30, 50))

# 함수10 -  딕셔너리 가변인자 **kwargs
# 함수 정의
'''
def 함수명(**kwargs):
    kwargs 명령문

# 함수 호출
함수명(키1변수=값1)
함수명(키1변수=값1, 키2변수=값2 ...)
'''

def dictCall1(**kwargs):
    return kwargs, type(kwargs)

print('-'*20)
print(dictCall1())
print(dictCall1(key1='apart', key2='banana'))
print(dictCall1(key1='apart', key2='banana', key3='flower'))

# for key in 딕셔너리 와 가변딕셔너리 함수 활용
def dictCall2(**kwargs):
    print('-'*20)
    for key in kwargs:
        print(key, ' => ', kwargs[key])

print('-'*20)
dictCall2(age=12, userName='홍길동', gender='남')
dictCall2(age=22, userName='장민호')

# 람다함수
# 람다함수란? 한 줄짜리 함수, def 키워드가 필요없음. 대신 lambda 키워드 사용
# 람다변수 = lambda 인자: 명령문

# 두 수의 합을 리턴한다.
# 람다함수 정의
ff1 = lambda x, y: x + y
# 람다함수 호출
print(ff1(10, 20))

# 메시지 출력
ff2 = lambda x: x + '님 어서오세요'
print(ff2('홍길동'))

# 함수의 범위(Scope)
# 전역변수 - global 변수명. 함수 안에서도 사용 가능
# 지역변수 - local

x = 10
print('함수밖의 x', x)
def test():
    x = 20
    print('함수안의 x', x)

test()
print('함수밖의 x', x) # 지역변수 값은 변경되지 않음
print()

x = 10
print('함수밖의 x', x)
def test():
    # global로 선언하면, 전역변수로 정의됨
    global x
    x = 20
    print('함수안의 x', x)

test()
print('함수밖의 x', x)

Tags: Language

Comments:

comments powered by Disqus

© 2021 - MH.Ji. All rights reserved
Built using Jekyll