21.2.10~11

<코딩도장 심사문제 다시 풀며 확인한 것>

정말 많이 까먹었다. 다른거 한다고 감이 많이 죽은 것 같다. 다시 공부해야겠다.

  1. 심사문제 22.10 append와 pop 이용하기
a, b = map(int, input().split())
result = []
for i in range(a, b+1):
  result.append(2**i)
result.pop(1)
result.pop(len(result)-2)
print(result)

계속 막혔던 것 : int는 iterable하지 않다고 하는데 계속 반복문을 돌리려고 했던 점.

  1. 심사문제 19.6
n = int(input())
for i in reversed(range(n)):
  for j in range(n):
    if i > j:
      print(' ', end = '')
    else:
      print('*', end='')
  for j in range(n):
    if i < j:
      print('*', end='')

  print()

reversed가 위에 있는 이유 : 세로를 기준으로 양 옆으로 별을 그려줘야 하므로. 그래서 for j 반복문도 두 번이나 했던 것임.(양 옆)

여기서 i 즉 세로는 개행문자 역할. j가 얼만큼 갈 것인지 정해주는 기준이 됨. 그러니 i, j 크기 비교에 따라서 별줄이 길어지고 짧아지고가 결정 됨.

  • 개행문자 : 새줄 문자(newline)는 텍스트의 한 줄이 끝남을 표시하는 문자 또는 문자열이다(EOL). 컴퓨터에게 줄을 바꾸라고 명령하는 문자. 옛날 프린터의 줄 바꿈 속도나 좌우로 바뀌어지는 타이밍 때문에 생긴 문자인 듯.(by 위키백과)

<기억하고 싶은 내용>

  • 리스트(튜플도 가능) 표현식
>>> a = [i for i in range(10)]        # 0부터 9까지 숫자를 생성하여 리스트 생성
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> b = list(i for i in range(10))    # 0부터 9까지 숫자를 생성하여 리스트 생성
>>> b
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a = [i for i in range(10) if i % 2 == 0]    # 0~9 숫자 중 2의 배수인 숫자(짝수)로 리스트 생성
>>> a
[0, 2, 4, 6, 8]
  • map 뜻 : 리스트 요소를 지정된 함수로 처리해주는 함수.(리스트 요소와 함수의 연결고리)

  • 문자열 위치 찾기 : 있으면 인덱스, 없으면 -1을 반환해 줌 ; 특정 문자 찾기 조건식 등 응용 가능.

>>> 'apple pineapple'.find('pl')
2
>>> 'apple pineapple'.find('xy')
-1

그 외 문자열 포멧팅은 기회가 될 때마다 참조하여 익숙해지기.

  • 반복문으로 딕셔너리 조작하기(키만, 값만도 출력 가능)
>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> for key, value in x.items():
...     print(key, value)
...
a 10
b 20
c 30
d 40
  • 딕셔너리 표현식 : if 사용할 경우 값을 제거하거나 해야 할 때는 for문이 제대로 동작하지 않음.
>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> x = {key: value for key, value in x.items() if value != 20}
>>> x
{'a': 10, 'c': 30, 'd': 40}
  • 세트 : 주로 순서 없이, 중복 없이 사용할 때 많이 사용함.(알고리즘 퀴즈에서 주로 그렇게 쓰는 걸 많이 봄)
    (표현식)
>>> a = {i for i in 'apple'}
>>> a
{'l', 'p', 'e', 'a'}
  • 파일 열고 닫기

    파일의 내용을 전체 가져오는 것은 read
    파일의 내용을 한 줄 씩 읽는 것은 readline
    파일의 내용을 한 줄 씩 읽어 리스트 형태로 가져오는 것은 readlines

with open('hello.txt', 'r') as file:    # hello.txt 파일을 읽기 모드(r)로 열기
    line = None    # 변수 line을 None으로 초기화
    while line != '':
        line = file.readline()
        print(line.strip('\n'))    # 파일에서 읽어온 문자열에서 \n 삭제하여 출력

with open('hello.txt', 'r') as file:    # hello.txt 파일을 읽기 모드(r)로 열기
    lines = file.readlines()
    print(lines)
  • 연습문제2 27.5 내 풀이
with open('words.txt', 'r') as file:
  count = 0
  s = file.read()
  LIST = s.split('\n')
  for i in LIST:
    if len(i) <=10:
      count += 1
  print(count)

정답 풀이

words = file.readlines()
for word in words:
    if len(word.strip('\n')) <= 10:
        count += 1

정답은 아예 리스트로 가져와서 for문을 돌렸고 나는 전체를 가져온 다음 리스트로 만든 뒤 for 문을 돌렸다.

  • 재귀 함수 양식
def hello(count):
    if count == 0:    # 종료 조건을 만듦. count가 0이면 다시 hello 함수를 호출하지 않고 끝냄
        return
    
    print('Hello, world!', count)
    
    count -= 1      # count를 1 감소시킨 뒤
    hello(count)    # 다시 hello에 넣음
 
hello(5)    # hello 함수 호출
  • 팩토리얼 양식
def factorial(n):
    if n == 1:      # n이 1일 때
        return 1    # 1을 반환하고 재귀호출을 끝냄
    return n * factorial(n - 1)    # n과 factorial 함수에 n - 1을 넣어서 반환된 값을 곱함
 
print(factorial(5))
실행 결과
  • 연습문제 31.4 내 풀이
def is_palindrome(word):
  if len(word) < 2:
    return True
  if word == word[::-1]:
    return True
  else:
    return False

print(is_palindrome('hello'))
print(is_palindrome('level'))

재귀 통한 참 거짓 먼저 거른 뒤 회문 식으로 마무리

정답 풀이

if len(word) < 2:
        return True
    if word[0] != word[-1]:
        return False
    return is_palindrome(word[1:-1])

word를 인덱스 단위로 쪼개어 계속 확인해가는 재귀 풀이.

그 뒤에 내용은 추후 위코드에서 다시 멘토님들과 공부해야겠다. 일단 함수까지 정리 끝.

좋은 웹페이지 즐겨찾기