환율 적용해 원화 가격 도출하기

Q) 사용자로부터 달러, 엔 또는 위안 금액을 입력받은 후 이를 원으로 바꿔 계산하세요 (딕셔너리 개념 이용할 것)

 

1. 리스트 변환 후 인덱스 값 도출을 통한 문제풀이

# 문제) 달러, 엔 또는 위안 금액을 입력받은 후 이를 원으로 바꿔 계산할 것

# 주어진 환율 값 
exchange_rate = {}
exchange_rate['달러'] = 1322
exchange_rate['위안'] = 189
exchange_rate['엔'] = 9.64

# input() 값 받은 후 해당 key 값 도출
# input 조건으로 단위를 띄어쓸 것을 요청, 아닐 시 에러 처리

data = input("단위는 띄어써서 입려해주세요")

key = data[data.find(" ")+1:] #Key 값 
amount = int(data[:data.find(" ")]) # 액수 도출

#해당 Key 값에 대응하는 value 값 찾아 액수에 곱하면 해결

exchange_rate_list = list(exchange_rate.keys())
exchange_rate_values = list(exchange_rate.values())

data_key_index = exchange_rate_list.index(key) #key 값의 인덱스
data_exchange_rate = exchange_rate_values[data_key_index] #환율 값

print("너의 교환액은", data_exchange_rate * amount, "원")

2. 반복문을 사용한 문제풀이

# 주어진 환율 값 
exchange_rate = {}
exchange_rate['달러'] = 1322
exchange_rate['위안'] = 189
exchange_rate['엔'] = 9.64

# input() 값 받은 후 해당 key 값 도출
# input 조건으로 단위를 띄어쓸 것을 요청, 아닐 시 에러 처리

data = input("1000 달러 형태의 입력 요청")

key = data[data.find(" ")+1:] #Key 값 
amount = int(data[:data.find(" ")]) # 액수 도출

for index in exchange_rate.keys():
    if index == key:
        print(amount*exchange_rate[index], '원  ')

 

리스트 외 다른 데이터 구조

0. 데이터 구조 학습 간 필요 관점

: 리스트/ 튜플/ 딕셔너리/ 집합 4가지 데이터 구조를 학습하는 데 있어 선언, 읽기, 추가, 삭제, 수정 5가지 관점에서의 가능 여부와 방법에 대해 이해하는 것을 목표로 학습해야 한다.

#데이터 구조 간의 변형이 가능하다는 특징이 있어 필요한 상황에 맞게 데이터 구조를 변형해가며  다양한 기능을 활용해야 한다.

1. 튜플

: 튜플을 사용하는 경우는 여러 개의 return 값을 받아 저장할 때 그리고 변수 간의 값을 서로 바꾸고자 할 때 주로 사용한다.

# 여러개의 return 값을 받을 떄
def quot_rem(x,y):
	quot = x//y
    rem = x%y
    return quot, rem  #해당 값 튜플 형태로 추출

# 변수 간의 값을 교환할 때
x=1
y=5

x,y = y,x  #x=5, y=1로 값 추출

- 선언 + 입력 : 변수명 = (1,2,3,4) 또는 tuple(1,2,3,4)
- 읽기 : 변수명[인덱스 번호]         #슬라이싱 활용 가능

- 추가 : 기본적으로 불가하지만, 튜플 간의 합을 통해 추가하는 것은 가능

tuple = (1,2,3)
print(tuple+tuple)
# 값으로 (1,2,3,1,2,3) 출력

- 삭제 : 불가

- 수정 : 불가

 

2. 딕셔너리 (사전)

#key만 출력하고자 할 때
print(data_dict.keys())

for key in data_dict.keys():
    print(data_dict[key])
    

#value만 출력하고자 할 때
print(data_dict.values())

#key와 value를 튜플 형태로 각각 출력하고자 할 때
print(data_dict.items())

for items in data_dict.items():
    print(items)

- 선언 + 입력 : 변수명 = {키 : 값, 키 : 값} 또는 dict(키 : 값, 키 : 값)
- 읽기 : 변수명[키]

- 추가 : 변수명[새로운 키] = 새로운 값

- 삭제 : del 변수명[제거할 키]

- 수정 : 변수명[수정할키] = 새로운 값

3. 집합 (set)

: 다른 데이터 구조와는 달리 순서 혹은 중복이 없다는 특징이 있다. 중복이 없다는 특징을 이용해 수많은 데이터 중 중복을 제거하고 싶을 경우 set()함수로 집합으로 변형시킨 후 다시 원복할 시 중복된 데이터를 제거할 수 있다.

# 데이터 구조 집합의 기본 활용
data1 = {'apple', 'strawberry','kiwi'}
data2 = {'apple','banana','kiwi'}

print(data1&data2)  #교집합
print(data1|data2)  #합집합
print(data1-data2)  #차집합
print(data1^data2)   #교집합의 여집합

# 집합의 특징을 활용한 중복 제거
alist_data = [1,2,3,1,2,3,1]
alist = set(alist_data)
list(alist)      #[1,2,3] 출력

- 선언 + 입력 : 변수명 = set(), 변수명 = {데이터1, 데이터2 ...}, 변수명 = set({데이터1, 데이터2 ...})
- 읽기 : 인덱스 번호를 지원하지 않음. 반복문을 통해 읽을 수 있음.

함수의 기본 구조와 활용

1. 함수의 기본 구조

: 함수의 경우 사전에 정의된 있는 것들을 사용하는 경우가 많지만, 보는 이의 이해를 돕고 코드의 길이를 효율적으로 줄이기 위해 반복되거나 중요한 구문을 함수로 정의하는 경우가 많다. 함수를 정의함에 있어 인풋(인자 - argument, parameter)과 아웃풋 (결과값)의 개념이 중요한데 중학교 시절 배웠던 Y = F(x) 함수식에 착안해 생각한다면 이해할 수 있다.

#함수 정의 방법과 인자에 활용에 대한 사례
def func1(parameter1, parameter2):
    print("hello~!",parameter1,"I'm",parameter2)
func1('drogba','lampard')

 

2. 함수 내 return의 활용

: 결과값을 추가적으로 활용하고자 할 때에는 return을 통해 값을 받고 이에 대응하는 변수를 활용하는 방식을 취할 수 있다.

#보통의 경우 리턴은 한 개의 값만 가능한데, 파이썬의 경우 튜플의 형태로 여러개의 결과값을 저장할 수 있다.

#함수 안에서 리턴 이후의 것들은 실행되지 않는 특징이 있다. 따라서 작성자에 다라 코드 종료의 문구로 사용하기도 한다.

 

#return을 통해 변수에 해당 결과값을 기입할 수 있음
def func1(parameter1, parameter2):
	return parameter1 + parmeter2

y = func1(1,2)
#y에 3(1+2)의 값이 들어가 변수로서 추가적인 활용이 가능함

 

3. local variable과 global variable의 차이

: 함수의 인자, 혹은 함수 내 정의된 값은 해당 결과값에만 영향을 미칠 뿐, 함수 밖 변수에는 영향을 끼치지 않는다는 점을 주의해야 한다. 아래 예시를 보면 sum 함수 내에 정의된 c는 함수 내에서면 영향을 미치는 local variable로 함수 밖 print(c)할 경우 undefined 로 출력됨을 확인할 수 있다.

def sum(a,b):
    c = 5
    result = a + b + c
    return result

print(sum(1,2)) #값으로 8출력
print(c)        #not defined 에러 출력

반복문의 기본 구조와 활용

1. 반복문의 기본 구조

: 반복문은 특정 구문의 사용이 반복될 경우 이를 일일이 기입하는 방식이 아니라 하나의 구문을 대표로 하여 이를 반복 사용하는 방식이다. 코드를 효율적으로 작성할 수 있어 생산성이 높아질 뿐만 아니라 추후 유지 보수도 매우 용이한 특징이 있다. 반복문은 '리스트 내 인자' 혹은 '정해진 범위'에 대해 사용되는 for 반복문과 특정 조건에 부합되지 않을 때까지 반복하는 while 반복문이 대표적으로 사용된다.

 

1) for 반복문

: list 함수 내 인자 혹은 range 내의 범위 값에 해당하는 값 혹은 횟수 만큼 반복 실행하는 함수

#리스트 내 인자를 활용한 반복문 기본 구조
alist = [1,2,3,4,5]
for i in alist:
    print(i)
    
# range 범위를 활용한 반복문 기본 구조
for i in range(1,6):
    print(i)

 

2) while 반복문

:  while 행에 주어진 조건에 부합하지 않을 때까지 반복을 실행하는 함수

#시행 횟수를 제한하는 경우
i = 0
while i <=3:
    print(i)
    i = i+1

# 원하는 정답이 세팅되어 있는 경우    
name = input("who's the best palyer in Chelsea : ")
while name != "drogba":
    print("wrong")
    name = input("another?")
print("right")

2. for 반복문의 활용

: for 반복문의 'range 범위만큼 반복' 되는 특징을 이용해 구구단과 같은 계산식 프로그래밍이 가능하다.

#조건문과 반복문을 같이 사용한 경우
data = int(input("2~9사이의 값을 입력하세요 : "))

if data>=2 and data <=9:
    for i in range(1,10):
        print(data, "X", i, "=",data*i)
else:
    print("다시 입력하세요")

: for 반복문의 '리스트 내 인자에 대해 적용' 되는 특징을 이용해 리스트 내 데이터를 일괄적으로 가공하는 프로그래밍이 가능하다. 

#[이름] 형태로 받은 값에 대해 데이터 정리하는 경우
data = "[dave],[david],[andy],[arthor]"
data_list = data.split(",")

#strip 통해 해결
for i in data_list:
    print(i.strip("[""]"))
#슬라이싱 개념을 통해 해결
for i in data_list:
    print(i[1:-1])

3. while 반복문의 활용

:while 반복문의 특징인 '조건에 부합하지 않을 때까지' 를 이용하여 원하는 답변이 나올 때까지 답변을 재요구하는 프로그래밍이 가능하다.

#비밀번호 확인
data = input("비밀번호를 입력하세요")

while data != "4312":
    data = input("틀렸으니 재입력하세요")
print("통과")

조건문의 기본 형태와 활용

1. 조건문의 기본 형태

: 조건문의 기본 형태는 if / elif/ else 구조를 이뤄어져 있다. elif의 경우 횟수에 제한 없이 조건을 연속적으로 제시할 수 있다는 특징이 있으며 else는 굳이 사용하지 않아도 오류가 발생하진 않지만 쓴다면 마지막에 사용해야 한다는 특징이 있다. 추가로 조건문 사용 간 Tab 공간에 대해 정확히 세팅해야만 오류가 나지 않으니 주의해야 한다.

age = int(input("당신의 나이는 몇살입니까?"))
if age < 13:
    print("아동")
elif age < 20:
    print("청소년")
else :
    print("성인")

 

1) 논리 구조에서 and 혹은 or 활용하는 형태

age1 = int(input("철수의 나이는 몇살입니까?"))
age2 = int(input("영희의 나이는 몇살입니까?"))

if age1 > 20 and age2 > 20:
    print("출입 가능")
else:
    print("출입 금지")

 

2) if not 사용 형태 

age = int(input("당신의 나이는 몇살입니까?"))
if not age >= 20:
    print("미성년자")
else:
    print("성인")

 

2. 조건문 안에 조건문

: 조건문 안에 조건문 구조를 사용할 경우 elif을 단순 나열하는 방식과 비교했을 때 구조적으로 한 눈에 이해하기 쉽다는 특징이 있다. 논리 설정 간 핵심이 되는 기준을 통해 1차적인 프레임을 구분한 뒤 각 프레임 내에서 구조를 세분화하는 방식으로 사용할 수 있기 때문이다. 조건문 안에 조건문을 사용할 경우 들여쓰기 활용에 특히 더 주의해야 한다.

# 50,000원이 호텔과 모텔의 기준액이라는 점이 잘 보이도록 조건문 안에 조건문을 세팅한 사례 
cash = int(input("how much do you have?"))
if cash > 100000:
    print('go to 5star hotel')
elif cash >= 50000:
    if cash >=80000:
        print('go to 4star hotel')
    elif cash >= 70000:
        print('go to 3star hotel')
    else:
        print('go to 2star hotel')
else:
    if cash >= 30000:
        print("go to motel")
    else :
        print("go home")

 

3. if 조건문 활용 간 필요한 비교연산자 정리...

x == n #같다면
x != n #다르다면
x < n
x > n
x >= n
x <= n

문자열 다루기 기본과 리스트 데이터 구조

1. 인덱스

: 특정 데이터를 가르키는 번호를 나타내며, 시작점에서는 0부터 끝지점에서는 -1부터 시작하는 특징이 있다. 인덱스는 문자열(str)과 리스트를 대상으로 작용하지만 숫자(int)를 대상으로 작용하지 않는다.

p y t h o n
0 1 2 3 4 5
-6 -5 -4 -3 -2 -1

 

2. 슬라이싱

: 특정 데이터 내 부분을 추출하고 싶을 때 사용하는 개념이며, 인덱스 번호를 통해 추출한다.

슬라이싱 끝에 해당하는 문자는 포함되지 않고 출력되는 특징이 있으며, (-) 값을 활용해도 출력이 가능하다.

# 변수가 str인 경우와 list인 경우를 나눠서 슬라이싱의 기능을 생각해야 한다.

# str의 경우 글자별로 인덱스를 매칭하는 반면 리스트는 각 항목을 각 인덱스로 매칭하는 특징이 있다.

string = "python"
print(string[1:3])
print(string[-5:-3])
# 결과값으로 yt 출력

 

문자열 다루기 기본 함수 몇 가지...

- len() 함수의 사용

: 해당 변수의 전체 길이를 표시해주는 함수 (빈칸 포함)

 

- .strip()함수의 사용

: .strip()을 기본 적으로 사용할 시 "  " 빈칸을 제거하는데 활용 가능하며, 앞뒤의 빈칸만을 제거하는 특징을 가지고 있다.

("a") 괄호 안에 인자 설정을 통해 빈칸 외에도 다양한 것들을 제거 가능한 유용한 함수

# strip() 함수는 하나의 인자만을 받게 됨. 여러 인자를 기입할 때는 ","가 아닌 하나의 인자 내에 겹쳐서 사용할 것

# strip() 함수는 본래의 변수값을 변형시키지 않는다는 특징이 있다.

 

- .find()

: .find("a")의 형태로 쓰이며 해당 값이 처음 등장하는 위치를 표시해주는 함수 

 

- .replace

: .replace("a"."b")의 형태로 쓰이며 변수 내 a 값을 b로 바꾸는데 사용하는 함수

 

- .format  : 매개변수/ 변인 개념을 활용하는 함수이자 소수점 반올림 기능으로 활용되는 함수

# 매개변수/ 변인으로 활용되는 경우
print("I have an {1}, I have a {0}".format("pen","apple"))
# I have an apple, I have a pen 출력

# 소수점 반올림으로 활용되는 경우
a = 3.14159
print(format(a,".2f"))
#3.14 출력

4. 데이터 구조 - 리스트

: 여러가지 관계가 있는 데이터를 하나의 변수로 다루는 방법으로 []안에 ","를 사용해 데이터를 기입한다.

보통 빈 리스트를 시작으로 append 혹은 insert 함수를 통해 인자를 추가하는 방식으로 진행하는 것이 일반적이다.

#리스트를 정의하는 2가지 방법
리스트변수 = []
리스트변수 = list()
#리스트 추가
리스트변수.append('데이터')
리스트변수.insert(인덱스번호,'데이터')
#리스트 삭제
리스트변수.remove('데이터')
del 리스트변수[인덱스번호]
#리스트 데이터 수정
리스트변수[인덱스번호] = '수정할 데이터'

 

리스트 관련 몇 가지 기능...

 

- 찾고자 하는 값 in list 변수 

: 원하는 값이 리스트 내에 존재하는지 확인 가능. 추후 조건문과 결합되어 입력값에 대한 에러 체크하는데 용이하다.

alist = [1,2,3,4]

1 in alist    #True 출력

 

- .sort()

: 리스트.sort()의 형태로 쓰이며 오름차순으로 정렬되는 기능, 본래의 변수리스트가 변환되는 특징이 있다.

 

- .reverse()

: 리스트.reverse()의 형태로 쓰이며 내림차순으로 정렬되는 기능, 본래의 변수리스트가 변환되는 특징이 있다.

 

- .split()

: 리스트.split()의 형태로 쓰이며 띄어쓰기 " "에 따라 리스트화시키는 기능, 본래의 변수값이 변하지 않는다는 특징이 있다.

b = "a_b_c_d"
b_set = b.split("_")
#b_set ['a','b','c','d'] 형태로 출력
#스플릿 함수와 슬라이싱 응용 사례 : 주민등록번호 내 성별 확인
digit = input("주민등록번호 입력")

#1번 구조
data = digit.split("-")
data_back = data[1]
print(data_back[0])

#2번 구조
data = digit.split("-")[1]
print(data[0])

#3번 구조
data = digit.split("-")[1][0]
print(data)

 

데이터 타입과 변수, 그리고 출력

1. 데이터 타입

1. String(문자) : 문자열은 쌍따옴표(") 혹은 따옴표(')를 사용해 별도로 표기 

2. Integer (정수) : 1과 같이 정수로 표현되는 숫자, 사칙연산 가능

3. Float (부동소숫점) : 1.1 등과 같이 소숫점을 포함한 숫자 사칙연산 가능

4. Boolean (불리안) : True 혹은 Flase로 표시

 

2. 변수(variable) : 데이터를 기반으로 컴퓨터에 명령을 내리는 것

1) 변수의 이름을 설정하는 방식

- 첫글자로 숫자가 등장해서는 안 된다. (에러 요인)

- 연속된 단어를 함께 쓰지 않고 '_'로 표현할 것을 권장

- '_'외에 특수문자 사용은 자제한다.

 

2) 변수 정의 후 이를 활용하는 사례 

radius = 10
pi = 3.1415

diameter = 2*r
area = pi*r**2

print("지름은", diameter)
print("넓이는", area)

 

3) input() 함수를 통한 사용자의 입력어를 프로그래밍에 집어 넣는 방식

: input()함수를 사용할 경우 쥬피터 노트북 값 출력 창에 변수에 해당하는 값을 입력하도록 하는 깜빡이는 창이 뜨게 된다.

사용자의 입장에서 해당 값을 입력할 경우, input()함수에 해당하는 변수 값을 설정할 수 있다.

name = input('what is your name')
age = int(input('what is your age'))

추가로 input()함수는 사용자의 응답 내용을 string으로 받게 됨. 따라서 해당 결과물을 기반으로 계산식을 사용하고 싶다면

숫자로 변경해주는 함수 int()를 덮어 사용해야 한다. 

+ Recent posts