중간시험 1차

Jaeyong Park·2021년 11월 14일
0

Log In

컴퓨터를 사용해서 무언가를 한다면 더 편리하게 하고 싶다는 욕심이 있다.
나의 실력이 얼마나 낮은지 다시 한번 확인하고 겸손히 공부해야겠다.

1번

짝수 홀수 출력하기.

def is_even(num):
    # 아래 코드를 입력해주세요.
    if num%2 ==0:
      return "짝수 입니다."
    else:
      return "짝수가 아닙니다."


이건 너무나 당연하게 푸는 문제. 딱히 다른 풀이법이 있을까? 라는 고민이 든다. deter = num%2 로해서 하면 조금 더 이뻐보이려나.

2번

"calculate_total" 함수를 작성하세요.
팁과 세금을 제외한 식사값이 주어졌을때, "calculate_total" 함수는 팁과 세금이 포함된 총 식사값을 반환합니다.)

Notes:
세금은 9.5% 팁은 15% 로 계산하세요.
팁을 계산할때 세금을 포함하여 계산하지 마세요.

def calculate_total(amount):
	# 아래 코드를 작성해주세요.
  return float(str(round(amount*1.245, 2)))

print(calculate_total(20)) # --> 24.9

코드를 줄여야 된다는 생각에 결국 9.5%의 세금과 팁이 15%고 서로 겹치지 않는다면 24.5%가 추가될 것이고 상품값*(1+0.245)하면 되겠다 했는데 그렇게 하면 결과값이 24.900000000000002이 나온다. 예라이. 그래서 round를 해줬더니 뭐 또 형식이 안맞아서 결국 Float까지 적용해준다.(Str은 왜했는지 기억이 안남...)

def calculate_total(amount):
	tax = amount*0.095
  	tips = amount *0.15
  return tax + tip + amount

print(calculate_total(20)) # --> 24.9

아... 이러면 되는데.... 이게 더 로직으로 맞는게 나중에 세금이나 팁이 변했을 때를 생각한다면 그렇다. 하아. 바보.

3번

문자열이 주어졌을때, “-”를 기준으로 앞에 있는 문자열을 반환하세요.

def get_prefix(str):
    # 아래 코드를 작성해주세요.
    new_storage =[]
    for i in str:
      if i =="-":
        break
      else:
        new_storage.append(i)
    return ''.join(new_storage)
    
print(get_prefix('BTC-KRW'))

나름 짧게 짰다고 생각했다. 우선은 새로운 리스트가 필요했다. 각 알파벳을 저장할. 그리고 str안에 있는 요소 하나하나 돌면서 '-'를 만나기 전까지는 새로운 리스트에 그 알파벳들을 저장한다. '-'를 만나면 for문은 끝난다.
Return값은 각 알파벳들을 조합한 .join으로 받는다.

나름 나쁘지 않았다고 생각하지만 사실 더 간단한 코드가 있었다.
사실 함수는 자주쓰이니까 쓰라고 만들어놓은 것이다.

def get_prefix(str):
  return str.split('-')[0]

ㅗㅜㅑ.....

str이들어오면 '-'앞에서 split하고 그 앞까지를 하나의 리스트에 넣었다. 그리고 그 리스트의 index값 0을 호출. 캬아..... 배워야 산다.

4번

문자와 문자열이 주어졌을때, "get_find" 함수는 주어진 문자열에서 함께 주어진 문자가 나타나는 첫번째 위치를 반환합니다.
Notes:
문자열의 첫번째 문자는 인덱스 값 0 을 가집니다.
만약 문자열에 해당 문자가 여러번 나타나면, 첫번째로 나타나는 위치를 반환해야 합니다.
만약 문자가 문자열에 존재하지 않는다면, -1 을 반환해야 합니다.
find 함수를 사용하지 마세요.

def get_find(char, str):
    # 아래 코드를 작성해주세요.
    new_str = list(str)
    for i in str:
      if i == char:
        return new_str.index(i)
    return -1



output = get_find('a', 'I am a hacker')
print(output) # --> 2

이건 생각보다 답들이 거의 다 비슷했던것 같다. 좀 독특했던 풀이는 not in을 써서 푼 동기가 있었다.

5번

와... 내 멘탈 털린...

def find_longest_word(words):
  longest = words[0]
  
  for word in words:
    if len(longest) < len(word):
      longest = word
      
  return longest

어 근데 이거 submit을 제대로 안해서 그런지 원래 코드가 날아가서 비슷한 답. 이런 형태였다 나도. words[0]을 받아서 len(word)랑 len(longest)를 돌다가 word가 더 길면 longest에 끼워 넣고 longest를 반환하는 형태인데 모범답안도 있었다.

def find_longest_word(words):
	word_len = []
	for n in words:
		word_len.append((len(n), n))
	word_len.sort()
	return word_len[-1][1]

흠.... 이거 속도 해보니까 튜플써서 그런지 훨씬 빠르게 나온다. 아무래도 list보다는 tuple이라는 형태를 잘 쓰면 더 효과적일 것 같다.

마지막 옆의 동기의 답.

def find_longest_word(words):
    # 아래 코드를 작성해주세요.
    return max(words,key =len)

Log Out

하아..knowledge is power....베이컨형 보고싶다.

Knowledg is power. - Francis bacon
프랑스는 베이컨이다.

profile
01 Hello World. Login

0개의 댓글