wecode TIL day 7 (Oct 25)

Jae Hoon Shin, 신재훈, Noah·2020년 10월 25일
0

위코드에서 첫 번째 일요일, 집에서 좀 쉬고 점심을 먹고 널널하게 위코드에 와서 시작.

For Loops

if 가 억대로 늘어나면 대체할것이 바로 FOR !! 위에서 한 assignment중에 받은 리스트 중에 홀수 이면 지우는 과제가 있었는데 if문으로 도배되어있었다. 그걸 해결하는 코드! 솔직히 더 복잡한거 같은데
익숙해지면 if문을 여러번 쓰는거 보다 훨씬 간결하다. 그리고 애초에 리스트가 1억개면 if문을 1억개 쓸수도 없는 노릇 아닌가. 밤새서 쓰면 되지

For 구문의 문법은 다음과 같다.리스트의 요소를 한번에 한개씩 가지고 for 구문 안에 있는 코드를 실행하게 됩니다.

For 문은 list 뿐만이 아니라 tuple, set 등 다른 자료구조와도 사용할 수 있습니다.

Break

리스트가 가지고 있는 요소의 수 만큼 for 구문에 속해있는 코드를 실행하는데 이걸 iteration 이라고 합니다. 리스트가 5개의 요소를 가지고 있으면 5iterations이라고 합니다. 5번 반복이라는 말!
for loops = for 반복구문
이때 break를 쓰면 반복문에서 빠져 나오게 됩니다. 사진을 보고 잘 이해하기 바랍니다.

Continue

break처럼 for 구문에서 완전히 빠져나오는 것은 아니고 다음요소, 즉 다음 iteration으로 넘어가고 싶을 때는 continue! !

Nested For Loops

if 문과 마찬가지로 for 구문도 nesting이 가능합니다.
위 example을 입력하면

1 * 10 == 10
1 * 20 == 20
1 * 30 == 30
1 * 40 == 40
1 * 50 == 50
2 * 10 == 20
2 * 20 == 40
2 * 30 == 60
2 * 40 == 80
2 * 50 == 100
3 * 10 == 30
3 * 20 == 60
3 * 30 == 90
3 * 40 == 120
3 * 50 == 150
4 * 10 == 40
4 * 20 == 80
4 * 30 == 120
4 * 40 == 160
4 * 50 == 200
5 * 10 == 50
5 * 20 == 100
5 * 30 == 150
5 * 40 == 200
5 * 50 == 250

삐빅 👷🏼‍♂️ 🚧 ⛏ 삽질 구간입니다.

Assignment

Input 으로 주어진 리스트에서 오직 한번만 나타나는 값 (unique value)을 가지고 있는 요소는 출력해주세요.

예를 들어, 다음과 같은 리스트가 주어졌다면:

[1, 2, 3, 4, 5, 1, 2, 3, 7, 9, 9, 7]

다음과 같이 출력되어야 합니다.

4
5


my_list = [s for s in input().split()] #주어진 코드

new_list = []
for x in my_list:
  if x not in new_list:
    new_list.append(x)
  else:
    new_list.remove(x)
print (new_list)

처음에 빈 리스트를 만들고,
거기에 unique 한 숫자들을 채우자는 생각이였다.
만약 이 숫자가 없다면 빈 리스트 (new_list)에 넣자 -> 유니크한 숫자만 있는 리스트 완성!
그런데 여기서 4랑 5만 어떻게 남기지 라는 생각에 30분간 삽질 했다.
예시처럼
4
5
이렇게 세로로 하나씩 프린트를 할 방법을 못찾았기 때문이다.
모델 솔루션을 보니까
이렇게 세로로 하나씩 프린트를 할려면 리스트가 아니라
새 변수를 0 으로 맞춰놓고, 한바퀴 다돌고 4 찾고 break하고, 변수 += 1 헤서
그다음에 5 찾고 이런식으로 해야되는데,,, 내가 만든 방법은 4랑 5를 동시에 찾아버려서,, 일단 4,5 이렇게라도 나오게 중복된거 .remove해서 지우고 submit했더니 통과됐다. 뭔가 찝찝하지만, 의도는 맞았으니까,,? 패스

[for문] 1.Iterate with Python For Loops

일반적인 반복문과 같은 형태는 range가 있습니다.
range의 경우 시작조건, 종료조건, 스텝(생략 가능)을 쓸 수 있습니다.
레인지를 이용해서 0부터 4까지 리스트에 숫자를 집어넣는 코드는 다음과 같습니다.
위 사진의 출력값은

[0,1,2,3,4] 0부터 5개 !

Assignment

반복문을 사용하여 1부터 5까지 my_list에 추가하는 함수 for_loop()를 완성해 주세요.

def for_loops():
	# 아래의 코드는 수정하지 마세요.
	my_list = []
	
	# 아래에 코드를 작성해 주세요.
	for i in range(1,6): # 1부터 시작, 6에서 끝 (비포함)
	  my_list.append(i)
	
	# 아래의 코드는 수정하지 마세요.
	return my_list

[for문] 2.Iterate Odd Numbers With a For Loop

위에서 배웠던 세번째 옵셔널 인자인 step 을 사용해서 반복문의 증가 폭을 조절할 수 있습니다. 결과는 [0,2,4,6,8]

Assignment

my_list에 1부터 9까지 홀수를 입력하는 함수 for_loops()를 완성 해주세요.

def for_loops() :
	# 아래의 코드는 수정하지 마세요.
	my_list = [];
	
	# 아래에 코드를 작성해 주세요.
	
	for i in range(1,10,2):
	  my_list.append(i)
	
	# 아래의 코드는 수정하지 마세요.
	return my_list

방금 위에서
for i in range(1,6): # 1부터 시작, 6에서 끝 (비포함)
라고 내가 쓰고 이해했는데
이번에 할 때 오 쉬운거다 하고 생각없이 코드 쓰다가
for i in range(1,9,2): 이렇게 치고 돌리고 나서 바로 반성했다.

[for문] 3.Count Backwards With a For Loop

반복문은 거꾸로도 수행할 수 있습니다. our_list 의 결과는 다음과 같습니다. [10,8,6,4,2]

Assignment

my_list에 9부터 1까지 홀수를 저장하는 list_for_loops()함수를 완성해주세요.

def list_for_loops() :
	# 아래의 코드를 수정하지 마세요.
	my_list = [];
	
	# 아래에 코드를 작성해 주세요.
	
	for i in range(9,0,-2):
	  my_list.append(i)
	# 아래의 코드를 수정하지 마세요.
	return my_list;

[for문] 4.Iterate Through an Array with a For Loop

리스트의 요소를 반복문을 통해 요소를 호출할 수 있습니다.
list는 순서가 있는 자료형이고, 이를 순환할 수 있습니다.
따라서 for문을 통해 바로 리스트를 접근하면 해당 요소를 각각 회전마다 출력할 수 있습니다.

Assignment

my_list의 요소의 총 합을 리턴하는 list_loop함수를 완성해 주세요.

def list_loop() :
	# 아래의 코드를 수정하지 마세요.
	my_list = [ 2, 3, 4, 5, 6]
	
	# 아래에 코드를 작성해 주세요.
	total = 0
	for i in my_list:
	  
	  total += i
	
	# 아래의 코드를 수정하지 마세요.
	return total

5분 삽질; 위 코드를 자신있게 적어갔다. 하지만 output이 6 이라는 에러가 떴다. 왜 6 인가 하고 곰곰히 코드를 살폈는데

for i in my_list:
	  total = 0
	  total += i

이렇게 되어있었다. for 문 아래에
total을 바로 넣고 싶은 마음에 저기에 넣어 버린것이다.
저러니까 첫번째가 지나고 두 번째 i 가 왔을때 total 은 또 0으로 초기화가 됬을 것이고,,, 그렇게 문제를 해결했다.

assignment

get_all_letters 함수를 작성하세요.

단어가 주어졌을때, "get_all_letters" 함수는 주어진 단어에 포함된 모든 문자를 담고 있는 배열을 반환합니다.

Notes:
만약 빈 문자열이 주어졌다면, 빈 배열을 반환해야 합니다.
반드시 for 문을 이용해야 합니다.
문자열도 순환이 가능한 자료형 입니다.

output = get_all_letters('Radagast');
print(output); # --> ['R', 'a', 'd', 'a', 'g', 'a', 's', 't']

삐빅 👷🏼‍♂️ 🚧 ⛏ 삽질 구간입니다.

정답코드

def get_all_letters() :
  #아래의 코드를 수정하지 마세요.
  str_list = []
  mission_str = "wecode"
  
  #아래에 코드를 작성해주세요.
  for i in list(mission_str):
    str_list.append(i)
  
  #아래의 코드를 수정하지 마세요.
  return str_list

첫 번째로 해결해야 했던 것: "wecode" 의 첫번째가 w, 두 번째가 e 이런식인가? 그냥 한 단어아닌가? 심지어 리스트도 아니고 스트링이지 않나? 이런 생각에
for i in (mission_str):
str_list.append(i)
여기서 앞으로 나아가질 못했다. 아무리 봐도 맞는거 같은데 저 단어를 어떻게 한글자씩 띄우는지; 30분은 소비했던것 같다.
결국 구글링을 하였는데, list() 함수를 쓰면 단어가 리스트 형으로 바뀐다는것이였다. 바로 단어 하나 써서 해결했다.

While Loops

for 구문은 list나 set, dictionary 등의 data structure 등을 기반으로 코드블록을 반복 실행합니다.

하지만 가끔은 list같은 data structure 기반이 아니더라도 코드블록을 반복해야 할 때가 있습니다.

while 구문은 특정 조건문이 True 일동안 코드블록을 반복 실행 합니다.

For문과 동일하게 break는 while문을 강제종료 하고
continue는 다음 iteration으로 넘어갑니다.

While Else

즉 while문이 종료되면 else 문이 실행된다는 뜻입니다.
example image

Assignment

find_smallest_integer_divisor 라는 이름의 함수를 구현해 주세요.

find_smallest_integer_divisor 함수는 하나의 parameter를 받습니다.
Parameter 값은 integer만 주어집니다.
find_smallest_integer_divisor 주어진 parameter 값을 나눌 수 있는 1을 제외한 최소의 양의 정수를 리턴하여야 합니다.

예제:

find_smallest_integer_divisor(15) == 3

접근방법:
값을 나눌 수 있는 1을 제외한
최소한의 양의 정수를 리턴?

15를 넣으면 == 3
15는 5로도 나눠 지고 3으로도 나눠 지고 1로도 나눠지는데 1은 안되고, 5랑 3중에 작은거,

나눠지는 정수는 % == 0 딱맞게 나눠진다는거고,

더 작은거는 어떡하지? 아니 제일 작은걸 어떻게

결과값 == 1 이면 안댐

first try:

def find_smallest_integer_divisor(number): 
  a = 0
  while a % number != 0:
    number += 1
  else:         
    break
  return number

뭔가 이상했다, number를 나누는게 아니라 number에서 a를 나눠야 되지않나? 그리고 number가 커지면 안되지않나,,?
return a , return number의 차이를 모르겠다.

second try:

def find_smallest_integer_divisor(number): 
  a = 0
  while number % a != 0:
    a += 1
  return number  

zero division 에러가 떴다.
a =1 로 바꾸고,
return a 로 바꿨다.
a = 1 로 하니까 1로 나눠지나 보다.
a = 2 로 바꾸니까 pass

접근은 잘 했는데, 코드 빌딩을 할 때 큰 기둥은 세웠는데 세부적인 개념이 부족했다. return 개념을 잘 이해 못한것 같다.

Looping Dictionary

리스트와 똑같이 dictionary도 for loop을 사용할 수 있습니다.

Looping Dictionary With Values Instead of Keys

values 함수를 다음 처럼 사용하면 for 반복구문에서 key 값 대신에 value 값들을 가지고 반복 로직을 실행 할 수 있습니다.

Looping Dictionary With Both Keys And Values

Key와 value 값 둘다 가지고 for 구문을 실행하기 위해서는 items 함수를 사용하면 됩니다.
Dictionary의 items 함수는 key와 value를 tuple로 리턴해줍니다.

Assignment

Input으로 주어진 list의 각 요소(element)가 해당 list에 몇번 나타나는지 수를 dictionary로 만들어서 리턴해주세요. Dictionary의 key는 list의 요소 값이며 value는 해당 요소의 총 빈도수 입니다.

예를 들어, 다음과 같은 list가 input으로 주어졌다면:

my_list = ["one", 2, 3, 2, "one"]

다음과 같은 dictionary가 리턴되어야 합니다.

{
"one" : 2,
2 : 2,
3: 1
}

나의 접근 방법:
일단
빈 딕셔너리 만들어야함
리스트안에 갯수를 세어야함
딕셔너리형으로 만들어야함
그리고 빈 딕셔너리에 넣어야함

def get_occurrence_count(my_list):
  # 이 함수를 구현 해주세요
  dic = { }
  for a in my_list:
    dic[a] = my_list.count(a)
    dic = dic.append(a)
  return dic

dic = dic.append(a)
AttributeError: 'dict' object has no attribute 'append'
에러가 나왔는데, 딕셔너리는 append가 없다는데? 라고 바로 생각 못하고
dict? 내 변수 이름은 dic 인데 뭐지 에러가 오타낫나?
응 그럴리 없지 내가 틀리지 컴퓨터가 틀리나.

dic = dic.append(a)

라인을 지웠더니 pass!

def get_occurrence_count(my_list):
  # 이 함수를 구현 해주세요
  dic = { }
  for a in my_list:
    dic[a] = my_list.count(a)
  return dic
profile
🇰🇷🇺🇸 #Back-End Engineer

0개의 댓글