[Coding Test]Python Programming HW review

Author

SEOYEON CHOI

Published

August 26, 2023

1.

HW: 0315

02wk-1: 파이썬의 자료형 (2)

아래와 같은 문자열이 있다고 하자.

a='Jeonbuk National University' 

1. 적당한 인덱싱을 통하여 출력결과가 아래와 같도록 하라.

a.find('U')
17
a.find('y')
26
str(a)
'Jeonbuk National University'
a[a.find('U'):a.find('y')+1]
'University'

hint: University는 10글자이다.

2. 출력결과가 아래와 같도록 하는 코드를 작성하라. (lower 함수를 이용할 것)

a.lower()
'jeonbuk national university'

3. 아래의 코드를 관찰하고 isupper()의 기능이 무엇인지 스스로 정리해보라.

'A'.isupper()
True
'AA'.isupper()
True
'Aa'.isupper()
False
'aa'.isupper()
False
'aA'.isupper()
False

대문자인가 확인하는 코드!

'aA'.islower()
False

소문자인거 확인하는 코드!

4. 다음중 실행 불가능한 코드를 모두 골라라.

  1. ‘a’*2
'a'*2
'aa'
  1. ‘a’*‘2’
'a'*'2'
TypeError: can't multiply sequence by non-int of type 'str'
  1. ‘a’+2
'a'+2
TypeError: can only concatenate str (not "int") to str
  1. ‘a’+‘2’
'a'+'2'
'a2'

2.

HW 0315

02wk-2: 파이썬의 자료형 (3)

1. 길이가 0인 리스트를 만들어라. (비어있는 리스트를 만들어라)

(풀이1)

[]
[]

(풀이2)

list()
[]

2. 다음의 실행값 중 가장 큰 숫자가 나오는 보기를 골라라. (에러가 나는 코드는 정답에서 제외함)

(a) len(3.14) 
(b) len([3.14]) 
(c) len('3.14') 
len(3.14)
TypeError: object of type 'float' has no len()
a = 3.14;a?
Type:        float
String form: 3.14
Docstring:   Convert a string or number to a floating point number, if possible.
a.is_integer()
False
len([3.14])
1
a = [3.14];a?
Type:        float
String form: 3.14
Docstring:   Convert a string or number to a floating point number, if possible.
a.is_integer()
False
len('3.14') 
4
a = '3.14';a?
Type:        float
String form: 3.14
Docstring:   Convert a string or number to a floating point number, if possible.
a.is_integer()
False

3. 아래의 예제를 관찰하라.

'제 이름은 {}입니다'.format('abc')
'제 이름은 abc입니다'
'제 이름은 {}이고 사는곳은 {}입니다.'.format('abc','de')
'제 이름은 abc이고 사는곳은 de입니다.'

이 예제를 바탕으로 문자열에 포함된 .format()함수의 기능을 유추하라. 그리고 아래의 결과를 확인하라.

\(\to\) .format의 기능은 {}에 문자를 순서대로 넣어주는 역할.

string = '행사가 {}{}일-{}{}일 abc펜션에서 있다고 합니다. 자세한 일정 등은 다시 공지하겠습니다.' 
string.format(3,24,3,25)
'행사가 3월24일-3월25일 abc펜션에서 있다고 합니다. 자세한 일정 등은 다시 공지하겠습니다.'
string.format(1,1,2,2)
'행사가 1월1일-2월2일 abc펜션에서 있다고 합니다. 자세한 일정 등은 다시 공지하겠습니다.'

4. 아래의 예제를 관찰하라.

'abcdefg'.replace('g','u')
'abcdefu'

이 예제를 바탕으로 문자열의 .replace() 기능을 유추하라.

\(\to\) .replace의 기능은 ’g’를 ’u’로 바꿔준다.

5. 리스트자료형의 +와 * 연산을 이용하여 아래와 같은 list를 생성하라.

[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]
[1] + [2] * 2 + [3] * 3 + [4] * 4 + [5] * 5
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]

hint: 아래의 코드를 관찰해보세요

[1]*1+[2]*2 
[1, 2, 2]

6. 넘파이를 이용하여 아래와 같은 결과가 나오도록 코드가 작성하라.

\[\begin{bmatrix} 1 \\ 2 \end{bmatrix} + \begin{bmatrix} 11 \\ 22 \end{bmatrix} = \begin{bmatrix} 12 \\ 24 \end{bmatrix}\]

import numpy as np
np.array([1,2]) + np.array([11,22]) 
array([12, 24])
np.array([[1],[2]]) + np.array([[11],[22]])
array([[12],
       [24]])
  1. 아래와 같은 벡터가 있다고 하자.

\[\boldsymbol{a}= \begin{bmatrix} 12 \\ 24 \end{bmatrix}\]

넘파이를 이용하여 아래의 결과가 나오게 하는 코드를 작성하라.

\[2\boldsymbol{a}= \begin{bmatrix} 24 \\ 48 \end{bmatrix}\]

2 * (np.array([[1],[2]]) + np.array([[11],[22]]))
array([[24],
       [48]])
2 * np.array([12, 24])
array([24, 48])
2 * np.array([[12], [24]])
array([[24],
       [48]])

3.

HW 0320

03wk-1: 파이썬의 자료형 (4)

1. 아래의 코드를 관찰하고, sum()의 기능을 유추하라.

sum([1,0,1,0])
2

\(\to\) 원소의 합

sum([True,False,True,False])
2

\(\to\) True는 1로, False는 0으로 인식

2. 다음과 같은 리스트를 고려하자.

x = [80,60,80,90,55,85,95,100,35,70,75,65,95]
x
[80, 60, 80, 90, 55, 85, 95, 100, 35, 70, 75, 65, 95]

이를 수식으로 표현하면 아래와 같다.

\({\bf x} = [x_1,\dots,x_{13}]=[80,60,80,90,55,85,95,100,35,70,75,65,95]\)

리스트의 원소중 “\(x_i>80\)” 의 조건을 만족하는 원소는 모두 몇개인가?

hint: 리스트컴프리헨션과 sum()함수를 이용할 것

sum([xi >80 for xi in x])
5

my answer

sum([x[i] > 80 for i in range(len(x))])
5

3. 다음과 같은 리스트를 고려하자.

['A','B','C','D','A','A','B','A','F','C','C','C','A']
['A', 'B', 'C', 'D', 'A', 'A', 'B', 'A', 'F', 'C', 'C', 'C', 'A']

이 리스트에서 ‘A’ 혹은 ’B’의 숫자는 모두 몇개인가?

hint: 아래를 관찰

'A' < 'C'
True
'B' < 'C'
True
lst = ['A','B','C','D','A','A','B','A','F','C','C','C','A']
sum([l <'C' for l in lst])
7

my answer

lst = ['A','B','C','D','A','A','B','A','F','C','C','C','A']
sum([lst[i] < 'C' for i in range(len(lst))])
7

4. 아래와 같은 리스트가 있다고 하자.

\({\bf x} = [1,2,1,5,6,2,4,7]\)

\({\bf y} = [3,2,4,1,2,5,6,7]\)

이러한 벡터를 파이썬에서 표현하기 위해서 아래와 같은 리스트를 만들었다고 하자.

x=[1,2,1,5,6,2,4,7]
y=[3,2,4,1,2,5,6,7] 

리스트컴프리헨션을 이용하여

\[{\bf z}=[x_1^2+y_1^2, \dots, x_{8}^2+y_{8}^2]=[x_i^2+y_i^2: \text{for $i = 1,2,3,\dots,8$}]\]

와 같은 리스트를 생성하라.

[x[i]**2+y[i]**2 for i in range(8)]
[10, 8, 17, 26, 40, 29, 52, 98]

my answer

[x[i]**2 + y[i]**2 for i in range(len(x))]
[10, 8, 17, 26, 40, 29, 52, 98]

5. 아래와 같은 문자열이 있다고 하자.

test_arr = 'ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSUGPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XAt3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/EnmZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbxNrRFi9wrf+M7Q== schacon@mylaptop.local'

이 문자열에서 대문자의 수를 count하라. (2022년 파이썬입문 중간고사 1-(5) 참고)

sum([s.isupper() for s in test_arr ])
155

error on my answer

sum([test_arr[i] == test_arr.upper()[i] for i in range(len(test_arr))])
230

이렇게 비교하면 대문자인 것은 세겠지만, 기호가 같은 것도 세기 때문에 over해서 sum하게 된다.

6. 리스트컴프리헨션을 이용하여 아래와 같은 리스트를 생성하라. (2022년 파이썬입문 중간고사 1-(7) 참고)

['a',
 'aa',
 'aaa',
 'aaaa',
 'aaaaa',
 'aaaaaa',
 'aaaaaaa',
 'aaaaaaaa',
 'aaaaaaaaa',
 'aaaaaaaaaa'] <- a가 10개있음
['a'*i for i in range(1,11)]
['a',
 'aa',
 'aaa',
 'aaaa',
 'aaaaa',
 'aaaaaa',
 'aaaaaaa',
 'aaaaaaaa',
 'aaaaaaaaa',
 'aaaaaaaaaa']

my answer

['a' * i for i in range(1,11)]
['a',
 'aa',
 'aaa',
 'aaaa',
 'aaaaa',
 'aaaaaa',
 'aaaaaaa',
 'aaaaaaaa',
 'aaaaaaaaa',
 'aaaaaaaaaa']

7. 아래와 같은 list가 있다고 하자.

test_lst = [['g',1],['u',5],['e',2],['b',8],['i',2],['n',9]]

test_lst와 리스트컴프리헨션을 이용하여 아래를 출력하는 코드를 구현하라. (2022년 파이썬입문 중간고사 1-(9) 참고)

['g', 'uuuuu', 'ee', 'bbbbbbbb', 'ii', 'nnnnnnnnn']
['g', 'uuuuu', 'ee', 'bbbbbbbb', 'ii', 'nnnnnnnnn']
[l[0]*l[1] for l in test_lst]
['g', 'uuuuu', 'ee', 'bbbbbbbb', 'ii', 'nnnnnnnnn']

my answer

[test_lst[i][0] * test_lst[i][1] for i in range(len(test_lst))]
['g', 'uuuuu', 'ee', 'bbbbbbbb', 'ii', 'nnnnnnnnn']

8. 아래와 같은 list를 생성하라.

[1,
 2,2,
 3,3,3,
 4,4,4,4,
 5,5,5,5,5,
 ...
 9,9,9,9,9,9,9,9,9] <- 9 9 있음 

(풀이1) – 의도한 풀이

lst = list()
for i in range(1,10):
    lst = lst + [i]*i

(풀이2) – 이걸 의도한건 아니었음…

lst = [[i]*i for i in range(1,10)]
print(str(lst).replace(' ','').replace(',[','').replace(']',',\n ').replace('[[','[').replace(',\n ,',']'))
[1,
 2,2,
 3,3,3,
 4,4,4,4,
 5,5,5,5,5,
 6,6,6,6,6,6,
 7,7,7,7,7,7,7,
 8,8,8,8,8,8,8,8,
 9,9,9,9,9,9,9,9,9]
 

error on my answer

[[i] * i for i in range(1,10)]
[[1],
 [2, 2],
 [3, 3, 3],
 [4, 4, 4, 4],
 [5, 5, 5, 5, 5],
 [6, 6, 6, 6, 6, 6],
 [7, 7, 7, 7, 7, 7, 7],
 [8, 8, 8, 8, 8, 8, 8, 8],
 [9, 9, 9, 9, 9, 9, 9, 9, 9]]

right answer

l = []
for i in range(1,10):
    l = l + [i] * i

9. 아래와 같은 리스트를 관찰하라.

lst = ['2022/09/21','2022/10/30','2022/12/25','2023/01/01','2023/01/31','2023/03/20']

이러한 리스트를 아래와 같은 리스트로 변환하는 코드를 작성하라.

['2022-09-21', '2022-10-30', '2022-12-25', '2023-01-01', '2023-01-31', '2023-03-20']
['2022-09-21',
 '2022-10-30',
 '2022-12-25',
 '2023-01-01',
 '2023-01-31',
 '2023-03-20']

hint: string의 .replace()기능과 리스트 컴프리헨션의 응용

[s.replace('/','-') for s in lst]
['2022-09-21',
 '2022-10-30',
 '2022-12-25',
 '2023-01-01',
 '2023-01-31',
 '2023-03-20']

my answer

for i in range(len(lst)):
    lst[i].replace('/','-')
lst
['2022/09/21',
 '2022/10/30',
 '2022/12/25',
 '2023/01/01',
 '2023/01/31',
 '2023/03/20']

10. 아래와 같은 문자열을 고려하라.

'2021. 01. 05.'
'2021. 01. 05.'

띄어쓰기를 제거하는 코드를 구현하라. 즉 출력결과가 아래와 같도록 만드는 코드를 구현하라.

'2021.01.05'
'2021.01.05'

hint: 아래코드 관찰

'asdf'.replace('a','')
'sdf'
'2021. 01. 05.'.replace(' ','')
'2021.01.05.'

my answer

a = '2021.01.05';a.replace('. ','.');a
'2021.01.05'

11. 아래의 코드를 관찰하라.

'-'.join(['2022','01','05'])
'2022-01-05'
'.'.join(['2022','01','05'])
'2022.01.05'

’dd’에 있는 내용을 이용하여 join의 원소들을 합쳐라.

12. 아래와 같이 하나의 특수문자로 이루어진 리스트를 고려하자.

block = ['■'] 

이를 이용하여 아래와 같은 결과를 출력하라.

'■-■-■-■-■-■-■-■-■-■' # 여기에서 '■'는 모두 10개 있음
'■-■-■-■-■-■-■-■-■-■'

hint: 11번 문제의 코드를 응용할 것

'-'.join(block*10)
'■-■-■-■-■-■-■-■-■-■'

my answer

'-'.join(block*10)
'■-■-■-■-■-■-■-■-■-■'

4.

HW: 03-22 (2)

03wk-2: 파이썬의 자료형 (5)

1. 길이가 1인 튜플을 만들어 자신의 학번을 저장하라. 길이가 1인 튜플을 만들어 자신의 영문이름을 저장하라. 두 튜플을 + 연산자로 합쳐아래와 같은 출력결과를 얻어라. 최종 결과는 예를들면 아래와 같아야 한다.

('2021-43052', 'TomJohn')
('2021-43052', 'TomJohn')
a='2021-43052', 
b='tomJohn',
a+b
('2021-43052', 'tomJohn')

my answer

a = '2222-1111';b = 'TomJohn'; (a , b)
('2222-1111', 'TomJohn')

2-5. 아래는 파이썬프로그래밍 수강생들의 학번, 이름, 출석점수, 과제점수, 중간고사점수, 기말고사점수를 저장한 중첩리스트이다.

lst = [['2021-43052', 'GuebinChoi', 5, 10, 20, 25],
       ['2019-12342', 'Heung-min Son', 10, 15, 30, 15],
       ['2018-32234', 'hynn', 7, 20, 30, 15],
       ['2022-42323', 'Minji', 8, 20, 20, 35],
       ['2023-55342', 'Hanni', 7, 20, 30, 35],
       ['2022-46624', 'Danielle', 3, 15, 30, 40],
       ['2022-11239', 'Haerin', 10, 20, 30, 40],
       ['2022-32114', 'Hyein', 10, 20, 20, 35]]
lst 
[['2021-43052', 'GuebinChoi', 5, 10, 20, 25],
 ['2019-12342', 'Heung-min Son', 10, 15, 30, 15],
 ['2018-32234', 'hynn', 7, 20, 30, 15],
 ['2022-42323', 'Minji', 8, 20, 20, 35],
 ['2023-55342', 'Hanni', 7, 20, 30, 35],
 ['2022-46624', 'Danielle', 3, 15, 30, 40],
 ['2022-11239', 'Haerin', 10, 20, 30, 40],
 ['2022-32114', 'Hyein', 10, 20, 20, 35]]

2. 파이썬프로그래밍 수강생의 수는 모두 몇명인가?

len(lst)
8

3. 전북대학교 지침에 따라 출석점수가 7보다 작은 학생은 (즉 출석점수 < 7 일 경우) F학점을 부여하게 되어있다. 이 기준에 따르면 F를 받는 학생은 모두 몇명인가?

sum([att<7 for _,_, att, *rest in lst])
2

my answer

sum([lst[i][2] < 7 for i in range(len(lst))])
2

풀이 뜯어보기

[att for _,_, att, *rest in lst]
[5, 10, 7, 8, 7, 3, 10, 10]

순서대로 학번, 이름, 출석점수, 나머지~


-

for a,b,c,d,_,_ in lst:
    print(c,d)
5 10
10 15
7 20
8 20
7 20
3 15
10 20
10 20

-

print(*[1,2,3])
1 2 3
print([1,2,3])
[1, 2, 3]

4. 파이썬프로그래밍 수업의 경우 출석+레포트 < 21 일 경우 F학점을 부여한다고 한다. 이 기준에 따르면 F를 받는 학생은 모두 몇명인가?

sum([att+rep < 21 for _,_, att,rep, *rest in lst])
2

my answer

sum([c + d < 21 for _,_,c,d,*rest in lst])
2

5. 리스트의 정렬순서를 [학번, 이름, …, 기말고사점수] 가 아니라 [이름, 학번, … , 기말고사점수] 와 같이 되도록 변경하는 코드를 작성하라.

[[name,studentid,*rest] for studentid, name, *rest in lst]
[['GuebinChoi', '2021-43052', 5, 10, 20, 25],
 ['Heung-min Son', '2019-12342', 10, 15, 30, 15],
 ['hynn', '2018-32234', 7, 20, 30, 15],
 ['Minji', '2022-42323', 8, 20, 20, 35],
 ['Hanni', '2023-55342', 7, 20, 30, 35],
 ['Danielle', '2022-46624', 3, 15, 30, 40],
 ['Haerin', '2022-11239', 10, 20, 30, 40],
 ['Hyein', '2022-32114', 10, 20, 20, 35]]

my answer

[[b,a,*rest] for a,b,*rest in lst]
[['GuebinChoi', '2021-43052', 5, 10, 20, 25],
 ['Heung-min Son', '2019-12342', 10, 15, 30, 15],
 ['hynn', '2018-32234', 7, 20, 30, 15],
 ['Minji', '2022-42323', 8, 20, 20, 35],
 ['Hanni', '2023-55342', 7, 20, 30, 35],
 ['Danielle', '2022-46624', 3, 15, 30, 40],
 ['Haerin', '2022-11239', 10, 20, 30, 40],
 ['Hyein', '2022-32114', 10, 20, 20, 35]]

6. 아래의 코드를 관찰하라.

'2023-03-22'.split('-')
['2023', '03', '22']

이 코드를 바탕으로 split의 기능을 유추하라.

\(\to\) split은 호출한 문자 기준으로 문자 나누는 역할

7. 6의 실행결과를 되돌리는 코드를 작성하라. 즉

['2023', '03', '22']
['2023', '03', '22']

와 같은 리스트를 아래의 string으로 바꾸는 코드를 작성하라.

'2023-03-22'
'2023-03-22'

hint: join을 이용할 것

'-'.join(['2023', '03', '22'])
'2023-03-22'

my answer

lst = ['2023', '03', '22'];'-'.join(lst)
'2023-03-22'

다음은 인터넷에서 긁어온 어떠한 텍스트이다.

text = "국내뿐 아니라 해외 인기도 심상치 않다. 2023년 1월 18일 'Ditto'가 빌보드 핫 100에 96위로 진입했다. 이는 K-pop 역사상 데뷔후 최단 빌보드 Hot 100 차트 입성 기록이다. 다른 뮤지션들이 보통 데뷔 후 수년간 쌓아온 팬덤을 기반으로 빌보드에 입성한데 비해, 뉴진스의 기록은 이례적인 것으로 평가받고 있다. 또한 'OMG'가 빌보드 핫 100에 91위로 진입한 동시에 'Ditto'는 85위로 순위가 상승, 핫 100 주간차트에 두 곡을 올려놓았다. K-Pop 역사상 이 차트에 두 곡 이상을 진입시킨 아티스트는 방탄소년단과 블랙핑크가 유일하다. 'Ditto'는 1월 셋째주 기준, 빌보드뿐만 아니라 영국 오피셜 싱글 차트 '톱 100'에 2주 연속 진입하기도 했다."

8. text는 총 몇개의 문장으로 이루어져 있는가?

hint: 이 텍스트의 문장은 모두 .로 끝난다.

lst = text.split('. ')
lst 
['국내뿐 아니라 해외 인기도 심상치 않다',
 "2023년 1월 18일 'Ditto'가 빌보드 핫 100에 96위로 진입했다",
 '이는 K-pop 역사상 데뷔후 최단 빌보드 Hot 100 차트 입성 기록이다',
 '다른 뮤지션들이 보통 데뷔 후 수년간 쌓아온 팬덤을 기반으로 빌보드에 입성한데 비해, 뉴진스의 기록은 이례적인 것으로 평가받고 있다',
 "또한 'OMG'가 빌보드 핫 100에 91위로 진입한 동시에 'Ditto'는 85위로 순위가 상승, 핫 100 주간차트에 두 곡을 올려놓았다",
 'K-Pop 역사상 이 차트에 두 곡 이상을 진입시킨 아티스트는 방탄소년단과 블랙핑크가 유일하다',
 "'Ditto'는 1월 셋째주 기준, 빌보드뿐만 아니라 영국 오피셜 싱글 차트 '톱 100'에 2주 연속 진입하기도 했다."]
len(lst)
7

error on my answer

len(text.split('.'))-1
7

\(\to\) . 띄어쓰기를 생각 못 함

9. 각 문장은 몇개의 단어로 이루어져 있는가?

hint: 각 단어는 공백으로 구분된다.

[len(s.split(' ')) for s in lst]
[6, 9, 11, 18, 18, 12, 16]
sum([len(s.split(' ')) for s in lst])
90

my answer

[len(text.split('. ')[i].split(' ')) for i in range(len(text.split('. ')))]
[6, 9, 11, 18, 18, 12, 16]
sum([len(text.split('. ')[i].split(' ')) for i in range(len(text.split('. ')))])
90

10. 100이라는 단어가 포함된 문장은 모두 몇 개 인가?

hint: 아래의 코드를 관찰

'a' in 'abcd'
True
['100' in s for s in lst]
[False, True, True, False, True, False, True]
sum(['100' in s for s in lst])
4

my answer

sum(['100' in text.split('. ')[i] for i in range(len(text.split('. ')))])
4

5

HW 0327 (1)

04wk-1: 파이썬의 자료형 (6)

ssh코드: 1-2

아래의 문자열을 고려하자.

test_arr = 'ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSUGPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XAt3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/EnmZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbxNrRFi9wrf+M7Q== schacon@mylaptop.local'

1. 이 문자열에서 index = 0,2,4,6,8,… 에 해당하는 원소를 출력하는 코드를 작성하라. (2022-파이썬입문 중간고사 1-(2) 참고)

# 출력결과는 아래와 같아야 한다. 

'shraAABNa1cEAAIAAEkOpDrH1SrTpLG9jmBDUP+azHTWhIy5w8HJ9bUriz7lLV49F5VbpSgcaPvkd/TBWFRHoFRtqi1KXHZMiqVRsAwsMvlK7A3aJAnMQx+VW6/Im1uFjJpr8XpDjNyv/bretEm+WOPTI9PVLar2E6/lbg331KtIj2od1rTMVsxrF9r+7= cao@yatplcl'
test_arr[::2]
'shraAABNa1cEAAIAAEkOpDrH1SrTpLG9jmBDUP+azHTWhIy5w8HJ9bUriz7lLV49F5VbpSgcaPvkd/TBWFRHoFRtqi1KXHZMiqVRsAwsMvlK7A3aJAnMQx+VW6/Im1uFjJpr8XpDjNyv/bretEm+WOPTI9PVLar2E6/lbg331KtIj2od1rTMVsxrF9r+7= cao@yatplcl'

2. 위 문자열을 뒤집은 문자열을 구하는 코드를 구현하라. (2022-파이썬입문 중간고사 1-(4) 참고)

# 출력결과는 아래와 같아야 한다. 

'lacol.potpalym@nocahcs ==Q7M+frw9iFRrNxbsSVqMlTarQ10d1os2njkImtaKn1+3r3wg+b8li/Z68Ec2DryauLMVmPZ98IPTnPZO4WA+ZmnE/trewr0bP/wv6ybNYjvDNpyX88XrrpKJQjlFUuz1bmFIe/86wW0V3+5x9Q1McnsAoJoaF3tAX7/KVlSvFMdsdwQANsjR6V8qLicMsZAHpXhKn1XixqBtiRXF3oAH+RCFXWlByTM/JdOk7vbP3adc0gwSppPbkVQ5XFl9h4fVELElx7MzQivrFUhbj9WJ4HJ81we5Zy4Idh7WYTDHlzfan+lPGUSDWB/mojT9KGTLNpITmrbS71YHfrHDkpUOlkAEQAAAwIBAAAAE2cy1CazN3BAAAA asr-hss'
test_arr[::-1]
'lacol.potpalym@nocahcs ==Q7M+frw9iFRrNxbsSVqMlTarQ10d1os2njkImtaKn1+3r3wg+b8li/Z68Ec2DryauLMVmPZ98IPTnPZO4WA+ZmnE/trewr0bP/wv6ybNYjvDNpyX88XrrpKJQjlFUuz1bmFIe/86wW0V3+5x9Q1McnsAoJoaF3tAX7/KVlSvFMdsdwQANsjR6V8qLicMsZAHpXhKn1XixqBtiRXF3oAH+RCFXWlByTM/JdOk7vbP3adc0gwSppPbkVQ5XFl9h4fVELElx7MzQivrFUhbj9WJ4HJ81we5Zy4Idh7WYTDHlzfan+lPGUSDWB/mojT9KGTLNpITmrbS71YHfrHDkpUOlkAEQAAAwIBAAAAE2cy1CazN3BAAAA asr-hss'

파이썬 프로그래밍 시험성적: 3-4

아래와 같은 dictionary가 있다고 가정하자.

dct={'202212377': {'att': 65, 'rep': 45, 'mid': 0, 'fin': 10},
     '202212473': {'att': 95, 'rep': 30, 'mid': 60, 'fin': 10},
     '202212310': {'att': 65, 'rep': 85, 'mid': 15, 'fin': 20},
     '202212460': {'att': 55, 'rep': 35, 'mid': 35, 'fin': 5},
     '202212320': {'att': 80, 'rep': 60, 'mid': 55, 'fin': 70},
     '202212329': {'att': 75, 'rep': 40, 'mid': 75, 'fin': 85},
     '202212408': {'att': 65, 'rep': 70, 'mid': 60, 'fin': 75},
     '202212319': {'att': 60, 'rep': 25, 'mid': 20, 'fin': 35},
     '202212348': {'att': 95, 'rep': 55, 'mid': 65, 'fin': 90},
     '202212306': {'att': 90, 'rep': 25, 'mid': 95, 'fin': 50},
     '202212308': {'att': 55, 'rep': 45, 'mid': 75, 'fin': 30},
     '202212366': {'att': 95, 'rep': 60, 'mid': 25, 'fin': 55},
     '202212367': {'att': 95, 'rep': 35, 'mid': 0, 'fin': 25},
     '202212461': {'att': 50, 'rep': 55, 'mid': 90, 'fin': 45}}

여기에서 ‘202212377’ 등은 학번을, att는 출석점수, rep는 레포트점수, mid는 중간고사 점수, fin은 기말고사 점수를 의미한다.

3. 학생들의 학번을 아래와 같은 방식으로 출력하는 코드를 작성하라.

# 출력예시

['2022-12377',
 '2022-12473',
 '2022-12310',
 '2022-12460',
 '2022-12320',
 '2022-12329',
 '2022-12408',
 '2022-12319',
 '2022-12348',
 '2022-12306',
 '2022-12308',
 '2022-12366',
 '2022-12367',
 '2022-12461']
[k[:4]+'-'+k[4:] for k in dct]
['2022-12377',
 '2022-12473',
 '2022-12310',
 '2022-12460',
 '2022-12320',
 '2022-12329',
 '2022-12408',
 '2022-12319',
 '2022-12348',
 '2022-12306',
 '2022-12308',
 '2022-12366',
 '2022-12367',
 '2022-12461']

error on my answer

for k in dct.keys():
    print(k[:4],'-',k[4:])
2022 - 12377
2022 - 12473
2022 - 12310
2022 - 12460
2022 - 12320
2022 - 12329
2022 - 12408
2022 - 12319
2022 - 12348
2022 - 12306
2022 - 12308
2022 - 12366
2022 - 12367
2022 - 12461

띄어쓰기가 있고, ’’로 묶이지도 않았고, 리스트로 묶이지도 않음

kk = []
for k in dct.keys():
    kk.append(k[:4]+'-'+k[4:])
kk
['2022-12377',
 '2022-12473',
 '2022-12310',
 '2022-12460',
 '2022-12320',
 '2022-12329',
 '2022-12408',
 '2022-12319',
 '2022-12348',
 '2022-12306',
 '2022-12308',
 '2022-12366',
 '2022-12367',
 '2022-12461']

4. 출석점수가 70점 이상인(>=70) 학생들의 학번을 출력하는 코드를 작성하라. (2022-파이썬입문 중간고사 2-(3) 참고)

# 출력예시 

['2022-12473',
 '2022-12320',
 '2022-12329',
 '2022-12348',
 '2022-12306',
 '2022-12366',
 '2022-12367']
[k[:4]+'-'+k[4:] for k,v in dct.items() if v['att']>70]
['2022-12473',
 '2022-12320',
 '2022-12329',
 '2022-12348',
 '2022-12306',
 '2022-12366',
 '2022-12367']

my answer

[k[:4] + '-' + k[4:] for k in dct if dct[k]['att']>=70]
['2022-12473',
 '2022-12320',
 '2022-12329',
 '2022-12348',
 '2022-12306',
 '2022-12366',
 '2022-12367']

Oxford-III: 5–10 // reference

아래는 이미지 파일명들이 저장된 string을 불러오는 코드이다.

import requests
url = 'https://raw.githubusercontent.com/guebin/PP2023/main/posts/01_PythonBasic/Oxford-IIIT.txt'
txt = requests.get(url).content.decode()

txt의 출력 일부를 나타내면 아래와 같다.

'Abyssinian_1.jpg\nAbyssinian_10.jpg\nAbyssinian_100.jpg\nAbyssinian_100.mat\nAbyssinian_101.jpg\nAbyssinian_101.mat\nAbyssinian_102.jpg\nAbyssinian_102.mat\nAbyssinian_103.jpg\nAbyssinian_104.jpg\nAbyssinian_105.jpg\nAbyssinian_106.jpg\nAbyssinian_107.jpg\nAbyssinian_108.jpg\nAbyssinian_109.jpg\nAbyssinian_11.jpg\nAbyssinian_110.jpg\nAbyssinian_111.jpg\nAbyssinian_112.jpg\nAbyssinian_113.jpg\nAbyssinian_114.jpg\nAbyssinian_115.jpg\nAbyssinian_116.jpg\nAbyssinian_117.jpg\nAbyssinian_118.jpg\nAbyssinian_119.jpg\nAbyssinian_12.jpg\nAbyssinian_120.jpg\nAbyssinian_121.jpg\nAbyssinian_122.jpg\nAbyssinian_123.jpg\nAbyssinian_124.jpg\nAbyssinian_125.jpg\nAbyssinian_126.jpg\nAbyssinian_127.jpg\nAbyssinian_128.jpg\nAbyssinian_129.jpg\nAbyssinian_13.jpg\nAbyssinian_130.jpg\nAbyssinian_131.jpg\nAbyssinian_132.jpg\n ....... 

5. 각 파일명은 구분되어있다. 위의 스트링을 분해하여 아래와 같은 리스트를 생성하고 fname_list에 저장하라.

# fname_list 의 출력결과는 아래와 같아야 한다. 
['Abyssinian_1.jpg','Abyssinian_10.jpg', ... ,'yorkshire_terrier_98.jpg', 'yorkshire_terrier_99.jpg']
fname_list = txt.split('\n')
fname_list[:10]
['Abyssinian_1.jpg',
 'Abyssinian_10.jpg',
 'Abyssinian_100.jpg',
 'Abyssinian_100.mat',
 'Abyssinian_101.jpg',
 'Abyssinian_101.mat',
 'Abyssinian_102.jpg',
 'Abyssinian_102.mat',
 'Abyssinian_103.jpg',
 'Abyssinian_104.jpg']

6. 각 이미지파일명은 아래와 같은 규칙으로 저장되어 있다.

  • 파일명의 첫글자가 대문자이면 고양이를 의미하고 첫글자가 소문자이면 강아지를 의미한다.
  • _ 이전의 영문명은 고양이 혹은 강아지의 종(breed)을 의미한다.
  • 이미지 파일명이 입력으로 오면 강아지인지 고양이인지 판단하여 ‘cat’ or ’dog’를 리턴하는 함수 f를 구현하라.
(함수사용예시)

f('yorkshire_terrier_99.jpg')
'dog'
f('Abyssinian_1.jpg')
'cat'
def f(fname): 
    return 'cat' if fname[0].isupper() else 'dog' 
f('yorkshire_terrier_99.jpg'), f('Abyssinian_1.jpg')
('dog', 'cat')

my answer

def name(name):
    if name[0].isupper():
        return 'cat'
    elif name[0].islower():
        return 'dog'
name('yorkshire_terrier_99.jpg'), name('Abyssinian_1.jpg')
('dog', 'cat')

7. 5의 결과로 나온 fname_list를 입력으로 하고 리스트의 각 원소가 고양이를 의미하는 그림인지 강아지를 의미하는 그림인지 나타내는 리스트를 만들어라.

## 입력예시 
['Abyssinian_1.jpg','Abyssinian_10.jpg',...,'yorkshire_terrier_98.jpg', 'yorkshire_terrier_99.jpg']
## 출력예시
['cat', 'cat', ... , 'dog', 'dog']
result = [f(l) for l in fname_list]
result[:10]
['cat', 'cat', 'cat', 'cat', 'cat', 'cat', 'cat', 'cat', 'cat', 'cat']

my answer

[f(fname_list[i]) for i in range(len(fname_list))][:10]
['cat', 'cat', 'cat', 'cat', 'cat', 'cat', 'cat', 'cat', 'cat', 'cat']

8. 강아지 그림과 고양이 그림이 각각 몇 장씩 포함되어 있는지 파악하는 코드를 구현하라.

sum([s=='cat' for s in result]) # 고양이
2403
sum([s=='dog' for s in result]) # 강아지
4990

my answer

sum([result[i] == 'cat' for i in range(len(result))])
2403
len(result) - sum([result[i] == 'cat' for i in range(len(result))])
4990

9. 포메라니안 종의 그림이 몇장있는지 파악하는 코드를 구현하라.

hint: 포메라니안 그림은 파일명에 ‘pomeranian’ 을 포함한다.

sum(['pomeranian'  in s for s in fname_list])
200

my answer

’pomeranian’을 포함하면 0이 return 되고 아니면 -1이 return되는 코드로 길게 짰다.

len(fname_list) + sum(fname_list[i].find('pomeranian') for i in range(len(fname_list)))
200

10. 아래의 dct는 포메라니안과 사모예드가 각각 몇장씩 포함되어있는지 정리하기 위해 임시로 정리한 dictionary이다. 각 종이 몇 장씩 포함되어있는지 구하여 dct를 수정하라.

dct = {'pomeranian':0, 'samoyed':0} 
dct
{'pomeranian': 0, 'samoyed': 0}

예를들어 포메라니안과 사모에예드의 그림이 각각 200장씩 있다면 아래와 같이 딕셔너리를 수정해야한다.

dct['pomeranian'] = sum(['pomeranian'  in s for s in fname_list])
dct['samoyed'] = sum(['samoyed'  in s for s in fname_list])
dct
{'pomeranian': 200, 'samoyed': 200}

my answer

dct['pomeranian'] = sum(['pomeranian'  in s for s in fname_list])
dct['samoyed'] = sum(['samoyed'  in s for s in fname_list])
dct
{'pomeranian': 200, 'samoyed': 200}

6.

HW 0327 (2)

04wk-1: 파이썬의 자료형 (6)

1. 아래와 같은 맵핑을 고려하자.

문자 숫자
a 1
b 0

이를 딕셔너리로 표현하면 아래와 같다.

dct = {'a':0, 'b':1} 

위 규칙에 따라서 아래의 리스트의 원소를 문자로 각각 변환하라.

lst = [1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1]
# 출력은 아래와 같아야 한다. 
['b', 'a', 'b', 'a', 'b', 'a', 'b', 'b', 'b', 'b', 'a', 'a', 'b', 'a', 'b']
[k for l in lst for k,v in dct.items() if v==l]
['b', 'a', 'b', 'a', 'b', 'a', 'b', 'b', 'b', 'b', 'a', 'a', 'b', 'a', 'b']

error on my answer

인덱싱된 값(value)을 가져와서 lst랑 비교한다음 id랑 연결해야 하는데, 연결해서 가져오는 법을 몰랐다.

[v for k,v in dct.items()]
[0, 1]
[k for k,v in dct.items()]
['a', 'b']
[k for s in lst for k,v in dct.items() if v==s]
['b', 'a', 'b', 'a', 'b', 'a', 'b', 'b', 'b', 'b', 'a', 'a', 'b', 'a', 'b']

2. 아래와 같은 맵핑을 고려하자.

의미
1,2 겨울방학
3,4,5,6 1학기
7,8 여름방학
9,10,11,12 2학기

이러한 규칙에 맞게 아래의 리스트를 적절한 문자열로 변환하라.

month = [1,2,2,3,4,5,6,7,8,9,9,10,11,12] 
## 출력은 아래와 같아야 한다. 
['겨울방학', '겨울방학', '겨울방학', '1학기', '1학기', '1학기', '1학기', '여름방학', '여름방학', '2학기', '2학기', '2학기', '2학기', '2학기']
dct = {'겨울방학':[1,2], '1학기':[3,4,5,6], '여름방학':[7,8], '2학기':[9,10,11,12]} 
[k for m in month for k,v in dct.items() if m in v] 
['겨울방학',
 '겨울방학',
 '겨울방학',
 '1학기',
 '1학기',
 '1학기',
 '1학기',
 '여름방학',
 '여름방학',
 '2학기',
 '2학기',
 '2학기',
 '2학기',
 '2학기']

my answer

if c in v을 못 씀…..

dct = {'겨울방학':[1,2],'1학기':[3,4,5,6],'여름방학':[7,8],'2학기':[9,10,11,12]}
[k for c in month for k,v in dct.items() if c in v]
['겨울방학',
 '겨울방학',
 '겨울방학',
 '1학기',
 '1학기',
 '1학기',
 '1학기',
 '여름방학',
 '여름방학',
 '2학기',
 '2학기',
 '2학기',
 '2학기',
 '2학기']

합성변환 3-5.

아래와 같은 맵핑을 고려하자.

(규칙1)

문자 숫자
바나나 0
사과 1
오토바이 2
자동차 3
자전거 4

(규칙2)

아이템 카테고리
바나나 과일
사과 과일
오토바이 탈것
자동차 탈것
자전거 탈것

각각의 규칙을 나타내는 딕셔너리는 아래와 같이 선언되어있다고 하자.

dct1 = {'바나나':0, '사과':1, '오토바이':2, '자동차':3, '자전거':4} 
dct2 = {'과일':['바나나','사과'], '탈것':['오토바이','자동차','자전거']} 

3. 규칙1를 이용하여 아래와 같은 리스트를 변환하는 함수를 구현하고 그 함수를 f라 선언하라.

# 입력 
[0,1,0,1,4]

# 출력 
['바나나', '사과', '바나나', '사과', '자전거']
(사용예시)

f([0,1,0,1,4])

['바나나', '사과', '바나나', '사과', '자전거']
def f(lst):
    return [k for l in lst for k,v in dct1.items() if v == l]    

f([0,1,0,1,4])
['바나나', '사과', '바나나', '사과', '자전거']

my answer

[k for i in [0,1,0,1,4] for k,v in dct1.items() if i==v]
['바나나', '사과', '바나나', '사과', '자전거']
def f_csy(a):
    return [k for i in a for k,v in dct1.items() if i==v]
f_csy([0,1,0,1,4])
['바나나', '사과', '바나나', '사과', '자전거']

4. 규칙2를 이용하여 아래와 같이 리스트를 변환하는 함수를 구현하고 그 함수를 g라고 선언하라.

# 입력 
['바나나','바나나','바나나','자동차']

# 출력 
['과일','과일','과일','탈것']

(사용예시)

g(['바나나','바나나','바나나','자동차'])

['과일', '과일', '과일', '탈것']
def g(lst):
    return [k for l in lst for k,v in dct2.items() if l in v] 

g(['바나나','바나나','바나나','자동차'])
['과일', '과일', '과일', '탈것']

my answer

[k for a in ['바나나','바나나','바나나','자동차'] for k,v in dct2.items() if a in v]
['과일', '과일', '과일', '탈것']
def g_csy(b):
    return([k for a in b for k,v in dct2.items() if a in v])
g_csy(['바나나','바나나','바나나','자동차'])
['과일', '과일', '과일', '탈것']

5. 규칙1-2를 이용하여 아래와 같은 숫자로 이루어진 입력을 ‘과일’, ‘탈것’ 중 하나로 바꾸는 코드를 구현하라.

# 입력 
[0,1,0,1,3,4,2,2,3,4,1,0]

# 출력 
['과일', '과일', '과일', '과일', '탈것', '탈것', '탈것', '탈것', '탈것', '탈것', '과일', '과일']

hint \(g(f(x))\) 를 이용하라.

g(f([0,1,0,1,3,4,2,2,3,4,1,0]))

['과일', '과일', '과일', '과일', '탈것', '탈것', '탈것', '탈것', '탈것', '탈것', '과일', '과일']
['과일', '과일', '과일', '과일', '탈것', '탈것', '탈것', '탈것', '탈것', '탈것', '과일', '과일']

my answer

g_csy(f_csy([0,1,0,1,3,4,2,2,3,4,1,0]))
['과일', '과일', '과일', '과일', '탈것', '탈것', '탈것', '탈것', '탈것', '탈것', '과일', '과일']

7.

04wk-2: 파이썬의 자료형 (7)

Oxford-III: 1–5 // reference

아래는 이미지 파일명들이 저장된 string을 불러오는 코드이다.

import requests
url = 'https://raw.githubusercontent.com/guebin/PP2023/main/posts/01_PythonBasic/Oxford-IIIT.txt'
txt = requests.get(url).content.decode()

이미지파일이 저장된 형식은 아래와 같다.

Abyssinian_1.jpg
British_Shorthair_129.jpg

note: British_Shorthair와 같이 종 이름 사이에 _가 들어있는 경우도 있음.

1. txt를 적당히 변환하여 아래와 같은 list를 만들어라.

lst[:10],lst[810:820]

(['Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian'],
 ['BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair'])

hint1

'Abyssinian_1.jpg\nAbyssinian_10.jpg'.split('\n')
['Abyssinian_1.jpg', 'Abyssinian_10.jpg']

hint2

''.join(['British', 'Shorthair'])
'BritishShorthair'
''.join(['Abyssinian'])
'Abyssinian'

(풀이1)

lst = [''.join(filename.split('_')[:-1]) for filename in txt.split('\n')]
lst[:10],lst[810:820]
(['Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian'],
 ['BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair'])

(풀이2)

def f(filename): 
    *name, _ = filename.split('_')
    return ''.join(name)
lst = [f(filename) for filename in txt.split('\n')]
lst[:10],lst[810:820]
(['Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian'],
 ['BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair'])

my answer

lst = [''.join(txt.split('\n')[i].split('_')[:-1]) for i in range(len(txt.split('\n')))]
lst[:10],lst[810:820]
(['Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian'],
 ['BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair',
  'BritishShorthair'])

2. 그림파일에는 총 몇가지 종류의 고양이와, 몇가지 종류의 강아지가 있는가?

note: 고양이사진은 대문자로 시작하고, 강아지 사진은 소문자로 시작한다.

note: 12종의 고양이, 25종의 강아지가 있음

[s[0].isupper() for s in set(lst)].count(True) # 고양이 12
12
[s[0].isupper() for s in set(lst)].count(False) # 강아지 25 
25

my answer

len([i for i in set(lst) if i[0].isupper()])
12
len([i for i in set(lst) if i[0].islower()])
25

3. 아래는 1번의 결과로 얻어진 lst의 첫 10개의 원소와 마지막 10개의 원소이다.

lst[:10], lst[-10:]

(['Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian',
  'Abyssinian'],
 ['yorkshireterrier',
  'yorkshireterrier',
  'yorkshireterrier',
  'yorkshireterrier',
  'yorkshireterrier',
  'yorkshireterrier',
  'yorkshireterrier',
  'yorkshireterrier',
  'yorkshireterrier',
  'yorkshireterrier'])

적당한 변환을 정의하여 lst를 아래와 같이 바꾸어라.

lst2[:10], lst2[-10:] # 바뀐 lst
(['cat', 'cat', 'cat', 'cat', 'cat', 'cat', 'cat', 'cat', 'cat', 'cat'],
 ['dog', 'dog', 'dog', 'dog', 'dog', 'dog', 'dog', 'dog', 'dog', 'dog'])

(풀이1)

dct = {'cat':[s for s in set(lst) if s[0].isupper()], 'dog': [s for s in set(lst) if not s[0].isupper()]}
lst2 = [k for l in lst for k,v in dct.items() if l in v]

(풀이2)

def f(fname): 
    return 'cat' if fname[0].isupper() else 'dog'
lst2= [f(fname) for fname in lst]

my answer

lst2 = []
for j in range(len(lst)):
    if [lst[l][0].isupper() for l in range(len(lst))][j] == True:
        lst2.append('cat')
    else:
        lst2.append('dog')

4. txt에는 강아지사진과 고양이사진이 모두 몇장씩 들어있는가?

## 출력예시 

{'dog': 4990, 'cat': 2403}
{k:lst2.count(k) for k in ['dog','cat']}
{'dog': 4990, 'cat': 2403}

my answer

너무 길게 코드를 짰다.. 비.효.율.적.

{'dog':sum((lst2[i] == 'dog' for i in range(len(lst2)))),
 'cat':sum((lst2[i] == 'cat' for i in range(len(lst2))))}
{'dog': 4990, 'cat': 2403}

5. txt에 각 종별로 몇장의 사진이 있는지 조사하라.

## 출력예시

{'beagle': 200,
 'scottishterrier': 199,
 'newfoundland': 200,
 'Birman': 200,
 'Bombay': 200,
 'pug': 200,
 'germanshorthaired': 200,
 'samoyed': 200,
 'Sphynx': 200,
 'englishsetter': 200,
 'Bengal': 200,
 'MaineCoon': 200,
 'Persian': 200,
 'boxer': 200,
 'staffordshirebullterrier': 191,
 'Siamese': 200,
 'bassethound': 200,
 'wheatenterrier': 200,
 'englishcockerspaniel': 200,
 'Ragdoll': 200,
 'yorkshireterrier': 200,
 'EgyptianMau': 200,
 'BritishShorthair': 200,
 'keeshond': 200,
 'RussianBlue': 200,
 'saintbernard': 200,
 'americanbulldog': 200,
 'Abyssinian': 203,
 'leonberger': 200,
 'greatpyrenees': 200,
 'japanesechin': 200,
 'pomeranian': 200,
 'chihuahua': 200,
 'shibainu': 200,
 'americanpitbullterrier': 200,
 'miniaturepinscher': 200,
 'havanese': 200}
{k:lst.count(k) for k in set(lst)}
{'greatpyrenees': 200,
 'americanbulldog': 200,
 'englishcockerspaniel': 200,
 'japanesechin': 200,
 'boxer': 200,
 'Sphynx': 200,
 'havanese': 200,
 'saintbernard': 200,
 'samoyed': 200,
 'yorkshireterrier': 200,
 'wheatenterrier': 200,
 'chihuahua': 200,
 'MaineCoon': 200,
 'miniaturepinscher': 200,
 'RussianBlue': 200,
 'pug': 200,
 'Bengal': 200,
 'americanpitbullterrier': 200,
 'pomeranian': 200,
 'EgyptianMau': 200,
 'englishsetter': 200,
 'Birman': 200,
 'shibainu': 200,
 'germanshorthaired': 200,
 'Persian': 200,
 'beagle': 200,
 'staffordshirebullterrier': 191,
 'keeshond': 200,
 'newfoundland': 200,
 'Bombay': 200,
 'Siamese': 200,
 'BritishShorthair': 200,
 'scottishterrier': 199,
 'leonberger': 200,
 'Ragdoll': 200,
 'Abyssinian': 203,
 'bassethound': 200}