무냐의 개발일지

[OSSU] <MITx 6.00.1x_Intro CS> Final Exam 본문

OSSU_CS coursework

[OSSU] <MITx 6.00.1x_Intro CS> Final Exam

무냐코드 2024. 4. 23. 15:21

 

👩‍💻 #1. Numbers to Mandarin

# Problem 3

# There are words for each of the digits from 0 to 10.
# trans = {'0':'ling', '1':'yi', '2':'er', '3':'san', '4': 'si', '5':'wu', '6':'liu', '7':'qi', '8':'ba', '9':'jiu', '10': 'shi'}

# Example Usage
# convert_to_mandarin('36') will return san shi liu
# convert_to_mandarin('20') will return er shi
# convert_to_mandarin('16') will return shi liu

 

💡 풀이

def convert_to_mandarin(us_num):
    '''
    us_num, a string representing a US number 0 to 99
    returns the string mandarin representation of us_num
    '''
    # FILL IN YOUR CODE HERE
    trans = {'0':'ling', '1':'yi', '2':'er', '3':'san', '4': 'si', '5':'wu', '6':'liu', '7':'qi', '8':'ba', '9':'jiu', '10': 'shi'}
    mandarin = []
    if us_num <= 10:
        return trans[str(us_num)]
    
    elif us_num <= 19:
        return trans['10'] + ' ' + trans[us_num%10]
    
    elif str(us_num)[-1] == '0':
        return trans[str(us_num//10)] + ' '+ trans['10']
    
    else:
        mandarin.extend([trans[str(us_num//10)], trans['10'], trans[str(us_num%10)]])
        return ' '.join(mandarin)
    
print(convert_to_mandarin(10))
print(convert_to_mandarin(55))
print(convert_to_mandarin(30))
print(convert_to_mandarin(35))
print(convert_to_mandarin(99))

#shi
#wu shi wu
#san shi wu
#jiu shi jiu

 

✍️ 해설

0자리는 그대로

10단위는 앞에 1을 빼야함

10의 배수는 뒤에 ling을 발음하지 않음

 

이 세가지 규칙을 적용하여 나눠서 쓰면 된다

 

 

🥳 배운점

// , % 을 사용하여 내 힘으로 매우 잘 풀어냈다 ! 


 

👩‍💻 #2.

# Problem 4
# 15.0/15.0 points (graded)
# Write a Python function that creates and returns a list of prime numbers between 2 and N, inclusive,
# sorted in increasing order. A prime number is a number that is divisible only by 1 and itself.
# This function takes in an integer and returns a list of integers.

💡 풀이 #1

def primes_list(N):
    '''
    N: an integer
    '''
    # Your code here
    # Attempt_1
    res = [2]
    prime = 3
    while prime < N:
        for i in res:
            if prime % i == 0:
                break
        else:
            res.append(prime)
        prime += 1

    return res
        
print(primes_list(20))
#[2, 3, 5, 7, 11, 13, 17, 19]

 

💡 풀이 #2

def primes_list(N):
	res = []
	for i in range(2, N+1):
		for j in range(2, i):
		if i % j == 0:
			break
		else:
			res.append(i)
	return res


print(primes_list(20))
#[2, 3, 5, 7, 11, 13, 17, 19]

 

✍️ 해설

파이썬에서 else 문은 for 루프나 while 루프가 모두 종료될 때 실행되는 블록입니다. else 문은 if문과 짝을 이루지 않습니다. 오히려 if, elif, else는 하나의 논리 블록을 형성합니다.

 

 for 루프 블록 안에 있는 else 문은 해당 루프가 완전히 실행된 후에 실행되는 것입니다. break 문이 실행되지 않으면 else 블록이 실행되어야 합니다. 그래서 for문을 한블록, else문을 별도의 한 블록으로 만든다 

 

 

🥳 배운점

위의 문제풀이에서, else문은 반드시 if문 뒤에 와야하는 줄 알았는데, if문에서는 앞에가 돌면 else까지 안돈다. 하지만 우리는 else도 다 돌려야하기 때문에  for 문 밖에다가 else문을 돌려야한다

 


 

👩‍💻 #3.

 

 

💡 풀이

def dict_interdiff(d1, d2):
    '''
    d1, d2: dicts whose keys and values are integers
    Returns a tuple of dictionaries according to the instructions above
    '''
    # Your code here
    intersect = {}
    diff = {}
    
    for i in d1.keys():
        if i not in d2:
            diff[i] = d1[i]
        else:
            intersect[i] = d1[i] + d2[i]
            
    for i in d2.keys():
        if i not in d1.keys():
            diff[i] = d2[i]
            
    return(intersect, diff)



d1 = {1:30, 2:20, 3:30, 5:80}
d2 = {1:40, 2:50, 3:60, 4:70, 6:90}
print(dict_interdiff(d1, d2))

 

✍️ 해설

d1, d2에 대한 경우를 각각 루프 돌려줘야한다

 

🥳 배운점

딕셔너리를 생성할 때는 , 빈 딕셔너리를 만든 후, dict[key] = value  이런 식으로 매칭해주자


 

👩‍💻 #4.

# Write a function is_triangular that meets the specification below. A triangular 
# number is a number obtained by the continued summation of integers starting 
# from 1. For example, 1, 1+2, 1+2+3, 1+2+3+4, etc., corresponding to 
# 1, 3, 6, 10, etc., are triangular numbers.

# def is_triangular(k):
#     """
#     k, a positive integer
#     returns True if k is triangular and False if not

 

💡 풀이

def is_triangular(k):
    """
    k, a positive integer
    returns True if k is triangular and False if not
    """
    triangular = 0
    num = 1
    while triangular < k:
        triangular += num
        num += 1
    return k == triangular

print(is_triangular(10))
#True
print(is_triangular(21))
#True
print(is_triangular(5))
#False
print(is_triangular(11))
#False
print(is_triangular(20))
#False

 

✍️ 해설

1,3,6,10,15,21 .... 등 triangular 숫자 안에 k 가 들어가는지 판별하는 문제이다.

 

🥳 배운점

 

잘 풀었다 ! num은 1, 2, 3, 4, ... 하나씩 올라가는 숫자고

triangular는 이 num들을 순서대로 더해주는 거니까. k에 도달하기 전까지 해보고 비교하면 되는 간단한 문제!

중간고사보다 기말이 좀 더 쉬웠던 거 같다.