turtle 모듈을 이용하여 위와 같이 원 3개를 스크린창에 띄워보려고 합니다.

from turtle import Turtle, Screen

screen = Screen()
screen.setup(width=600, height=600)
screen.bgcolor("black")
POSITIONS = [(0, 0), (-20, 0), (-40, 0)]
snake = []
for position in POSITIONS:
snake_segment = Turtle(shape="circle")
snake_segment.color("white")
snake_segment.shapesize(1, 1, 0.1)
snake_segment.penup()
snake_segment.speed("slowest")
snake_segment.goto(position)
snake.append(snake_segment)

screen.exitonclick()


실제로 코드를 실행해보면 왼쪽처럼 실행될 것입니다. (*gif 파일이 약간 깨져서 원이 겹쳐보입니다만 실제로 실행해보면 원이 겹쳐보이지는 않습니다.)

오른쪽처럼 3개의 원이 한번에 뜨도록 할 수는 없을까요??


turtle 모듈의 tracer, update 함수

turtle 모듈의 tracer 함수는 스크린창의 출력을 조절 할 수 있는 함수입니다. (*구체적인 내용은 아래의 표를 참고)


tracer = 0 

tracer = 1

 코드 0 

코드 0

코드 1

코드 1 

코드 2

코드 2 

코드 0,1,2

한번에

출력가능

 코드 0,1,2

하나씩

출력











from turtle import Turtle, Screen

screen = Screen()
screen.setup(width=600, height=600)
screen.bgcolor("black")
screen.tracer(0)
POSITIONS = [(0, 0), (-20, 0), (-40, 0)]
snake = []
for position in POSITIONS:
snake_segment = Turtle(shape="circle")
snake_segment.color("white")
snake_segment.shapesize(1, 1, 0.1)
snake_segment.penup()
snake_segment.speed("slowest")
snake_segment.goto(position)
snake.append(snake_segment)

screen.exitonclick()

그럼 tracer함수를 작성하고, 매개변수는 0으로 한 다음 실행해보겠습니다.


실행해보니 아무것도 뜨지 않습니다. 왜냐하면 screen.tracer(0)의 정확한 의미는 코드들이 실행되는 과정을 스크린창에 출력하지 않는 것이기 때문입니다.

이럴때 필요한 함수가 update 함수입니다. 원을 만드는 코드인 for 반복문 아래에 update함수를 넣으면, 원이 생성되는 과정은 보여주지 않으면서 3개의 원이 생성된 결과만 보여줄 수 있습니다.

from turtle import Turtle, Screen

screen = Screen()
screen.setup(width=600, height=600)
screen.bgcolor("black")
screen.tracer(0)
POSITIONS = [(0, 0), (-20, 0), (-40, 0)]
snake = []
for position in POSITIONS:
snake_segment = Turtle(shape="circle")
snake_segment.color("white")
snake_segment.shapesize(1, 1, 0.1)
snake_segment.penup()
snake_segment.speed("slowest")
snake_segment.goto(position)
snake.append(snake_segment)
screen.update()

screen.exitonclick()


screen.tracer(0)의 영향을 받는 코드들은 정상적으로 실행되고 있으나 스크린창에는 뜨지 않습니다.

하지만 중간 중간에 update 함수를 넣으면 그동안 실행되었던 코드들이 스크린창에 업데이트 되는 효과를 볼 수 있습니다.


그럼 3개씩 총 6개의 원을 스크린에 뜨게 해보겠습니다. 원은 2번에 걸쳐서 스크린에 뜨게 될 것입니다. 

from turtle import Turtle, Screen
import time

screen = Screen()
screen.setup(width=600, height=600)
screen.bgcolor("black")
screen.tracer(0)
POSITIONS = [(0, 0), (-20, 0), (-40, 0)]
POSITIONS2 = [(-60, 0), (-80, 0), (-100, 0)]
snake = []
time.sleep(3)
for position in POSITIONS:
snake_segment = Turtle(shape="circle")
snake_segment.color("white")
snake_segment.shapesize(1, 1, 0.1)
snake_segment.penup()
snake_segment.speed("slowest")
snake_segment.goto(position)
snake.append(snake_segment)
screen.update()
time.sleep(3)

for position in POSITIONS2:
snake_segment = Turtle(shape="circle")
snake_segment.color("white")
snake_segment.shapesize(1, 1, 0.1)
snake_segment.penup()
snake_segment.speed("slowest")
snake_segment.goto(position)
snake.append(snake_segment)
screen.update()
screen.exitonclick()

time 모듈의 sleep 함수를 이용하면 원이 출력되는 2번의 과정 사이에 3초의 텀을 줄 수 있습니다.

그래서 중간에 sleep 함수를 추가하였습니다.

실행해보면 위처럼 원이 3개씩 2번에 걸쳐 출력됨을 확인할 수 있습니다.


블로그 이미지

방구석 세계인

관심분야 : 외국어 학습, 프로그래밍, 책 리뷰 등...

,

이번 포스팅에서는 turtle 모듈을 활용하여 키를 입력하면 아이콘이 움직이게 만들어 보겠습니다.


turtle 모듈 import 하기

from turtle import Turtle, Screen

먼저 위와 같이 작성해 줍니다. turtle은 turtle 이라는 모듈의 이름입니다.

우리는 아이콘을 만들고 스크린창을 띄워야 하니 Turtle(아이콘), Screen(스크린) 클래스를 import 할 것입니다.

여기서, turtle과 Turtle의 차이가 무엇인가 의문이 들 수 있습니다.

turtle은 모듈 이름이며, Turtle은 클래스 이름입니다. 어떤 것이 모듈이고, 클래스인지 구분하기 위해서 모듈은 소문자로, 클래스는 앞글자를 대문자로 명명하기로 규칙을 정하였습니다. 이것은 전 세계의 개발자들 사이에서 통용되는 규칙 입니다.


from turtle import Turtle, Screen

timmy = Turtle()
timmy.shape("turtle")
screen = Screen()

screen.exitonclick()

먼저 timmy라는 이름으로 아이콘(Turtle())을 만들었습니다. 그리고 shape 함수를 이용하여 모양을 거북이로 설정하였습니다.

여담으로 여기서 해당 모듈의 이름이 turtle인 이유를 추측할 수 있습니다. 기본 아이콘 모양이 거북이 이기 때문입니다.

다시 본론으로 돌아가서, 이제 스크린창을 만들어야 합니다. 그래서 screen이라는 이름으로 스크린(Screen())을 만들었습니다.

마지막으로 exitonclick 함수를 작성하여 스크린창이 화면에 계속 유지되도록 해줍니다.

함수를 실행하면 위와 같이 스크린창과 거북이 모양의 아이콘이 뜰 것입니다.


onkey 함수로 아이콘을 움직이게 만들기

파이썬에는 다양한 모듈이 존재하며 각 모듈들의 사용법을 설명해놓은 웹페이지가 있습니다.

turtle 모듈은 아래의 링크에서 사용법을 볼 수 있습니다.

(https://docs.python.org/3/library/turtle.html)


위의 링크에 들어가 살펴보면 listen과 onkey 함수의 기능에 대해 자세히 알아볼 수 있습니다.

onkey 함수는 onkey(key = X, fun = X)의 형태로 되어 있으며, key를 설정하면 function이 실행되는 구조입니다.

listen 함수는 onkey 함수를 실행하기 위해 따라오는 함수입니다.


만약 f 키를 눌렀을때 아이콘이 앞으로 움직이게 하고 싶다면 아래와 같이 코드를 작성하면 됩니다.

from turtle import Turtle, Screen

timmy = Turtle()
timmy.shape("turtle")
screen = Screen()

def move_fd():
timmy.forward(100)

screen.onkey(key="f", fun = move_fd)
screen.listen()
screen.exitonclick()

코드를 실행하고 f키를 누르면 위의 스크린샷처럼 아이콘이 앞으로 움직임을 확인할 수 있습니다.

이런 방식으로 뒤로가기, 시계방향으로 움직이기, reset하기 등 다양하게 응용할 수 있습니다.

블로그 이미지

방구석 세계인

관심분야 : 외국어 학습, 프로그래밍, 책 리뷰 등...

,

함수(function)를 매개변수(parameter)로 사용하는 경우

def add(n1, n2):
return n1 + n2
def subtract(n1, n2):
return n1 - n2
def multiply(n1, n2):
return n1 * n2
def divide(n1, n2):
return n1 / n2

파이썬에서 기본 사칙연산 (더하기, 빼기, 곱하기, 나누기)을 수행하는 함수를 만들어 보았습니다.

총 4개의 함수가 만들어졌습니다. 

위의 함수를 이용하여 4+5를 계산해보고 싶다면 add(4, 5)를 작성하고 실행해주면 될 것입니다.


Example

5+9 = add(5, 9)

9-7 = subtract(9, 7)

8*12 = multiply(8, 12)

90/21 = divide(90, 21)


그런데 함수를 하나만 더 작성한다면 좀 더 편리하게 만들 수 있습니다.


def add(n1, n2):
return n1 + n2
def subtract(n1, n2):
return n1 - n2
def multiply(n1, n2):
return n1 * n2
def divide(n1, n2):
return n1 / n2

def calculator(n1, n2, func):
return func(n1, n2)

print(calculator(2,3,subtract))

그래서 calculator라는 함수를 하나 더 만들어 보았습니다. 그리고 calculator의 매개변수로 func을 추가했습니다. 이제 매개변수 func의 자리에 필요한 함수를 넣는다면 원하는대로 계산을 해줄 것입니다.


Example

5+9 = calculator(5, 9, add)

9-7 = calculator(9, 7, subtract)

8*12 = calculator(8, 12, multiply)

90/21 = calculator(90, 21, divide)



블로그 이미지

방구석 세계인

관심분야 : 외국어 학습, 프로그래밍, 책 리뷰 등...

,

튜플 (tuple)

튜플은 다른 프로그래밍 언어에는 없고, 파이썬에만 있는 특별한 기능 중 하나입니다.

튜플은 리스트 (list)와 같은 자료형으로, 생긴것도 리스트와 비슷하게 생겼습니다.


list_example = [1, 2, 3, 4, 5]
tuple_example = (1, 2, 3, 4, 5)

리스트, 튜플을 각각 하나씩 선언해보았습니다. 리스트는 []로 감싸지며, 튜플은 ()로 감싸진다는 차이점을 알 수 있습니다.


그럼 리스트, 튜플 사이의 기능적 차이점은 어떻게 될까요?


리스트

list_example = [1, 2, 3, 4, 5]
print(list_example)

list_example[0] = 10
print(list_example)


튜플

tuple_example = (1, 2, 3, 4, 5)
print(tuple_example)

tuple_example[0] = 10
print(tuple_example)

리스트는 이미 선언된 요소를 중간에 자유롭게 바꿀 수 있습니다.

그래서 처음에 [1, 2, 3, 4, 5]로 선언된 것을 [10, 2, 3, 4, 5]로 바꿀 수 있었습니다.

하지만 튜플은 한번 선언된 요소를 중간에 바꿀 수 없습니다.

그래서 [1, 2, 3, 4, 5]로 선언된 것을 [10, 2, 3, 4, 5]로 바꾸려하자 에러가 발생했습니다.



프로그램을 작성하다보면 리스트 내부의 요소를 변경해서는 안되는 일이 생길 수 있습니다.

그럼 해당 리스트에 주석을 달아놓던지하여 요소를 변경해서는 안된다고 표시해줄 수 있을 것입니다. 하지만 프로그램은 한 번 만들면 끝이 아니라 이후 계속 유지, 보수를 해줘야 합니다. 그러나 시간의 흐름에 따라 해당 리스트 내부의 요소를 변경해서는 안된다는 사실을 잊어버릴 수도 있습니다.

그럴때 아예 튜플로 선언해버리면 해당 문제를 사전에 예방할 수 있을 것입니다.

 


튜플 (tuple) 선언 할 때 tip

1. 튜플 내 요소를 하나만 생성하고 싶을 때

tuple_example = (1,) O
tuple_example = (1) X

요소가 하나뿐이더라도 튜플을 생성할 때에는 요소 뒤에 항상 comma(,)를 붙여야 합니다.


2. 괄호 생략

#둘 다 가능함
tuple_example = (1, 2, 3, 4, 5)

tuple_example = 1, 2, 3, 4, 5

튜플을 생성할 때, 괄호를 쓰지 않아도 아무 문제 없이 정상적으로 생성됩니다.

블로그 이미지

방구석 세계인

관심분야 : 외국어 학습, 프로그래밍, 책 리뷰 등...

,


부울대수 (Boolean Algebra) 란?


부울대수는 현존하는 모든 컴퓨터 동작의 원리가 된다고 한다. 왜일까?


대수학 (Algebra)이란 일련의 공리들을 만족하는 수학적 구조들의 일반적인 성질을 연구하는 수학의 한 분야이다.

그 중, 부울대수 (Boolean Algebra)는 참(True), 거짓(False)라는 논리로만 이루어진 대수학이라 할 수 있다. 


다들 이미 알다시피 컴퓨터는 0,1 이라는 두개의 숫자만으로 모든 것을 표현한다. True, False라는 논리를 0과 1이라는 두 숫자로 나타낼 수 있기 때문에 부울대수가 컴퓨팅의 기반이 되는 것이다.


논리연산자 - NOT, AND, OR

부울대수를 연산하는 연산자에는 3가지 - NOT, AND, OR - 가 있다. 하나 하나 살펴보도록 하자.



NOT(논리부정)

영어 not의 뜻을 생각하면 연산자 NOT을 쉽게 이해할 수 있다. 알다시피 영어에서 not은 ~가 아니다의 뜻을 가진다.

표현방법 :


이것을 게이트(gate)로 표현하면 아래와 같다.

(*게이트란 부울대수 연산을 시각적으로 보기 쉽게 만든 것이다. ex. 변수 A를 게이트에 넣으면 결과값 Q가 나온다.)

A를 NOT 게이트에 넣었을 때 나오는 결과값 Q는 A'가 될 것이다.


AND(논리곱)

영어 and는 그리고 라는 뜻이다. 그러므로 A AND B는 A 그리고 B라는 뜻이 될 것이다. 만약 A AND B의 결과가 True가 되려면 A, B 둘다 True가 되야 할 것이다. 둘 중 하나라도 False라면 True라는 결과가 나올 수 없을 것이다.

표현방법 : Q = A⋅ B ( ⋅ 는 생략가능)
INPUTOUTPUT
ABQ
000
010
100
111

게이트로는 아래와 같이 표현된다.



OR(논리합)

영어 or의 뜻은 또는 이다. 그러므로 A OR B는 A 또는 B라는 뜻이 될 것이다. 만약 A OR B의 결과가 True가 되려면 A, B 둘 중 하나만 True가 되어도 True가 될 것이다.

표현방법 : Q = A+ B
INPUTOUTPUT
ABQ
000
011
101
111

게이트로는 아래와 같이 표현된다.


부울대수의 주요 법칙

1. 기본 공리

A⋅A=A, A+A=A, A⋅0=0, A+0=A, A⋅1=A, A+1=1

2. 부정법칙

A⋅A'=0, A+A'=1, A''=A

3. 교환법칙

A⋅B=B⋅A, A+B=B+A

4. 결합법칙

A⋅(B⋅C)=(A⋅B)⋅C, A+(B+C)=(A+B)+C

5. 분배법칙

A⋅(B+C)=A⋅B+A⋅C, A+(B⋅C)=A+B⋅A+C

6. 흡수법칙

A⋅(A+B)=A, A+(A⋅B)=A


이것을 그냥 외우려하면 당연히 잘 안될 것이다.

이럴땐 게이트를 이용하여 직접 계산해보면 왜 이러한 법칙이 성립하는지 이해할 수 있게 된다.


예를 하나 들어보겠다.

A+A'=1

#case1

#case2


다른 법칙도 이런 식으로 직접 연산해보면 왜 그러한 법칙이 성립되는지 이해할 수 있을 것이다.

블로그 이미지

방구석 세계인

관심분야 : 외국어 학습, 프로그래밍, 책 리뷰 등...

,

베트남어 어휘의 6~70%는 한자어

 한국어의 어휘는 크게 3가지 범주 - 고유어, 한자어, 외래어 - 로 나눌 수 있습니다. 그리고 그 중에서 한자어가 전체 어휘의 6~70%를 차지합니다. 베트남어도 한국어와 마찬가지입니다. 베트남어 어휘는 고유어, 한자어, 외래어로 나뉘며, 한자어가 전체 어휘의 6~70%를 차지합니다. 따라서 한자가 베트남어에서 어떻게 사용되는지 안다면 베트남어 어휘력을 비약적으로 향상시킬 수 있을 것입니다.

 그래서 저는 베트남어에서 많이 쓰이는 한자를 추려서 뜻과 음, 그리고 해당 한자가 사용된 단어를 소개하는 시리즈를 만드려고 합니다. 


 이번 포스팅에서는 (각각 각)이라는 한자가 베트남어에서 어떻게 사용되는지 알아볼 것입니다.


 各(각각 각)


네이버 한자 사전에서 (각각 각)을 검색하면 아래와 같은 결과가 나올 것입니다.


 네이버 한자 사전에서는 (각각 각)이 가지는 6가지의 뜻에 대해 설명하고 있습니다. 각각, 각종 정도로 뜻을 기억해 두시면 될 것 같습니다. 

그럼 베트남어에서는 어떻게 쓰이는지 알아보겠습니다.


các

뜻 : 각각 (mỗi một, đều, cùng)

사용단어

các chủng 各種 (각종)

(ex. Vì sao các chủng virus cúm thường xuyên biến đổi?)

các loại 各類 (각류) *뜻 : 각종

(ex. Tên các loại hoa quả, rau củ phổ biến trong tiếng Anh.)


블로그 이미지

방구석 세계인

관심분야 : 외국어 학습, 프로그래밍, 책 리뷰 등...

,

커피 자판기 만들기 (실습)

이번에는 커피 자판기 프로그램을 만들어 보려고 합니다. (물론 실제로 커피를 만들어주는 프로그램이 아니라 가상의 커피 자판기를 만드려는 것입니다)

espresso, latte, cappuccino 이렇게 3가지의 메뉴를 뽑을 수 있고, report를 입력했을 땐 남은 재료 현황, off를 입력했을땐 자판기 작동이 멈추도록 프로그램을 짜려고 합니다.

먼저 아래의 코드를 복사, 붙여넣기 한 후 몇 번 동작시켜서 자판기의 구조를 파악해보시길 바랍니다.


# current resources status
water = 1000
milk = 600
coffee = 300
money = 0

# coins setting / quarters : 0.25, dimes : 0.10, nickles : 0.05, pennies : 0.01
quarter = 0.25
dime = 0.10
nickle = 0.05
penny = 0.01

def running() :
"""coffee machine running"""
global water, milk, coffee, money
# is resources sufficient? (if not, print current status)
switch = True
while switch:
# prompt user by asking "what would you like?? (espresso/latte/cappuccino) : "
question = input("What would you like? espresso(1.5$) / latte(2.5$) / cappuccino(3.0$) : ")

# report function (shows current resources up. hidden function for maintainers)
if question == "report":
print(f"Current stock \n water : {water}ml \n milk : {milk}ml \n coffee : {coffee}g \n money : {money}$")
continue
elif question == "off":
switch = False

# coin insert question and make progress
input_quarter = float(input("How many quarters?(0.25$) : "))
input_dime = float(input("How many dimes(0.10$) : "))
input_nickle = float(input("How many nickles(0.05$) : "))
input_penny = float(input("How many pennies(0.01$) : "))

def coin_calculation(coin, input_coin) :
"""calculate inputted coins"""
coin *= input_coin
return coin

inputted_money = float(coin_calculation(quarter, input_quarter))

+ float(coin_calculation(dime, input_dime)) + float(coin_calculation(nickle, input_nickle))

+ float(coin_calculation(penny, input_penny))

# check inserted coins are enough or not / stock check / money check
if question == "espresso" and inputted_money > 1.5:
if water >= 50 and coffee >= 18:
print(f"Here is espresso and ${round(inputted_money - 1.5, 2)} in change")
money += 1.5
water -= 50
coffee -= 18
else:
if water < 50:
print("Sorry, there is no water enough.")
if coffee < 18:
print("Sorry, there is no coffee enough.")
elif question == "latte" and inputted_money > 2.5:
if water >= 200 and milk >= 150 and coffee >= 24:
print(f"Here is latte and ${round(inputted_money - 2.5, 2)} in change")
money += 2.5
water -= 200
milk -= 150
coffee -= 24
else:
if water < 200:
print("Sorry, water is not enough.")
if milk < 150:
print("Sorry, milk is not enough.")
if coffee < 24:
print("Sorry, coffee is not enough.")
elif question == "cappuccino" and inputted_money > 3.0:
if water >= 250 and milk >= 100 and coffee >= 24:
print(f"Here is cappuccino and ${round(inputted_money - 3.0, 2)} in change")
money += 3.0
water -= 250
milk -= 100
coffee -= 24
else:
if water < 250:
print("Sorry, there is no water enough.")
if milk < 100:
print("Sorry, there is no milk enough.")
if coffee < 24:
print("Sorry, there is no coffee enough.")
else:
print("You inserted not enough money or chose wrong menu.")


running()

몇번 작동 시킨 후, 다시 작성된 코드를 봅니다. 위의 코드는 작동하는데에는 문제가 없습니다. 하지만 자판기에 메뉴를 추가한다던지, 재료 사용량을 바꾼다던지, 가격을 바꾼다던지 등등.. 프로그램을 수정할 일이 생기면 어떨까요? 위의 코드는 수정하기에 조금 불편할 것입니다.

프로그램은 한 번 완성하면 끝나는 것이 아닙니다. 버그를 찾아 수정해야하고, 버전을 업데이트해야하는 경우도 많습니다. 그렇기 때문에 코드를 읽기 쉽게, 그리고 나중에 수정하기 쉽게 작성할 필요가 있습니다. 이번 포스팅에서는 그 중, 수정하기 쉽게 작성하기에 포커스를 맞춰볼 것입니다.



dictionary를 이용해 코드 간소화

#1
MENU = {
"espresso": {
"ingredients": {
"water": 50,
"coffee": 18,
},
"cost": 1.5,
},
"latte": {
"ingredients": {
"water": 200,
"milk": 150,
"coffee": 24,
},
"cost": 2.5,
},
"cappuccino": {
"ingredients": {
"water": 250,
"milk": 100,
"coffee": 24,
},
"cost": 3.0,
}
}
resources = {
"water": 1000,
"milk": 600,
"coffee": 300,
}
profit = 0
#4
def is_ingredient_sufficient(order_ingredients):
"""return True if ingredients are enough, return False if ingredients are not enough"""
for item in order_ingredients:
if order_ingredients[item]>resources[item]:
print(f"sorry. {item} is not enough.")
return False
return True

#6
def coin_process():
"""insert coins and sum up how much is it"""
print("please insert coins")
total = float(input("How many quarters?(0.25$) : ")) * 0.25
total += float(input("How many dimes?(0.10$) : ")) * 0.10

total += float(input("How many nickles?(0.05$) : ")) * 0.05

total += float(input("How many pennies?(0.01$) : ")) * 0.01

return total

#8
def is_transaction_successful(money_inputted, beverage_cost):
"""Return True if money is enough. return False if money is not enough"""
if money_inputted >= beverage_cost:
charge = round(money_inputted - beverage_cost, 2)
print(f"${charge} in charge.")
global profit
profit += beverage_cost
return True
else :
print("Sorry. That is not enough money.")
return False

#10
def make_coffee(ordered_ingredients, beverage_name):
"""Deduct the required ingredients from the resources"""
for item in ordered_ingredients:
resources[item] -= ordered_ingredients[item]
print(f"Here is your {beverage_name}.")

#2
is_on = True
while is_on:
#3
choice = input("What would you like? espresso(1.5$) / latte(2.5$) / cappuccino(3.0$) : ")
if choice == "off":
is_on = False
elif choice == "report":
print("Current stock")
print(f"water : {resources['water']}ml")
print(f"milk : {resources['milk']}ml")
print(f"coffee : {resources['coffee']}g")
print(f"money : ${profit}")
else:
#5
drink = MENU[choice]
if is_ingredient_sufficient(drink['ingredients']):
#7
payment = coin_process()
#9
if is_transaction_successful(payment, drink['cost']):
#11
make_coffee(drink['ingredients'], choice)

이번에는 각 메뉴에 들어가는 재료, 비용을 딕셔너리로 만든 후 다시 코드를 작성하였습니다.

이제 메뉴, 재료, 가격 등을 수정하려면 딕셔너리 내부 위주로하여 쉽게 수정하실 수 있을 것입니다.


그리고 코드를 작성한 순서를 매겨보았습니다. 

while 반복문 안에 커피를 뽑는 과정을 작성하면서 필요한 함수들이 생기면 추가하는 방식으로 작성하였습니다.




*이 글은 Udemy 강좌 100 Days of Code - The Complete Python Pro Bootcamp for 2021의 Day 15 (intermediate) - Local Development Environment Setup & Coffee Machine Project 내용을 바탕으로 작성하였습니다.

(URL : https://www.udemy.com/course/100-days-of-code/)


블로그 이미지

방구석 세계인

관심분야 : 외국어 학습, 프로그래밍, 책 리뷰 등...

,

베트남어 어휘의 6~70%는 한자어

 한국어의 어휘는 크게 3가지 범주 - 고유어, 한자어, 외래어 - 로 나눌 수 있습니다. 그리고 그 중에서 한자어가 전체 어휘의 6~70%를 차지합니다. 베트남어도 한국어와 마찬가지입니다. 베트남어 어휘는 고유어, 한자어, 외래어로 나뉘며, 한자어가 전체 어휘의 6~70%를 차지합니다. 따라서 한자가 베트남어에서 어떻게 사용되는지 안다면 베트남어 어휘력을 비약적으로 향상시킬 수 있을 것입니다.

 그래서 저는 베트남어에서 많이 쓰이는 한자를 추려서 뜻과 음, 그리고 해당 한자가 사용된 단어를 소개하는 시리즈를 만드려고 합니다. 


 이번 포스팅에선 (떼 부)라는 한자는 베트남어에서 어떻게 사용되는지 알아볼 것입니다.


 (떼 부)


네이버 한자 사전에서 (떼 부)를 검색하면 아래처럼 결과가 나올 것입니다.



네이버 한자 사전에서는 (떼 부)의 16가지의 뜻에 대해 설명하고 있습니다. 이러한 16가지의 뜻 중에서 많이 쓰이는 뜻을 꼽자면 부분, 부서, 곳, 장소 정도가 있겠습니다.

그럼 베트남어에서는 어떻게 쓰이는지 알아보겠습니다.


bộ

뜻 : 떼 (bộ, ngành, khoa)

사용단어

bộ phận 部分 (부분) *뜻 : 특정 임무를 수행하는 각 부문

cục bộ 局部 (국부) *뜻 : 전체의 일부, 전체 과정의 일부

toàn bộ 全部 (전부)

bắc bộ 北部 (북부)

nam bộ 南部 (남부)

đảng bộ 黨部 (당부)

chi bộ 支部 (지부) *정당(政黨)의 지부라는 의미로 주로 사용

bộ tài chính 部財政 (부재정) *뜻 : 재무부

bộ ngoại giao 部外交 (부외교) *뜻 : 외교부

bộ trưởng 部長 (부장) *뜻 : 각 부서의 장관

bộ lạc 部落 (부락)


블로그 이미지

방구석 세계인

관심분야 : 외국어 학습, 프로그래밍, 책 리뷰 등...

,

While 반복문

While 반복문은 특정 조건을 만족하면 반복문 안의 내용이 무한히 반복되도록 만드는 구문입니다.


#while loop

while True:
question = input("Do you like fruit? type Y or N : ")

위의 코드를 보겠습니다. True라는 조건에 맞으면, "Do you like fruit? type Y or N : "라는 질문이 계속 반복되는 구조입니다.


그럼 N을 입력했을 때 질문을 멈추게 하려면 어떻게 해야할까요?


break

#break

while True:
question = input("Do you like fruit? type Y or N : ")
if question == "N":
break

위의 코드처럼 break를 추가하면 반복문을 멈추게 할 수 있습니다. 이제 N을 입력하면 더 이상 질문이 반복되지 않고 종료될 것입니다.


continue

#continue

while True:
question = input("Do you like fruit? type Y or N : ")
if question == "N":
break
elif question == "Y" :
question2 = input("Do you like apple? type Y or N : ")

이번엔 Y를 입력했을 때 "Do you like apple? type Y or N : " 라는 질문이 이어지도록 코드를 추가하였습니다. 두번째 질문에서 N를 입력했을 때, 프로그램을 끝내지 않고 다시 첫번째 질문으로 돌아가려면 어떻게 해야할까요?


#continue

while True:
question = input("Do you like fruit? type Y or N : ")
if question == "N":
break
elif question == "Y" :
question2 = input("Do you like apple? type Y or N : ")
if question2 == "N":
continue
else :
print("I'll give you an apple.")
break

그렇다면 continue를 추가하면 됩니다. 이제 두번째 질문에서 N으로 답하면 프로그램이 끝나지 않고 다시 첫번째 질문으로 돌아가게 될 것입니다.


블로그 이미지

방구석 세계인

관심분야 : 외국어 학습, 프로그래밍, 책 리뷰 등...

,

베트남어 어휘의 6~70%는 한자어

 한국어의 어휘는 크게 3가지 범주 - 고유어, 한자어, 외래어 - 로 나눌 수 있습니다. 그리고 그 중에서 한자어가 전체 어휘의 6~70%를 차지합니다. 베트남어도 한국어와 마찬가지입니다. 베트남어 어휘는 고유어, 한자어, 외래어로 나뉘며, 한자어가 전체 어휘의 6~70%를 차지합니다. 따라서 한자가 베트남어에서 어떻게 사용되는지 안다면 베트남어 어휘력을 비약적으로 향상시킬 수 있을 것입니다.

 그래서 저는 베트남어에서 많이 쓰이는 한자를 추려서 뜻과 음, 그리고 해당 한자가 사용된 단어를 소개하는 시리즈를 만드려고 합니다. 


 이번 포스팅에서는 (입을, 당할 피)이라는 한자가 베트남어에서 어떻게 사용되는지 알아볼 것입니다.


 被(입을, 당할 피)


네이버 한자 사전에서 (입을, 당할 피)를 검색하면 아래와 같은 결과가 나올 것입니다.


 네이버 한자 사전에서는 (입을, 당할 피)의 21가지 뜻에 대해 설명하고 있습니다. 원래 뜻은 (옷 따위를) 입다 지만, 시간이 지나면서 (피해를)입다, 당하다 의 뜻으로 더 많이 쓰이게 되었습니다. 물론 21가지의 뜻을 모두 외우는 것은 비효율적인 일이고(피해를)입다, 당하다의 뜻만 기억해도 상관없습니다.


bị

뜻 : 입다, 당하다 (mặc, phải chịu, mắc phải)

사용단어

bị động 被動 (피동)

bị hại 被害 (피해)

bị cáo 被告 (피고)


블로그 이미지

방구석 세계인

관심분야 : 외국어 학습, 프로그래밍, 책 리뷰 등...

,