728x90
반응형
지난 시간 리뷰 문제 
# REVIEW 1 1부터 100까지의 사이 출력한 뒤 정수 N의 배수만 출력하도록 만들기
num = int(input("정수 입력하기: "))
for x in range (101):
    if x % num == 0:
        print(x)
# REVIEW 2 정수를 받고, 구구단 (x1 ~ x9) 출력하기
num1= int(input("정수 입력:"))
for i in range (1,10):
    print(f"{num1} * {i} = {num1 * i}")   # 5*1=5  5*2=10
DAY 9
BREAK: FOR, WHILE 에 반복을 끊는 역할

CONTINUE: JUMP 같은 역할

(break 예시)

for i in range (100):
    if i==50:
        break
    else:
        print(i)        # 0 1 2 3... 49

(continue 예시)

for i in range (100):
    if i==50:
        continue
    else:
        print(i)   # 0 1 2 3 ... 49 51 .. 99
Day 9
While 문 : 파이썬에서 while 문은 조건이 True인 동안 반복해서 코드 블록을 실행하는 데 사용 됨. while 루프는 주어진 조건이 False가 될 때까지 계속 실행되며, 조건이 처음부터 False이면 루프 내부의 코드는 한 번도 실행되지 않음.

While 은 유저가 끝을 결정 짓는 상황, 
For 는 프로그래머가 끝을 결정 짓는 상황으로 이해할 수 있음!

(while문 기본 구조 1)

a=1
while a < 10:
    print ('아메리카노')
    a=a+1     # a += 1
    #결과: 아메리카노 9번 써짐

(while문 기본 구조 2)

while True:
    print("너가 숫자 1을 넣어야 탈출 가능")
    num=int(input("숫자 입력:"))
    if num == 1 :
        break

(while문의 응용 - 커피 프로그램 개발-)

coffeeList=[]

while True:
    print("-메가커피 프로그램-")
    print("1. 커피 등록하기")
    print("2. 커피 메뉴보기")
    print("3. 시스템 종료")
    codeNumber = int(input("번호 입력: "))
    if codeNumber==1:
        print("커피 등록 시스템")
        coffeeName=input("커피 이름 입력")
        coffeeList.append(coffeeName)
        print("등록 완료!")
    elif codeNumber ==2:
        if len(coffeeList) == 0:
            print("커피 메뉴가 없어요ㅠ.ㅠ")
        else: print(coffeeList)
    elif codeNumber ==3:
        print("이용해 주셔서 감사합니다.")
        break
    else:
        print("숫자를 다시 입력하세요")
Day 9 
For 문 컴프리헨젼
파이썬에서의 리스트 컴프리헨션 (List Comprehension)은 for 문을 사용하여 리스트를 생성하는
간결하고 효율적인 방법임.

기본적인 for 문 대신에 리스트 컴프리헨션을 사용하면 코드를 더 짧고 읽기 쉽게 만들 수 있음

(기존 FOR문)

a = []
for i in range (1001):
    a.append(i)
    print(a)

(FOR_COMPREHENSION 예시)

a = [i for i in range (1001)]
print(a)        #[1, 2, 3.... , 1000]
b = [i for i in range (101)]
print(b)        #[1,2,3...,100]
c = [i for i in range (1,501)]
print(c)        #[1,2,3...,500]
d = [i for i in "megastudy"]
print(d)          # ['m','e','g','a',..'y']
e = [i*2 for i in range (1,101)]
print(d)         # [2,4,6,8...200]
#1. 1~10을 각각 제곱한 수의 리스트
f = [i**2 for in range (1,11)]
print(f)
#[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
#2. 1~10에 각각 5를 더한 수의 리스트
g= [i+5 for i in range (1,11)]
print(g)
#[6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
조건부 컴프리헨션 (Conditional Comprehension)
컴프리헨션 내에 if-else 조건문을 사용하여 특정 조건에 따라 다른 값들을 생성
구조: [값1 if 조건 else 값2 for 변수 in 반복가능객체]

(예시 1) IF가 뒤에 있을 때에는, FILTER 역할 수행!)

fruits =['apple','strawberry','mango','orange','melon']
for i in fruits :
    print(i)   # apple strawberry mango ...
#예시) alphabet a 가 있는 애들만 찾기
a = [i for i in fruits if i.count('a')>0]
print(a)  #['apple', 'strawberry', 'mango', 'orange']
#예시) alphabet r 이 하나만 있는 애들만 찾기
b = [i for i in fruits if i.count('r')==1]
print(b)  #['orange']
#글자 개수가 6글자 이상만 찾기
c = [i for i in fruits if len(i) >= 6]
print(c)  #['strawberry', 'orange']

(예시 2) IF - ELSE 가 있을때는 MAP 변환/치환 역할 수행!

d = [':>' if i%2 ==0 else i for i in range (1,101)]
print(d)  #[1, ':>', 3, ':>', 5, ':>', 7, ':>', 9, ':>',...:>(100)]

(활용 1) 유저에게 n을 입력 받고, 1~100까지의 리스트 출력을 하는데
n  의 배수만 @를 표현해주고 나머지는 숫자로 표현

n=int(input("정수 입력: "))
e = ['@' if i%n==0 else i for i in range (1,101)]
print (e)
# 5 넣으면 [1, 2, 3, 4, '@', 6, 7, 8, 9, '@' ... '@]

(활용 2) fruits = ['apple','strawberry','mango','orange','melon']
fruits 에서 5글자 이하이면 대문자로 바꿔서 출력하고
아니면 #로 출력하는 리스트 만들기

f = [i.upper() if len(i)<=5 else '#' for i in fruits]
print (f) #['APPLE', '#', 'MANGO', '#', 'MELON']
중첩 루프 컴프리헨션 (Nested Loop Comprehension)
컴프리헨션 내에 두 개 이상의 반복문을 중첩하여 사용 가능. 이는 여러 개의 리스트나 다른 반복 가능한 객체들 간의 조합을 생성하는 데 유용
구조: [값 for 변수1 in 반복가능객체1 for 변수2 in 반복가능객체2]
h=[i*j for i in range (1,4) for j in range (1,4)]
#i:1일때 j: 1,2,3
#i=2일때 j: 1,2,3
#i=3일때 j: 1,2,3
print(h)
#결과: [1, 2, 3, 2, 4, 6, 3, 6, 9]

g=[i+j for i in ["apple","banana"] for j in ["pie","tanghuru"]]
print(g)
# 결과: ['applepie', 'appletanghuru', 'bananapie', 'bananatanghuru']

 

반응형
728x90
반응형
지난 시간 리뷰문제

# (REVIEW 1) 1개의 각도를 입력받아, 예각 (0-90), 직각 (90), 평각 (180), 둔각 (90 초과 ~ 180 미만) 으로 분류

angle= int(input("각도 입력하세요: "))
if  0 < angle <90:
    print("예각입니다")
elif   angle == 90:
    print ("직각입니다")
elif    angle == 180:
    print ("평각입니다")
elif 90 < angle < 180:
    print ("둔각입니다")
else: print ("180도 초과입니다")

# (REVIEW 2) 
# # 테마파크 입장권과 놀이기구 이용 패키지
# # 입장권 종류 1~3과 나이를 입력 받고, 패키치에 따라 가격 계산
# # 1. 일반 입장권 50000
# # 2. 프리미엄 입장권 75000
# # 3. VIP 입장권 100000
# # 나이에 따른 할인율
# # 12세 미만 50% 할인
# # 65세 이상 30% 할인

park = {
    1: {
        'name': '일반 입장권',
        'price': 50000
    },
    2: {
        'name': '프리미엄 입장권',
        'price':75000
    },
    3: {
        'name':'VIP 입장권',
        'price':100000
    }
}
name_choice = int(input("파크 고르세요! (1 일반 2 프리미엄 3 VIP) :  "))
age = int(input("나이 :"))
if age <= 12:
    print(f"총 이용 요금은 {park[name_choice]['price']*.5} 입니다")
elif age >= 65:
    print(f"총 이용 요금은 {park[name_choice]['price']*.3} 입니다")
else:
    print(f"총 이용 요금은 {park[name_choice]['price'] * 1} 입니다")

# (REVIEW 3) 0~10,000까지의 랜덤을 숫자를 담고 있는 6개의 정수를 담고 있는 리스트 출력

import random

num= []
for x in range (6):                          #6개 추출
    number=random.randint(0,10001)     #0~10000까지를 랜덤 추출
    num.append(number)
    num.sort()                           #오름차순 정렬
    print(num)

 

본 수업

 # (for 기본) for x in "단어" 입력시 알파벳별 나열된다

for x in "icecream":
    print(x)           # i c e c r e a m

# (for 활용) 텍스트를 입력하고, 소문자를 대문자로, 대문자를 소문자로 만들기

# 유저에게 InpUT 받고 -> iNPut 출력
user = input("단어 입력: ")
word = ''
for x in user:
    if x.isupper():
        word = word + x.lower()   # ''+'i' => i
    else:
        word = word + x.upper()   # i + N => iN
print(word)

# (for 활용) 단어 내에 'a' 'e' 가 포함되어 있으면, 없애기 

user = input ("단어 입력: ")
output = ''
#apple
for x in user:
    if x == 'a' or x == 'e':
        output = output
    else:
        output = output + x
        print(output)
#

# (for 활용) 단어 내에 'a' 'e' 'i' 'o' 'u' 가 포함되어 있으면, 없애기 ( pass )

user = input ("단어 입력: ")
output = ''
#apple
for x in user:
    if x in 'aeiou':
        pass
    else:
        output += x
        print(output)         #ppl

# (for 활용) 리스트 내에 있는 단어 수를 가져다가 리스트로 만들기

list=[]
for x in ['사과', '바나나','파인애플']:
    print(len(x))                  #  2   3   4
    list.append(len(x))
print(list)                        # [2,3,4]

 

# (for 활용) 짝수 리스트, 홀수 리스트 만들기

even=[]
odd=[]
evenSum=0
for x in [1,2,3,4,5,6,7,8,9,10]:
    if x % 2 == 0:
        even.append(x)       
    else: odd.append(x)
print(even)         # [2,4,6,8,10]
print(odd)          # [1,3,5,7,9]

# (for 활용) 0 ~ 10,000 까지의 범위에서 100개의 정수 리스트를 받고, 리스트에서 홀수면 'odd' 짝수면 'even'으로 변경하기

import random
List=[]

for x in range (100):
    List.append(random.randint(0,10001))
    print(List)
List.sort()
print(List)

evenoddList= []
for x in List:
    if x % 2 ==1:
        evenoddList.append('odd')
    else:
        evenoddList.append('even')
print(List)             # [30, 450, 523, 534, 627, 735, 971...
print(evenoddList)      # ['even', 'even', 'odd', 'even', 'odd'..

 

for 변수 in (리스트, 문자열 ... ) [ 반복 가능한 객체 ]

for 변수 in enumerate ( )
enumerate( ) 함수는 리스트, 문자열 등을 순회하면서, 각 요소의 인덱스와 값을 동시에 얻을 수 있게 해줌

(enumerate 함수 예시)

device=['아이폰','갤럭시','맥북']
for x,y in enumerate(device):   #enumerate는 요소와 순서를 둘다 알려줌
    print(f"{x}.{y}")  #0.아이폰  #1. 갤럭시 #2. 맥북

 

반응형
728x90
반응형

지난해 Journal of Urban Economics에 키워드 'Housing Supply' 'Housing Affordability' 'Filtering'으로 발표도니 논문이다.

이 연구에서는 헬싱키 중심도시를 배경으로 대도심권에 위치한 신규 시장가격*의 주택 공급 (market-rate housing supply)이 도시 전체에 주는 영향을 분석한다.

(연구 데이터) 지리적 코딩이 들어간 (geo-coded register data) 2009-2019년 10년간 핀란드 전역의 주거민 데이터를 활용해 나이, 성별, 소득수준, 교육수준, 자녀수 등을 파악하고, moving chain을 구성하는데 가장 중요한 년도별 주거민의 주소지 또한 포함된다.

(분석기법) 기준 시점 t의 거주지와 이전년도 (t-1) 주거지를 파악하는 방법으로 6번에 걸쳐 주거이동 패턴을 그린다.

(연구 결과) Harjunen과 Saarimaa는 신규 시장가격의 주택이 보통 상대적으로 높은 소득 수준의 가구로부터 소비되지만, moving chain 분석 결과에 따르면, 결국 중위-하위 소득의 가구들에게도 긍정적 영향을 미친다고 주장한다. 이는 기존 Been et al. (2019)가 주장한 '신규 시장가격의 주택 공급이 고소득층에게만 혜택을 가져다준다'는 주장을 반박하며, Mast (2021) 과 함께 신규 시장가격의 주택 공급의 이점에 힘을 보태고 있다.

JUE-Insight--City-wide-effects-of-new-housing-supply-_2023_Journal-of-Urban-.pdf
0.88MB

https://www.sciencedirect.com/science/article/pii/S0094119022001048

Been, V., Ellen, I.G., O’Regan, K., 2019. Supply skepticism: housing supply and affordabil- ity. Hous. Policy Debate 29 (1), 25–40.

Mast, E., 2021. JUE insight: the effect of new market-rate housing construction on the low- income housing market. J. Urban Econ., 103383 doi:10.1016/j.jue.2021.103383.

Glaeser, E., Gyourko, J., 2018. The economic implications of housing supply. J. Econ. Perspect. 32 (1), 3–30.

Glaeser, E.L., Ward, B.A., 2009. The causes and consequences of land use regulation: evi- dence from Greater Boston. J. Urban Econ. 65 (3), 265–278.

반응형
728x90
반응형
지난 시간 리뷰
If문을 응용한 리뷰 문제 4가지

#1 숫자를 입력받고, 홀수 또는 짝수인지 알려주는 프로그램

 

num=int(input("숫자 입력: "))
print(num % 2)
if  num % 2 == 1:
    print ("홀수 입니다")
else: print("짝수 입니다")
#2 문자 한개를 입력하고, 알파벳이면 '알파벳입니다', 아니면 '알파벳이 아닙니다'  알려주는 프로그램
if문 & <name.isalpha( ) 활용>
text=(input("문자 입력: "))
print(text.isalpha())
if text.isalpha() == True:         #== True 부분 생략 가능!
    print ("알파벳 입니다")
else:
    print ("알파벳이 아니에요")
#3 비밀번호 설정 프로그램 
- 최소 10자 이상, 
- 영문과 숫자의 조합 필요,
- 특수문자 하나 이상 포함!

pw=(input("비밀번호 입력: "))
if len(pw) < 10:
    print ("최소 10글자 설정해주세요")
elif pw.isalnum() == True:    # pw.isalnum() 은 알파벳/ 혹은 숫자인지 알려준다
    print ("영어와 숫자를 꼭 포함해 주세요")
elif ('!' in pw or '@' in pw or '#' in pw or '$' in pw) == False:
    print("특수문자를 포함해주세요")
else:
    print ("비밀번호 설정 완료!")

#4 버스 요금 계산기
- 사용자로부터 버스 노선의 종류를 나타내는 정수와 승객의 나이를 입력받고, 노선별 요금 알려주기
- 노선별 요금: 1. 시내버스 (1200) 2. 광역버스 (2000) 3. 마을버스 (1000)
- 연령별 할인율: 1. 7세 이하 어린이 (무료) 2. 8-19세 청소년 (30%) 3. 65세이상 노인 (무료)

bus={
    1: {
        'name': '시내버스',
        'price': 1200,
    },
    2: {
        'name': '광역버스',
        'price': 2000,
    },
    3: {
        'name': '마을버스',
        'price': 1000,
    },
}

bus_choice=int(input(f"버스를 선택하세요!: "))
age = int(input("나이를 입력하세요: "))

if age <= 7 or 65 <= age:
    print ("무료 입니다!")
elif 8 <= age and age <=19:
    print (f"{bus[bus_choice]['name']} 노선 요금은 {bus[bus_choice]['price']*0.7} 입니다")
else:
    print(f"{bus[bus_choice]['name']} 노선 요금은 {bus[bus_choice]['price']} 입니다")

 

Random
파이썬에서 random 모듈은 난수를 생성하는 데 사용되며, 다양한 종류의 난수 생성 함수를 제공함. 이 모듈은 게임, 시뮬레이션, 테스팅, 보안 및 기타 많은 분야에서 활용 됨. 다음과 같은 주요 함수들이 포함 됨:
1. randint(a,b): a와 b 사이의 랜덤한 정수를 반환
2. random(): 0과 1 사이의 랜덤한 실수를 반환
3. choice(seq): 주어진 시퀀스 (리스트, 튜플 등)에서 랜덤한 요소를 반환
4. shuffle(x [,random]): 시퀀스 요소들을 무작위로 섞음 
#random test

import random

print(random.randint(0,100))          #randint는 랜덤하게 정수 뽑기임(0부터 100까지)
print(random.random())                      #0~1 사이의 실수 뽑기임

fruits = ['사과','망고','바나나','멜론']
print(random.choice(fruits))                #fruits에서 랜덤 뽑기
random.shuffle(fruits)                            #리스트를 넣고 shuffle하기
print(fruits)

 

반복문 For 문 
반복문은 프로그램에서 같은 코드 도는 일련의 코드를 반복 실행하는 구조. 
반복문을 사용하면, 동일한 작업을 여러번 수행하도록 컴퓨터에 지시할 수 있음
for 변수 in range (n)
Range()함수
1. 한 매개변수를 가질 때 (range(stop#))
- 0부터 stop-1 까지의 숫자를 생성
- 예) range (5)는 0,1,2,3,4를 생성
2. 두 매개변수를 가질 때 (range(start,stop))
- start부터 stop-1까지의 숫자를 생성
- 예) range (2,5)는 2,3,4를 생성
3. 세 매개변수를 가질 때 (range(start,stop,step))
- start부터 시작해서 stop-1까지, step만큼의 간격으로 숫자를 생성
- 예) range (2,10,2)는 2,4,6,8을 생성

(활용예시)

# #유저에게 n번째까지의 정수를 받고, m 의 정수를 받으면
# # 0~n 까지의 m 의 공배수의 총합을 나타내는 프로그램
num=int(input("n번째까지의 정수 입력: "))
mul=int(input("m의 공배수: "))
sum=0
for x in range (num+1):
    if x % mul ==0:
        sum += x
        print(f"총합: {sum}")

#for 함수 시작지점 다르게

for x in range (2,10):          #0부터 말고, 2부터! 9까지!
    print(x)

(응용예시)

#0~10,000까지의 랜덤을 숫자를 담고 있는 6개의 정수를 담고 있는 리스트 출력
import random
print(random.randint(0,10000))
numbers= []
for x in range (0,10):
    number=random.randint(1,10001)
    numbers.append(number)
    print(numbers)
반응형
728x90
반응형
Dict를 활용한 응용예시
# #2 영화 예매 프로그램 (dict)활용
# #영화 종류를 나타내는 정수 1~3과 나이 입력, 영화와 가격은 다음과 같이 설정. 총 계산 출력
# #1: 액션영화 10,000원
# #2: 로맨틱 코미디 8,000원
# #3: 공포영화 9,000원
# #팝콘종류
# #1: 치즈팝콘 6,500원
# #2: 캬라멜 팝콘 5,000원
# #3: 일반 팝콘 5,000원

#[class]
cgv={
    'movie':{
        'movieList': ['1.액션영화','2.로맨틱코미디','3.공포영화'],
        'moviePrice':[10000,8000,9000]
    },
    'popcorn':{
        'popcornList': ['1.치즈팝콘','2.캬라멜팝콘','3.일반팝콘'],
        'popcornPrice':[6000,5000,5000]
    }
}

movie_choice=int(input(f"영화를 고르세요 [{cgv['movie']['movieList']}: "))-1
popcorn_choice=int(input(f"팝콘을 고르세요 [{cgv['popcorn']['popcornList']}: "))-1

print(f"고르신 영화는 {cgv['movie']['movieList'][movie_choice]}, 선택한 팝콘은 {cgv['popcorn']['popcornList'][popcorn_choice]}이며, "
      f"총 금액은 {cgv['movie']['moviePrice'][movie_choice]+cgv['popcorn']['popcornPrice'][popcorn_choice]}원 입니다")

 

Dict의 주요 기능
1. get (key, default=None)
 - 특정 키에 해당하는 값을 반환
 - 키가 사전에 없는 경우, default 값이 반환됨 (기본값은 None)
2. Keys()
 - 사전의 모든 키를 포함하는 뷰를 반환
3. values()
 - 사전의 모든 값을 포함하는 뷰를 반환
4. items()
 - 사전의 모든 키-값 쌍을 튜플로 포함하는 뷰를 반환
megastudy = {
    'python': [1,2,3],
    'java':[1,3,5],
    'c':[2,4,6]
}

#python의 날짜를 가져오는 방법
#1. megastudy['python']       <-연산자
#2. megastudy.get('python')   <-기능
#3. megastudy.get('javascript','수업 없음')  <- 없으면 '수업 없음' 으로 대체


print(megastudy.keys())    #dict_keys(['python', 'java', 'c'])
print(list(megastudy.keys()))    #['python', 'java', 'c']
print(list(megastudy.values()))  #[[1, 2, 3], [1, 3, 5], [2, 4, 6]]
print(list(megastudy.items()))   #[('python', [1, 2, 3]), ('java', [1, 3, 5]), ('c', [2, 4, 6])]

 

 

세트 (Set) : 중복을 허용하지 않는 순서가 없는 요소들의 컬렉션,
세트는 수학에서의 집합과 유사하며, 주로 데이터의 중복을 제거하거나 여러 세트 간의 관계 (교집합, 합집합 등)을 다룰 때 유용함 

 

세트의 기본 
 - 세트 생성: setA = {1,2,3,'hello'}
 - 빈세트 생성: emptysetA = set()    *{}는 빈 딕셔너리를 만듬
 - 리스트나 튜플 등에서 세트 생성: setA = set([1,2,3,3])   #결과: {1,2,3}

(set 예시)

#set (집합) 중복 안됨
a = {1,2,3,1,2,3,1,2,3}
print(a)    #{1,2,3}
b = set([1,2,3,1,2,3,4])   #set화 시키기
print(b)    #{1,2,3,4}

 

세트의 주요 메소드
1. 추가와 업데이트
  - add: 세트에 요소 추가
  - update: 다른 세트의 요소를 현재 세트에 추가
2. 제거
  - discard: 지정된 값을 가진 요소 제거
  - clear: 세트의 모든 요소를 제거
b = set([1,2,3,1,2,3,4])
b.add(1)
b.add(5)
b.discard(3)
print(b) #{1, 2, 4, 5}
b.clear()
print(b)  #set()
a = {5,6,7}
3. 세트의 기능 
- union (합집합)
예) my_set.union({7,8})
- intersection (교집합)
예) my_set.intersection({1,2,9})
- difference (차집합)
예) my_set.difference({1,2})
- symmetric_difference (대칭 차집합) (교집합을 뺀 애들)
예) my_set.symmetric_difference({1,2,7})

(if 예시)

num=int(input("정수 입력:"))
if num > 0 :
    print('양의 정수 입니다.')
elif num == 0:
    print('0입니다')
else:
    print('0 또는 음의 정수 입니다.')

(다중 elif 예시 1)

#유저에게 영어점수 입력 받고,
#100~90 A 입니다
#90~80 B 입니다
#80~70 C 입니다
#70 미만이면 재수강입니다

grade=int(input("영어점수는: "))
if grade > 90 :
    print ('A 입니다')
elif grade > 80 :
    print ('B 입니다')
elif grade > 70:
    print ('C 입니다')
else:
    print (' 재수강 입니다')

 

(파이썬 다중 if 예시 2)

#유저에게 비밀번호 설정 입력받고,
# 8글자보다 작으면 비밀번호가 8글자 이하입니다!
#만약에 비밀번호에 !없으면 특수문자가 없습니다.
# 다 통과 되면 비밀번호 완료!

pw=input("비밀번호 입력:")
print(pw.find("!"))

if len(pw) < 8:
    print ("비밀번호가 8글자 이하입니다!")
elif "!" not in pw:
    print ("특수문자가 없습니다")
else: print ('비밀번호 통과!')

 

(파이썬 다중 if 예시 3)

#유저에게 정수를 입력받고
#양의 홀수인지, 양의 짝수, 0, 음의 홀수, 음의 짝수 인지 알려주는 프로그램 만들기


if num > 0:
    if num % 2 != 0:
        print("양의 홀수")
    else:
        print("양의 짝수")
elif num == 0:
    print("0 입니다.")
else:
    if num % 2 != 0:
        print("음의 홀수")
    else:
        print("음의 짝수")
반응형
728x90
반응형
#일본여행 계획 프로그램
#유저에게 쉼표 시준으로 할 계획을 입력받고, 할일을 나타내는 프로그램
#일본여행 계획: 초밥먹기,돈키호테 가기,온천가기
#결과: 일본여행 계획표는 [초밥먹기, 돈키호테 가기, 온천가기] 입니다!
plan=str(input("일본여행 계획:"))
planList=plan.split(",")
print(f"일본여행 계획표는 {planList} 입니다 !")
split과 list를 활용하기

#스타벅스 메뉴 선택
#입력 커피 메뉴 [1. 아메리카노: 4000 2. 라떼: 5000 바닐라라떼: 5500]
#케익메뉴 [1. 치즈케익: 5000 2. 딸기케익: 6000 3. 우유케익: 5500]
#결과 고르신 커피와 케익의 값은 총 ~ 입니다.

choice_coffee=int(input("커피 메뉴: [1. 아메리카노 2. 라떼 3. 바닐라라떼]"))-1
choice_cake=int(input("케익 메뉴: [1. 치즈케익 2. 딸기케익 3. 우유케익]"))-1
coffee=[4000,5000,5500]
cake=[5000,6000,5500]

print(f"고르신 커피와 케익의 값은 총 {coffee[choice_coffee]+cake[choice_cake]}")

 

Python의 리스트 연산자들:
1. 덧셈 (+): 두 개의 리스트를 연결
2. 곱셈 (*): 리스트를 주어진 횟수만큼 반복
3. in 연산자: 특정 요소가 리스트에 있는지 확인. 요소가 있으면 True, 없으면 False를 반환
4. not in 연산자: 특정 요소가 리스트에 없는지 확인. 요소가 없으면 True, 있으면 False를 반환
5. 슬라이싱 ([:]): 리스트의 일부분을 잘라내어 새로운 리스트를 생성
#* 연산자
#*: int * int (사칙연산)
#*: str * str (str을 n번 반복)
#*: list * list (list를 n번 반복)
coffee=['아메리카노','바닐라라떼']
cookie=['화이트쿠키','오레오쿠키','녹차쿠키']
menu=coffee+cookie
print(menu) #['아메리카노', '바닐라라떼', '화이트쿠키', '오레오쿠키', '녹차쿠키']

#in 연산자: boolean 타입변환
print('디카페인' in menu)  #False
print('아메리카노' in menu) #True

#[:] 슬라이싱 연산자
new_menu=menu[0:3] #menu의 0부터 3개를 포함한다
print(new_menu) #['아메리카노', '바닐라라떼', '화이트쿠키']
리스트의 활용과 기능은 아래와 같이 다양하다.
#리스트 기능
#1. 리스트의 길이 확인: len()
store=['cu','gs','seven','ministop']
print(len(store))
#2. 리스트 추가: append()
store.append('emart24')
print(store) #['cu', 'gs', 'seven', 'ministop', 'emart24']
#3. 리스트 추가[몇번째]: insert(몇번째, 무엇을)
store.insert(1,'familymart')
print(store) # ['cu', 'familymart', 'gs', 'seven', 'ministop', 'emart24']
#4. 리스트 제거: remove(무엇을)
store.remove('cu')
print(store)   #['familymart', 'gs', 'seven', 'ministop', 'emart24']
#5. 리스트에서 해당 아이템 위치 찾기: index (무엇을)
print(store.index('ministop'))   #3 (0 - 1 - 2 - 3)
#6. 리스트에서 해당 아이템 몇개 세기: count (무엇을)
print(store.count('emart24'))    #1개
#7. 리스트를 추가: extend (리스트) +[같은 역할]
NewStore=['storyway','buytheway']
store.extend(NewStore)
print(store)    #['familymart', 'gs', 'seven', 'ministop', 'emart24', 'storyway', 'buytheway']
#8. 리스트 정렬: sort()
store.sort()   #알파벳순 정렬
print(store)   # ['buytheway', 'emart24', 'familymart', 'gs', 'ministop', 'seven', 'storyway']
store.sort(reverse=True)   #역알파벳순 정렬
print(store)               #['storyway', 'seven', 'ministop', 'gs', 'familymart', 'emart24', 'buytheway']

 

 

리스트 함수들
1. len(list): 리스트의 길이를 반환
2. list.append(element): 리스트의 끝에 새로운 요소 추가
3. list.insert(index,element): 지정된 인덱스에 요소를 삽입
4. list.remove(element): 리스트에서 첫번째로 나타나는 특정 요소 제거
5. list.index(element): 특정 요소의 인덱스를 반환
6. list.count(element): 리스트에서 특정 요소가 나타나는 횟수를 반환
7. list.sort(): 리스트의 요소들을 정렬
8. list.extend(iterable): 리스트의 끝에 iterable (예:다른 리스트)의 모든 요소를 추가

mbti = {
    'e':'외향적',
    'i':'내향적',
    's':'감각적',
    'n':'직관적',
    'f':'감성적',
    't':'이성적',
    'j':'계획적',
    'p':'즉흥적'}
print(mbti['e'])

#퀴즈 유저에게 mbti 입력받고, 당신은 ~~이고 ~~이고 ~~ 이고 ~~시네요!
user_mbti=input("당신의 mbti는?")
user_mbti1=list(user_mbti)
print(user_mbti1) #['e', 'n', 't', 'p']
print(f"당신은 {mbti[user_mbti1[0]]}이고 {mbti[user_mbti1[1]]}, {mbti[user_mbti1[2]]}, {mbti[user_mbti1[3]]} 이시군요! ")

#당신은 외향적이고 직관적, 이성적, 즉흥적 이시군요! 

 

딕셔너리 (Dictionary)
딕셔너리는 Key와 Value의 쌍으로 이루어진 자료구조임.
Key를 통해 빠르게 Value를 찾을 수 있으며, Key는 각각 고유해야 함. 
마치 실제 사전처럼, Key 와 그에 해당하는 Value의 쌍으로 데이터를 저장.
딕셔너리의 기본
- 사전 생성: my dict = {'name':'alice','age':25}
- 빈 사전 생성: empty_dict = {}
instagram={
    '신촌맛집':['싸다김밥','신촌순댓국','서브웨이'],
    '서강대맛집':{
        '서강대학식':['정식','오늘의치돈','육회덮밥']
    }
}

print(instagram["신촌맛집"])   #['싸다김밥','신촌순댓국','서브웨이']
print(instagram["신촌맛집"][2])  #서브웨이
print(instagram["서강대맛집"]["서강대학식"][1]) #오늘의치돈

 

반응형
728x90
반응형
서울시 아파트 매매 실거래가는 2016년부터 본격 상승하여 2021년 5월부터 2022년 4월 사이 최고가를 기록한 후 조금씩 하락하고 있는 추세이다. 그 중에서도 서울 도심권이 가장 먼저 하락을 시작하였으며, 나머지 지역은 비슷하게 하락을 이어가고 있다. 
서울시와 경기도의 시가총액이 전국 부동산의 절반 이상을 차지하고, 아파트 거주 가구 비중이 증가하고 있는 상황에서 서울시 아파트 가격 버블 추정의 필요성이 제기되고 있다. 이에 지난해 10월 서울연구원 - 경제사회연구실에서 "서울시 자산시장 분석과 아파트 가격 버블 추정"의 제목으로 한 연구보고서를 공개했다.

시도별 자산, 부채, 소득 추이 (2018-2022)를 나타낸 표이다. 
  - 서울시 총 자산의 연평균 증감율은 7.7%이며, 그 중에서 금융자산이 2.5%, 실물자산이 9.4%로 실물자산의 연평균 증감율이 높음
  - 서울시 순자산액 연평균  증감율은 8.3%이며, 부채는 4.4%로 부채 대비 순자산액의 증감율이 높음 

시도별 자산, 부채, 소득 비중 추이 (2018-2022)를 나타낸 표이다.  
  - 서울시 실물자산의 비중은 2018-2022 매해 증가하면서, 2022년에는 78.4%에 달함
  - 서울시 금융자산의 비중은 2019-2022 매해 감소하면서, 2022년에는 21.6%에 달함
  - 서울시 부채비중은 2018-2022 감소세를 그리며, 2022년에는 14.7%로 축소됨
  - 서울시 순자산액 비중은 2018-2022 증가세를 그리며, 2022년에는 85.3%로 증가함

 

이 연구보고서에서 설명하고 있는 서울시 아파트 가격 버블 추정 분석 결과는 아래와 같이 정리된다. 

전세 · 매매가격 비율로 본 버블
- 2019년부터 생성, 이후 3년간 유지되던 버블 상태는 2022년 들어 조금씩 빠지는 추세임
상태공간모형 추정을 통한 버블
- 서울시 (2021.8) 15.02%, 동남권 (2020.11) 13.09%, 도심권 (2021.4) 13.7%, 서남권 (2021.7) 15.71% 순으로 최대 증가율에 도달했으며, 최댓값 도달 후 빠르게 하락하는 추세로 전환됨
CAPM 모형 시뮬레이션으로 산출한 버블
- 12년간 서울 지역 전체 아파트 가격의 버블 수준은 평균 매월 1.8975%, 누적 159.2509%였으며, 월별 생성된 최대 버블값은 16.6914%, 최솟값 -5.1861%로 버블이 생성되고 중반 이후부터는 전반적으로 정체수준을 유지하고 있음

서울시 자산시장 분석과 아파트 가격 버블 추정.pdf
4.25MB

반응형
728x90
반응형

문자열 함수

- len(): 문자열의 길이를 반환

- str.upper(): 문자열의 모든 문자를 대문자로 변환

- str.lower(): 문자열의 모든 문자를 소문자로 변환

- str.capitalize(): 문자열의 첫문자를 대문자로, 나머지를 소문자로

- str.count('item'): 문자열의 item 의 개수를 변환. 없으면 -1

- str.strip(): 문자열의 앞과 뒤에서 공백과 개행 문자 제거

- str.find(sub): 부분문자열 sub이 시작되는 첫번째 인덱스를 반환. 없으면 -1

- str.replace(old, new): 문자열 내 old를 new로 대체

- str.split(sep): sep를 구분자로 사용하여 문자열을 나누고, 나누어진 부분들을 리스트로 반환

- str.join(iterable): iterable의 각 요소 사이에 문자열을 삽입하여 결합

# print(), input()[str], variable
# int(), str(), float(), bool(), list()
# datatype [int, float, str, list, bool, ...]
# operator 산술 + - * / // % **, 논리 and or not
# 비교 < > <= >= != ==
# 까지 배움!

 

len(): 길이를 알려주는 기능

print(len(coffee)) #9
print(coffee.upper()) #AMERICANO
print(coffee.lower()) #americano
print(coffee.capitalize()) #Americano
print(coffee.strip()) #빈공간 없애기
print(coffee.find('c')) #몇번째에 c가 있니? 5, 없으면 -1
print(coffee.replace('cano','can')) #왼쪽에서 오른쪽으로 바꾸기 american
print(coffee.count(str(f))) #f가 몇개 있는지 카운트
print(coffee.count('f)) #f가 몇개 있는지 카운트

 

# #퀴즈 1: 대소문자 변환 프로그램
# # 소문자로 된 문자열을 받은 후 모두 대문자로 변환하기
 text=str(input("문자 입력:"))
 print(text.upper())

 

#퀴즈 2: Charlie Puth의 노래 "left and right"에서 "left" 와 "right"가 각각 몇번 나오는지를 세는 프로그램 만들기 (대소문자 구분없이)
lyrics="""Oh, I've been hurtin' lately
I'm down on all my luck

 

print(lyrics.count("left"))
print(lyrics.count('right'))
print(f"가사의 길이는 {len(lyrics)}")

 

a="mega"
b="study"
print(a+b) #결과:megastudy
c=a+b #문자열 연결 연산자  결과:megastudy
d=a*3 #문자열 반복 연산자  결과: megamegamega
e=a[0] #문자열 인덱싱  결과:m
f=b[0:3] #[start:end count] 문자열 슬라이싱 결과: stu
g='g' in a #"mega"에서 'g'가 있니? 결과: TRUE or FALSE

 

title = "megastudy python programming"
print(title.split()) #띄어쓰기별 찢어 list로 반환 #['megastudy', 'python', 'programming']

title1 = "orange,apple,banana"
print(title1.split(',')) #','를 넣음으로써 ,를 기준으로 나눔 #['orange', 'apple', 'banana']

 

#(split함수 예시) user한테 이메일 주소를 입력받고, ['유저아이디', '도메인]이 담긴 리스트로 뱉기
email=str(input("이메일 주소 입력:"))

a=email.split('@') #['letsgo','gmail.com']
b=a[1].split('.')  #['gmail','com']

a[1]=b[0] #['letsgo','gmail']
a.append(b[1]) #a 리스트에 [com] 추가하기
print(a) #['letsgo','gmail','com']

 

word= ' '.join(['ice','cream']) #결과: 'ice cream' 으로, 띄어쓰기가 가운데로 감

id=input("아이디 입력:")
domain=input("도메인 입력:")
print('@'.join([id,domain])) #@을 가운데에 넣고 id 와 domain 조인한다. lets@gmail.com

 

반응형
728x90
반응형

매매평당 가격으로 정렬했을 때, 용산구 한남동이 가장 높은 것으로 나타난다. 

전세가율로 정렬했을 때, 역시 용산구 한남동이 가장 높은 것으로 나타난다.

84㎡ 갭으로 정렬했을 때, 강남구 삼성동이 가장 높고 송파구 오금동이 가장 낮다. (강남-서초구가 대체로 갭 금액이 높게 형성되어 있다)

아파트 수로 정렬했을 때, 서초구 서초동에 가장 높은 아파트 수가 확인되며, 그 뒤로 잠원동, 방배동이 있음

신규 분양권 비율로 정렬했을 때, 강남구 개포동이 가장 높으며, 송파구 거여동-용산구 효창동-서초구 반포동이 그 뒤를 이음.

(최근 10년, 300세대 이상) 대형 평수 분포 비율로 정렬했을 때, 용산구 한강로3가, 도곡동, 방배동, 한남동,내곡동, 이촌동 순으로 대형 평수가 높이 이루어져 있음. 

(최근 10년, 300세대 이상) 가격분포 5분위 건수로 정렬했을 때, 서초구 서초동이 가장 높은 것으로 확인되며, 그 뒤로 방배, 잠원, 삼성, 도곡, 대치, 이촌으로 형성됨.

반응형
728x90
반응형

2023년 8월 발간된 국토연구원의 보고서, "저출산 원인 진단과 부동산정책 방향 연구 (A Study on the Causes of Low Birthrate and the Direction of Real Estate Policy" 에 따르면, 주택가격이 출산율 하락에 영향을 주는 것으로 분석된다. 

분석 요인별 채택된 방법론은 다음과 같다:

 출산율 결정요인
 - 출산율이 자기상관성이 높은 통계이기 때문에 종속변수의 과거값이 설명변수로 포함되는 동태패널모형 (Dynamic Panel Regression Model)인 시스템GMM 모형 활용

출산율 기여도 분석
- 과거 경험치에 대한 기여도를 추정하는 샤플리 분해 방법 활용

미래 출산율 기여도 분석
- 미래 출산율 예측값에 대한 결정요인 변수들이 출산율 변동에 기여하는 수준을 추정하기 위해, 예측오차분산분해 방법 활용

출산율 하락 결정구조 전환
- 주택 매매가격과 전세가격이 출산율에 미치는 시간가변적 영향을 추정하여 구조 전환 특징을 분석
- 시간가변적 충격반응함수를 분석할 수 있는 시간가변모수 VAR 모형의 시간가변충격반응함수 활용

 

<자녀 출산순위별 출산율 하락 요인>으로는,
- 첫째 자녀: 주택매매가격, 전세가격, 초등학교 사교육비의 영향 高

- 둘째 자녀 이상: 주택매매가격, 전세가격과 함께 고등학교 사교육비의 영향 高
<주택가격 상승기 출산율 하락 요인>으로는,
- 주택매매가격과 전세가격의 기여도
- 첫째 자녀에 비해 둘째 자녀와 셋째 자녀 이상의 사교육비가 출산율 하락에 대한 기여도 高

   (특히, 고등학교 사교육비의 기여도 증가)
<미래 출산율에 대한 기여도>
- 첫째 자녀의 미래 출산율: 전년도 첫째 자녀 출산율의 기여도 高 & 주택매매가격의 기여도 高
- 둘째 자녀 이상의 미래 출산율: 전년도 출산율의 기여도 低 & 주택매매가격과 여성 경제활동 참여율의 기여도
<주택가격과 출산율 하락구조의 전환>
- 주택매매가격 & 전세가격: 2010년대 중반 이후 첫째와 둘째 자녀 출산율 하락에 대한 영향력 강화
  (셋째 자녀 이상에서는 영향력 低)

 

위 저출산 원인에 대한 연구결과를 통한 부동산 정책방안을 고안해냈다.

<정책 방안>
- 우리나라 인구대체 수준인 2.1명까지 출산율을 회복하기 위해서는 단기 과제로 첫째 자녀 출산을, 중장기 과제로는 둘째 자녀 출산을 장려하는 제도 마련이 필요

(첫째 자녀 출산)
- 무주택 (예비)유자녀 가구에 대한 특별공급물량의 확대
- 추가 청약가점 부여 등을 통한 주택공급 확대 및 취득기회를 강화
- 지분적립형 등의 주택공급 확대를 통해 자금력이 부족한 신혼부분의 주거안정과 자산형성 지원
- 생애주기를 고려한 주택취득세 면세제도 도입
- 거주주택 마련 목적의 대출에 대해 총부채원리금상환비율 (Debt to Service, DSR) 범위 내에서 금리 인하

(둘째 자녀 출산)
- 2자녀를 다자녀 기준으로 확대하고, 2자녀 이상 가구에 대해 특별공급물량 확대
- 주택면적 상향
- 2자녀부터 교육비 면제 등의 지원 강화
- 주거와 자녀 양육을 함께할 수 있는 인프라 (육아친화마을/자녀 양육 클러스터 등) 건설 확대

저출산 원인에 대한 진단과 부동산정책.pdf
5.72MB

 

반응형

+ Recent posts