01/04 Python 6일차

빨강·2024년 1월 3일
0

기록 - Python

목록 보기
8/14
post-thumbnail

와..오늘 배운거 많다..


  • 어제 숙제

work_dict.py

# 12. 1
lux = {'health' : 490, 'mana' : 334, 'melee' : 550, 'armor' : 18.72}
print(lux)

lux = {'health' : 490, 'health' : 800, 'mana' : 334, 'melee' : 550, 'armor' : 18.72}
print(lux['health'])
print(lux)

x = {100: 'hundred', False : 0, 3.5 : [3.5, 3.5]}
print(x)

# x = {[10, 20] : 100}
# x = {{'a':10} : 100}

x = {}
print(x)

y =dict()
print(y)

lux1 = dict(health=490, mana=334, melee=550, armor=18.72)
print(lux1)

lux3 = dict([('health', 490), ('mana',334), ('melee', 550), ('armor', 18.72)])
print(lux3)

#12.2
lux = {'health' : 490, 'health' : 800, 'mana' : 334, 'melee' : 550, 'armor' : 18.72}
print(lux['health'])
print(lux['armor'])

lux = {'health' : 490, 'health' : 800, 'mana' : 334, 'melee' : 550, 'armor' : 18.72}
lux['health'] = 2037
lux['mana'] = 1184
print(lux)

lux['mana_regen'] = 3.28
print(lux)

lux = {'health' : 490, 'health' : 800, 'mana' : 334, 'melee' : 550, 'armor' : 18.72}
print('health' in lux)
print('attack_speed' in lux)

print('attack_speed' not in lux)
print('health' not in lux)

lux = {'health' : 490, 'health' : 800, 'mana' : 334, 'melee' : 550, 'armor' : 18.72}
print(len(lux))
print(len({'health' : 490, 'health' : 800, 'mana' : 334, 'melee' : 550, 'armor' : 18.72}))

#12.5

keys = input().split(' ')
values = input().split(' ')
if bool(keys[4]) == True:
    print(f''' {(keys[0])} :{values[0]}, {keys[1]}:{values[1]}, {keys[2]}:{values[2]}, {keys[3]}:{values[3]}, {keys[4]}:{values[4]}''')
else:
    print(f''' {keys[0]} :{values[0]}, {keys[1]}:{values[1]}, {keys[2]}:{values[2]}, {keys[3]}:{values[3]}''')

print(bool(keys[4]))
  • work_if.py
# # # 13.1
# # x = 10
# # if x ==10:
# #         print('10입니다.')
# #
# # # if x = 10: #SyntaxError: invalid syntax
# #
# # #if x == 10 SyntaxError: invalid syntax
# #
# #
# # # 13.2
# # x = 10
# # if x ==10:
# #     pass
# #
# # if x == 10:
# #     pass
# #
# # x = 10
# #
# # if x == 10:
# #     print('x에 들어있는 숫자는')
# #             # print('10입니다.') # IndentationError: unexpected indent
# #
# # # 13.3
# # x = 15
# # if x >= 10:
# #     print('10이상입니다.')
# #     if x ==15:
# #         print('15입니다.')
# #     if x ==20:
# #         print('20입니다.')
# #
# # # 13.4
# # x = int(input())
# #
# # if x ==10:
# #     print('10입니다.')
# # if x ==20:
# #     print('20입니다.')
# #
# # # 14.1
# #
# # x = 5
# # if x ==10:
# #     print('10입니다.')
# # else:
# #     print('10이 아닙니다.')
#
# x = 5
# if x ==10:
#     y = x
# else:
#     y = 0
# print(y)
#
# x = 5
# y = x if x == 10 else 0
# print(y)
#
# #14.2
#
# x = 5
# if x ==10:
#     print('10입니다.')
# else:
# # print('x에 들어있는 숫자는') #IndentationError: expected an indented block
#     print('10이 아닙니다.')
#
# x = 10
# if x == 10:
#     print('10입니다.')
# else:
#     print('x에 들어있는 숫자는')
# print('10이 아닙니다.') #출력되지 않아야 하는데 출력됨
#
# x =10
# if x ==10:
#     print('10입니다.')
# else:
#     print('x에 들어있는 숫자는')
#
# # print('10이 아닙니다.') #if 문에 속하지 않는 구절
#
# # 14.3
# if True:
#     print('참')
# else:
#     print('거짓')
#
# if False:
#     print('참')
# else:
#     print('거짓')
#
# if None:
#     print('참')
# else:
#     print('거짓')
#
# if 0:
#     print('참')
# else:
#     print('거짓')
#
# if 1:
#     print('참')
# else:
#     print('거짓')
#
#
# if 0x1F:
# # print(bin(0x1F)) #111111
#     print('참')
# else:
#     print('거짓')
#
# if 0b1000:
#     print('참')
# else:
#     print('거짓')
#
# if 13.5:
#     print('참')
# else:
#     print('거짓')
#
#
# if 'Hello':
#     print('참')
# else:
#     print('거짓')
#
# if '':
#     print('참')
# else:
#     print('거짓')
#
# if not 0:
#     print('참')
#
# if not None:
#     print('참')
#
# if not '':
#     print('참')
#
# x = 10
# y = 20
#
# if x == 10 and y == 20:
#     print('참')
# else:
#     print('거짓')
#
# if x>0:
#     if x < 20:
#         print('20보다 작은 양수입니다.')
#
# if x > 0 and x < 20:
#     print('20보다 작은 양수입니다.')
#
# if 0 < x < 20:
#     print('20보다 작은 양수입니다.')
#
#

#14. 6
#
# (korean, english, math, science) = input("점수를 입력하세요: ").split(" ")
#
# if 0<int(korean)<100 and 0<int(english)<100 and 0<int(math)<100 and 0<int(science)<100:
#     if (int(korean) + int(english) + int(math) + int(science)) / 4 >= 80:
#         print("합격")
#     else:
#         print("불합격")
# else:
#     print("잘못된 점수")

#---------------------------------------------------------

# 15.1

x = 20
if x ==10:
    print('10입니다.')
elif x == 20:
    print('20입니다.')

x = 30

if x == 10:
    print('10입니다.')
elif x == 20:
    print('20입니다.')
else:
    print('10도 20도 아닙니다.')
#
# if x ==10:
#     print('10입니다.')
# else:
#     print('10도 20도 아닙니다.')
# elif x ==20:
#     print('20입니다.')

button = int(input())

if button ==1:
    print('콜라')
elif button == 2:
    print('사이다')
elif button == 3:
    print('환타')
else:
    print('제공하지 않는 메뉴')

# 15.4
age = int(input())
balance = 9000
age1 = 650
age2 = 1050
age3 = 1250

if 7 <= age <= 12:
    print(f"{balance-age1}")
elif 13<= age <= 18:
    print(f"{balance-age2}")
else:
    print(f"{balance-age3}")
  • 09:00

어제 숙제 질문

ex_12_5.py

# [문제] --------------------------------------------------
# 문자열 여러 개와 실수 숫자 여러 개를 두 줄로 입력 받기
# - 첫 번째 입력 받은 값은 Key
# - 두 번째 입력 받은 값은 Value
# - 딕셔너리로 저장해 주세요.
# --------------------------------------------------------

# 12.5 기존에 내가 풀었던 방식
# 입력 값이 4개일 때랑 5개일 때 구분을 못하는 게 문제. 5개일 때만 실행가능

# keys = input().split(' ')
# values = input().split(' ')
# if bool(keys[4]) == True:
#     print(f''' {(keys[0])} :{values[0]}, {keys[1]}:{values[1]}, {keys[2]}:{values[2]}, {keys[3]}:{values[3]}, {keys[4]}:{values[4]}''')
# else:
#     print(f''' {keys[0]} :{values[0]}, {keys[1]}:{values[1]}, {keys[2]}:{values[2]}, {keys[3]}:{values[3]}''')
#
# print(bool(keys[4]))

# 선생님 방법 -------------------------------------------------
twoData = input("문자열 4~5개, 실수 숫자 4~5개를 두 줄로 입력\n단, 문자열과 실수 갯수는 동일 \n(예: aa bb cc dd, 3.1 5.2 6.5 8.1) :")
# 두 줄로 입력을 받는 다른 방법이 아닌 ','나 '\'로 구분할 수 있게끔 예시를 주는 식으로 제공
# 받은 입력을 내가 ','나 '\' 기준으로 다시 줄바꿈 하는 것

# key와 value로 데이터 분리
datas = twoData.split(',')
keys = datas[0].split()
values = datas[1].split()

# 입력 데이터 존재 여부 체크
if (len(keys)==4 and len(values)==4) or (len(keys)==5 and len(values)==5):
    print("입력이 완료되었습니다.")
    dataDict = {}
    if len(keys) ==4:
        dataDict[keys[0]] = float(values[0])
        dataDict[keys[1]] = float(values[1])
        dataDict[keys[2]] = float(values[2])
        dataDict[keys[3]] = float(values[3])
        print(dataDict)
    else:
        dataDict[keys[0]] = float(values[0])
        dataDict[keys[1]] = float(values[1])
        dataDict[keys[2]] = float(values[2])
        dataDict[keys[3]] = float(values[3])
        dataDict[keys[4]] = float(values[4])
        print(dataDict)

else:
    print("입력된 데이터가 정확하지 않습니다.")

ex_packing_unpacking.py

# --------------------------------------------------------
# 팩킹(Packing) & 언팩킹(Unpacking)
msg = "Happy New Year"
msgList = msg.split()
# Happy, Year만 가져오고 싶다면?

# 팩킹(Packing) 방식 - 덩어리 째로 변수 유지
print(msgList[0], msgList[-1])

# 언팩킹(Unpacking) 방식 - 각자 새로운 변수로 저장
# 데이터 수와 변수 수가 동일해야 함!!
m1, m2, m3 = msg.split()
print(m1, m2, m3)

# 데이터와 변수 수가 달라서 Error 발생
# 값이 3개인데 변수를 2개만 지정하면 작동하지 않음
# m1, m2 = msg.split()
# print(m1, m2) #ValueError: too many values to unpack (expected 2)

# 변수를 여러 개 생성하는 경우---------------------------------
age = 12
name = "Hong"
job = ("학생")

# 튜플을 언팩킹하여서 생성 가능
age1, name1, job1 = 12, 'Hong', '학생'   # 좌변 언팩킹, 우변 튜플의 양식을 이용한 것
info = (12, 'Hong', '학생')              # 튜플 기본 입력 방식

print(age1, name1, job1)
print(info)

# ------------------------------------------------------------------
# # 과제에서의 예시
# # key와 value로 데이터 분리했을 때
# datas = twoData.split(',')         # aa bb cc dd, 1.1 2.2 3.3 4.4
# keys = datas[0].split()            # aa bb cc dd
# values = datas[1].split()          # 1.1 2.2 3.3 4.4
#
# #언팩킹 이용하면
# keys, values = twoData.split(',')  #으로 축약해서 가능
# # ------------------------------------------------------------------

#어디서 쓰는걸까?
def myFunc(a, b):
    return a+b, a-b, a*b, a/b if not b else -1

result = myFunc(10, 3)
print(f'덧셈 결과 : {result[0]}, 뺄셈 결과 : {result[1]}, 곱셈 결과 : {result[2]}, 나눗셈 결과 : {result[3]}')

plus, minus, multi, div = myFunc(10,3)
print(f'덧셈 결과 : {plus}, 뺄셈 결과 : {minu}, 곱셈 결과 : {multi}, 나눗셈 결과 : {div}')
# 로 쓰면 가독성도 높아지고 편해짐

ex_if.py

# --------------------------------------------------------
# 단순 조건문 ==> (1) 조건이 True인 경우만 처리하는 조건문
# if 조건문:
# <-->실행코드
# <-->실행코드
# <-->실행코드
# --------------------------------------------------------

# --------------------------------------------------------
# 단순 조건문 ==> (2) 조건이 True인 경우/ False 경우 처리하는 조건문
# if 조건문:
# <-->실행코드      T
# <-->실행코드
# <-->실행코드
# else:
# <-->실행코드      F
# <-->실행코드
# <-->실행코드
# --------------------------------------------------------

# --------------------------------------------------------
# 복잡 조건문 ==> (3) 조건이 2개 이상인 경우의 조건문 : 다중조건문
# if 조건문1:
# <-->실행코드      jumsu >= 90: #A
# <-->실행코드
# <-->실행코드
# elif 조건문2:
# <-->실행코드      jumsu >= 80: #B
# <-->실행코드
# <-->실행코드
# elif 조건문3:
# <-->실행코드      jumsu >= 70: #C
# <-->실행코드
# <-->실행코드
# elif 조건문4:
# <-->실행코드      jumsu >= 60: #D
# <-->실행코드
# <-->실행코드
# else:
# <-->실행코드      #F
# <-->실행코드
# <-->실행코드
# --------------------------------------------------------

# --------------------------------------------------------
# 복잡 조건문 ==> (4) 조건문 안에 조건문이 존재하는 조건문 : 중첩조건문
# if 조건문1:      # 양수일 떄
# <-->실행코드
# <-->실행코드
# <-->실행코드
# <-->if 조건문2:
#     <-->실행코드      #홀수
#     <-->실행코드
#     <-->실행코드
# <-->else:
#     <-->실행코드      #짝수
#     <-->실행코드
#     <-->실행코드
# else:
# <-->실행코드      # 0 또는 음수일 때
# <-->실행코드
# <-->실행코드
# --------------------------------------------------------

# --------------------------------------------------------
# 조건부 표현식 === > (5) 1줄 조건문
# 조건 True 실행될 코드 if 조건식 else 조건 False 실행 코드
# ':' 콜론 없음
# --------------------------------------------------------
# 홀수 & 짝수 식별 후 결과 출력하는 코드
num = 0
if num%2:
    print(f"{num}은 홀수")
else:
    print(f"{num}은 짝수")
# 로 지금까지는 써왔지만

print(f"{num}은 홀수") if num%2 else print(f"{num}은 짝수")
# 로 조건부 표현식 (한 줄 표현식) 가능

result = "홀수" if num%2 else "짝수"
# 저장하고 싶을 땐 이렇게도 가능

# 양수, 0 음수 식별 후 결과 출력
if num>0:
    print(f"{num}은 양수")
elif num<0:
    print(f"{num}은 음수")
else:
    print(f"{num}은 0")

# 한 줄 조건문으로 표현하면
result = "양수" if num>0 else "음수" if num<0 else "0"
#          ㄴ 참          거짓  ⏌ㄴ   참       거짓  ⏌
print(f"{num} {result}")

result = int("123") if "123".isdecimal() else "123"
  • 10:10 ex_if.py 이어서 : 추가완료
  • 10:30 ex_for_01.py
# 1~100 사이 2의 배수에 해당한 정수로 구성된 list--------------------------
a = list(range(2,101,2))
print(a)

# 2, 4, 6, 8, ..., 100 을 문자열로 만들려면
result = str(a)
print(result[0], result[3], result[-2], result[-1])
#str로 형변환시키면 '[', ',' ']', ' ' 도 다 들어감

print(len(result)) # 197
# int ==> str 형변환
# result[0] = str(result[0]) 를 197회 반복해야..

# --------------------------------------------------------
# 시퀀스 데이터 타입에서 원소/요소를 하나씩 빼서 반복 코드 수행 => for in 반복문
# --------------------------------------------------------

# for문 안에 넣으면 계속 반복해서 덮어씌워짐
strNum = ''
for num in result:
    strNum = strNum + str(num)
print(f'str(num) => {type(strNum)}\n{strNum}')

# --------------------------------------------------------
# list 안에 모든 원소를 str 타입으로 변환해서 저장
# --------------------------------------------------------
# num[인덱스] = str(num[인덱스])
# 데이터의 인덱스 범위 => 0 ~ len(data)-1
print(range(len(a)))

print(f'[BEFORE] a => {a}')

for idx in range(len(a)):
    a[idx] = str(a[idx])
print(f'[AFTER] a => {a}')
  • 11:10 ex_for_02.py
# --------------------------------------------------------
# [실습] 'Hello World!' 100번 입력
# --------------------------------------------------------
print('Helo World!') #를 100번 복사 붙여넣기 할 수도 있지만
# 반복문 => for in 반복문 -----------------------------------
# - 여러 개의 데이터를 가지고 있는 데이터에서 한 개씩 원소/요소를 읽어와줌
# for 요소저장변수명 in 여러 개의 데이터 가진 타입:
# <-->요소/원소 반복할 코드
# <-->요소/원소 반복할 코드
# --------------------------------------------------------

msg = "Happy New Year 2024! Gook Luck^^"

# msg를 구성하는 문자 한개씩 화면에 출력해주세요!
# H
# a
# p
# p
# y     이런 식으로 하나씩 출력해야..

for ele in msg:
    print(ele)

# [실습1] 'Hello World' 100번 출력
for cnt in range(100):
    print("Hello World!")

# [실슴2] 좋아하는 음식명을 리스트에 저장하기 (단, 10개)
foods = ['치킨', '갈비', '불고기', '피자', '족발', '보쌈', '떡볶이', '마라탕', '돈가스', '제육볶음']
print(foods[0]) #을 10번 쓸 수도 있지만..

for cnt in foods:
    print(cnt)

for cnt in foods: print(cnt) # 실행구문이 한 줄이면 이렇게도 가능
  • 13:00

ex_for_03.py

# [문제] --------------------------------------------------
# 문자열 여러 개와 실수 숫자 여러 개를 두 줄로 입력 받기 => input() 1개만 사용
# - 첫 번째 입력 받은 값은 Key
# - 두 번째 입력 받은 값은 Value
# - 딕셔너리로 저장해 주세요.
# --------------------------------------------------------
data = input("문자열과 실수 여러 개 입력\n단, 문자열과 실수 갯수 동일 (예: aa bb cc, 1.1 2.2 3.3)")

# 입력 형식이 맞을 경우만 딕셔너리에 저장
# - (1) 입력 " , " 문자열 안에 ','가 존재해야 함
# - (2) 문자열과 실수 갯수가 동일해야 함
if ',' in data:
    dataList = data.split(',')
    key = dataList[0].split()
    value = dataList[1].split() #여기서 float 형변환은 list 값이기 때문에 안 됨
#   key, value = dataList[0].split(), dataList[1].split() 도 언패킹으로 가능
    dataDict = {}
    if len(key) == len(value):
        for num in range(len(key)):
            dataDict[key[num]] = float(value[num])
        print(dataDict)
    else:
        print("정확한 형식이 아닙니다.")
else:
    print("정확한 형식이 아닙니다.")

# --------------------------------------------------------
# 내장함수 zip()
# --------------------------------------------------------
x = [1,2,3,4,5]
y = [11,22,33,44,55]
z = [111,222,333,444,555]

result = zip(x, y, z)
print(f'result => {type(result)}, {list(result)}')

# zip으로 고친다면?
# [문제] --------------------------------------------------
# 문자열 여러 개와 실수 숫자 여러 개를 두 줄로 입력 받기 => input() 1개만 사용
# - 첫 번째 입력 받은 값은 Key
# - 두 번째 입력 받은 값은 Value
# - 딕셔너리로 저장해 주세요.
# --------------------------------------------------------
data = input("문자열과 실수 여러 개 입력\n단, 문자열과 실수 갯수 동일 (예: aa bb cc, 1.1 2.2 3.3)")

# 입력 형식이 맞을 경우만 딕셔너리에 저장
# - (1) 입력 " , " 문자열 안에 ','가 존재해야 함
# - (2) 문자열과 실수 갯수가 동일해야 함
if ',' in data:
    dataList = data.split(',')
    key = dataList[0].split()
    value = dataList[1].split() #여기서 float 형변환은 list 값이기 때문에 안 됨
#   key, value = dataList[0].split(), dataList[1].split() 도 언패킹으로 가능
    dataDict = {}
    if len(key) == len(value):
        # for num in range(len(key)):
        #     dataDict[key[num]] = float(value[num])
        dataDict2 = dict(zip(key,float(value)))
        print(dataDict2)
    else:
        print("정확한 형식이 아닙니다.")
else:
    print("정확한 형식이 아닙니다.")

ex_for_04.py

# --------------------------------------------------------
# 반복문과 내장함수
# --------------------------------------------------------

xList = ['1', '3', '5', '7']

# xList 안에 모든 원소를 정수 int로 변환 후 저장해 주세요~
# xList[0] = int(xList[0])
# xList[1] = int(xList[1])
# xList[2] = int(xList[2])
# xList[3] = int(xList[3])      이건 반복이 너무 심하니까 아래와 같이

for idx in range(len(xList)):
    xList[idx] = int(xList[idx])

print(f'xList => {xList}')

# --------------------------------------------------------
# 시퀀스 또는 반복이 가능한 객체의 요소/원소에 적용 후 값을 다시 저장해야 하는 경우
# 자주 사용되는 기능으로 내장함수로 제공 => map()
# - 문법 : map(함수명, 시퀀스 또는 반복이 가능한 객체#)
# --------------------------------------------------------
# int 요소인 xList를 str요소로 변환
result = list(map(str, xList))
print(f' result => {result}')
print(f'xList => {xList}')

# int 요소인 xList를 bool 요소로 변환
result = list(map(bool, xList))
print(f' result => {result}')
print(f'xList => {xList}')

# --------------------------------------------------------
# List 데이터를 dict 데이터로 생성
# --------------------------------------------------------
x = ['std01', 'std02', 'std03']
y = [90, 100, 99]
xyDict = zip(x, y)

# 방법 1
xyDict = {}
xyDict['std01'] = 98
xyDict['std02'] = 100
xyDict['std03'] = 989

# 방법 2 --> dict() 생성자 함수
xyDict = {}
xyDict['std01'] = 98
xyDict['std02'] = 100
xyDict['std03'] = 989
for idx in range(len(x)):
    xyDict[x[idx]] = y[idx]

# 방법 3 --> dict([(키1, 값1), (키2, 값2), ..., (키n, 값n)]) 생성자 함수
xy = []
for idx in range(len(x)):
    xy.append((x[idx], y[idx]))
print(xy)

xyDict3=dict(xy)
print(xyDict3)

# 방법 4 --> dict([(키1, 값1), (키2, 값2), ..., (키n, 값n)]) 생성자 함수
# by 내장함수 zip()
xyDict4 = dict(zip(x,y))
print(xyDict4)
  • 14:30

ex_for_05.py

# --------------------------------------------------------
# [실습1] 알고 싶은 단을 입력 받고 해당 단을 출력해 주세요.
# - input()
# - 특정 단의 구구단을 출력 => 반복문 사용하기
# --------------------------------------------------------
num = int(input("원하는 구구단 단 수를 입력하세요(예: 3):"))

if num:
    if 2<=num<=9:
        for multi in range(1,10):
            print(f'{num} * {multi} =  {num * multi}')
    else:
        print("올바른 단 수를 입력해주세요.")
else:
    print("올바른 단 수를 입력해주세요.")

# 내가 만든 것 - space 입력하면 에러뜨는 문제

# --------------------------------------------------------

# dan = input("좋아하는 단 입력:")
# if dan:
#     if dan.isdecimal():
#         dan=int(dan)
#         for num in range(1,10):
#             print(f'{dan} * {num} = {dan *num}')
#     else:
#         print("숫자만 입력 가능합니다.")
# else:
#     print("입력된 데이터가 없습니다.")
#
# # 선생님 예시
#
# # --------------------------------------------------------
#
# if dan.decimal():
#     dan=int(dan)
#     for num in range(1,10):
#         print(f'{dan} * {num} = {dan * num}')
# else:
#     print("정확한 데이터가 아닙니다.")
  • 15:40

ex_str_format.py

# --------------------------------------------------------
# 출력되는 문자열 str에서 형식/양식/서식 설정
# - 데이터 출력되는 칸 수, 정렬방향(왼쪽, 오르쪽, 가운데), 빈 칸 수 채우기
# --------------------------------------------------------
count = 1
print(f'파일명 : img_{count}.jpg') # 파일명 : img_1.jpg

count = 21
print(f'파일명 : img_{count}.jpg') # 파일명 : img_21.jpg

count = 101
print(f'파일명 : img_{count}.jpg') # 파일명 : img_101.jpg
# ----------------------------------
count = 1
print(f'파일명 : img_{count:3}.jpg') # 파일명 : img_  1.jpg

count = 21
print(f'파일명 : img_{count:3}.jpg') # 파일명 : img_ 21.jpg

count = 101
print(f'파일명 : img_{count:3}.jpg') # 파일명 : img_101.jpg
# ----------------------------------
count = 1
print(f'파일명 : img_{count:<3}.jpg') # 파일명 : img_1  .jpg

count = 21
print(f'파일명 : img_{count:<3}.jpg') # 파일명 : img_21 .jpg

count = 101
print(f'파일명 : img_{count:<3}.jpg') # 파일명 : img_101.jpg
# ----------------------------------
count = 1
print(f'파일명 : img_{count:0>3}.jpg') # 파일명 : img_001.jpg
#                   채울값/정렬방향/칸 수
count = 21
print(f'파일명 : img_{count:0>3}.jpg') # 파일명 : img_021.jpg
#                    ㄴ 변수는 count만 가능 '3' 같은 경우 못 바꿈
count = 101
print(f'파일명 : img_{count:0>3}.jpg') # 파일명 : img_101.jpg

count = 1001
print(f'파일명 : img_{count:0>3}.jpg') # 파일명 : img_1001.jpg
#칸 수 초과하면 무시하고 그냥 실행 됨
# ----------------------------------
count = 1
print(f'파일명 : img_{count:0^3}.jpg') # 파일명 : img_010.jpg
#                        가운데 정렬
count = 21
print(f'파일명 : img_{count:0^3}.jpg') # 파일명 : img_210.jpg
#                                 가운데 정렬 시 왼쪽 우선인 듯?
count = 101
print(f'파일명 : img_{count:0^3}.jpg') # 파일명 : img_101.jpg

avg = 98.1234
print(f'학급 평균: {avg:4}점') # 칸 수 초과하므로 다 나옴

avg = 98.1234
print(f'학급 평균: {avg:.2}점') # 앞에서부터 2자리 즉 98인데 지수표기로 나옴
# 학급 평균: 9.8e+01점
avg = 98.1234
print(f'학급 평균: {avg:.4}점') # 앞에서부터 4자리
# 학급 평균: 98.12점

print('학급 평균: %-7.2f점' %avg)
#              %와 알파벳 사이에 숫자
#           + 왼쪽 정렬 / - 오르쪽 정렬
#           정수 위치의 숫자는 표시할 자리 수
#        소수 위치의 숫자는 표시할 수가 몇자리까지인지

ex_comprehension.py

# --------------------------------------------------------
# 컴프리헨션 (comprehension)
# - List Comprehension, Dict Domprehension, Set Comprehension
# - 튜플은 변경이 안 돼서 없음
# --------------------------------------------------------
# [실습1] aList의 원소 값을 제곱한 값을 원소로 가지는 bList를 생성하세요.

# 일반적 for 방식
aList = [1, 2, 3, 4]

bList = []

for a in aList:
    bList.append(a**2)

print(f'aList => {aList}')
print(f'bList => {bList}')

# 컴프리헨션 - list와 for문 합치기
cList = [ a**2 for a in aList ] # 대량 작업 시 메모리 처리, 속도 더 좋음
print(f'cList => {cList}')

# [실습2] aList의 원소 값 중에서 짝수인 데이터만 제곱한 값을 원소로 가지는 bList를 생성하세요.
aList = [1, 2, 3, 4]
bList = []
for a in aList:
    if not a%2:             # not False => True
        bList.append(a**2)

cList =[]
for a in aList:
    if a%2==0:              # 두 식 다 할 줄 알아야 함
        cList.append(a**2)

print(aList)
print(bList)
print(cList)

# 컴프리헨션 방식

cList2 = [ a**2 for a in aList if not a%2 ]
#          ---- -------------- -----------
#          (3)       (1)           (2)
# (2) 에서 True인 경우만 (3) 실행
# 연산자 우선순위는 아니고 이 순서가 문법임. 하나 외워두는 게 나을 듯..?
print(f'cList2 => {cList2}')

# --------------------------------------------------------
# 컴프리헨션 (comprehension)
# - List Comprehension, Dict Domprehension, Set Comprehension
# --------------------------------------------------------
# [실습1] aList의 원소 값을 제곱한 값을 원소로 가지는 bList를 생성하세요.

# 일반적 for 방식
aList = [1, 2, 3, 4]

bList2 = []

for a in aList:
    bList2.append(a**2)

print(f'aList => {aList}')
print(f'bList2 => {bList2}')

# 컴프리헨션 - list와 for문 합치기
cList = [ a**2 for a in aList ] # 대량 작업 시 메모리 처리, 속도 더 좋음
print(f'cList => {cList}')

# [실습3] aList의 원소 값 중에서 짝수인 데이터만 제곱, 홀수인 데이터는 그대로 저장한 bList를 생성하세요.
aList = [1, 2, 3, 4]
bList3 = []

for a in aList:
    if not a%2:
        bList3.append(a**2)
    else:
        bList3.append(a)
print(f'aList => {aList}\nbList3 => {bList3}')

# 컴프리헨션
cList3 = [ a**2 if not a%2 else a for a in aList ] # 이걸 외우자 ㅋㅋ
#          ---- ---------- ------ --------------
#          (3-T)     (2)    (3-F)      (1)
print(f'cList3 => {cList3}')

# 딕셔너리 컴프리헨션 (키값만 잘 잡아주고, {}로만 바꿔주면 됨)
cList3 = { a :a**2 if not a%2 else a for a in aList }
#          ---- ---------- ------ --------------
#          (3-T)     (2)    (3-F)      (1)
print(f'cList3 => {cList3}')
  • 16:40

ex_enumerate.py

# --------------------------------------------------------
# for 요소 in 시퀀스/반복가능한 객체:
# ==> for 인덱스 in range(len(변수)):
# ==> 내장함수 enumerate()
# - (번호, 요소) 묶음으로 반환 함!!
# --------------------------------------------------------
datas = ['Apple', 'Banana', 'Orange']

# 리스트 안에 요소/원소 데이터 추출
for data in datas:
    print(data)

# 리스트 안에 요소/원소 (인덱스,데이터) 추출
for data in enumerate(datas):
    print(data)  # (0, 'Apple') \n (1, 'Banana') \n (2, 'Orange')

for data in enumerate(datas, start=100):
    print(data)  # (100, 'Apple') \n (101, 'Banana') \n (102, 'Orange')

# --------------------------------------------------------

x = ['std01', 'std02', 'std03']
y = [100, 200, 300]

# for 방법
myDict = {}
for data in enumerate(x):
    myDict[data[1]] = y[data[0]]
print(myDict)

# 언패킹방식 방법2
myDict = {}
for idx, key in enumerate(x):
    myDict[key] = y[idx]
print(myDict)

# enumerate 방법
for data in enumerate(x):
    print(data, end=', ')   #(0, 'std01'), (1, 'std02'), (2, 'std03'),
  • 17:00

ex_for_for.py

# 1 ~ 10 출력 ---------------------------------------------------
# 방법 1
print(1)
print(2)
# ...
print(10)
print("")

# 방법 2 + 홀수 출력
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for n in nums:
    if n>0:
        print(n)
        if n%2:
            print("홀수")     #for문 빠져나올 때까지 수행

print("")

for a in range(1,11):
    print(a, end=' ' if a != 5 else '\n') # 1 2 3 4 5 \n 6 7 8 9 10
print("END")                #for문 빠져나오고 출력

max = 5
for a in range(1,max):
    print(f'{"*"*a :^{max}}')
for a in range(max,0,-1):
    print(f'{"*"*a :^{max}}')
  • 오늘의 질문 : ex_for_03.py
# zip으로 고친다면?
# [문제] --------------------------------------------------
# 문자열 여러 개와 실수 숫자 여러 개를 두 줄로 입력 받기 => input() 1개만 사용
# - 첫 번째 입력 받은 값은 Key
# - 두 번째 입력 받은 값은 Value
# - 딕셔너리로 저장해 주세요.
# --------------------------------------------------------
data = input("문자열과 실수 여러 개 입력\n단, 문자열과 실수 갯수 동일 (예: aa bb cc, 1.1 2.2 3.3)")

# 입력 형식이 맞을 경우만 딕셔너리에 저장
# - (1) 입력 " , " 문자열 안에 ','가 존재해야 함
# - (2) 문자열과 실수 갯수가 동일해야 함
if ',' in data:
    dataList = data.split(',')
    key = dataList[0].split()
    value = dataList[1].split() #여기서 float 형변환은 list 값이기 때문에 안 됨
#   key, value = dataList[0].split(), dataList[1].split() 도 언패킹으로 가능
    dataDict = {}
    if len(key) == len(value):
        # for num in range(len(key)):
        #     dataDict[key[num]] = float(value[num])
        dataDict2 = dict(zip(key,float(value)))
        print(dataDict2)
    else:
        print("정확한 형식이 아닙니다.")
else:
    print("정확한 형식이 아닙니다.")
  • dataDict2 부분이 이해가 안됨 - zip 다시 이해 완료
num = int(input("원하는 구구단 단 수를 입력하세요(예: 3):"))

if num:
    if 2<=num<=9:
        for multi in range(1,10):
            print(f'{num} * {multi} =  {num * multi}')
    else:
        print("올바른 단 수를 입력해주세요.")
else:
    print("올바른 단 수를 입력해주세요.")

# 내가 만든 것 - space 입력하면 에러뜨는 문제
  • space 입력했을 때 에러발생
  • space도 num이 True기 때문에 문제 발생하는 것 - 이해 완료

오늘의 공부

  • map을 더 공부하자.
  • 함수가 여러개 섞일 때 들여쓰기 주의하기
profile
갈림길인 줄 알았는데 알고보니 직진

0개의 댓글