안녕하세요. Harry입니다.
현재 풀이중인 초보자를 위한 파이썬 300제 풀이를 진행하면서 나름대로 파악했던 문제 출제 의도와 풀이를 작성했습니다.
모든 풀이는 직접 Pycharm을 통해 에러없이 출력됨을 확인 후 작성했습니다.
초보자를 위한 파이썬 300제 풀이는 Wikidocs에 무료로 배포된 전자책을 활용했습니다/
[학습목표]
1. 각 문제별 요구하는 역량(출제의도)이 무엇인지 파악할 수 있다.
2. 각 문제별 요구하는 기술 및 기능을 활용하여 문제를 해결할 수 있다.
191 ~ 200
191
data에는 매수한 종목들의 OHLC (open/high/low/close) 가격 정보가 바인딩 되어있다.
- 요구역량 : for문을 2번 활용한 후, 각 리스트 요소 별 특정 값을 곱한 값을 출력할 수 있는가?
data = [
[ 2000, 3050, 2050, 1980],
[ 7500, 2050, 2050, 1980],
[15450, 15050, 15550, 14900]
]
수수료를 0.014 %로 가정할 때, 각 가격에 수수료를 포함한 가격을 한라인에 하나씩 출력하라.
2000.28
3050.427
2050.2870000000003
...
정답확인data = [
[ 2000, 3050, 2050, 1980],
[ 7500, 2050, 2050, 1980],
[15450, 15050, 15550, 14900]
]
for ohlc in data:
for a in ohlc:
print(a+a*0.00014)
192
191번의 출력 결과에 행단위로 "----" 구분자를 추가하라.
- 요구역량 : For문을 중복하여 출력할 때, 특정 주기별로 문자열을 출력할 수 있는가?
180번대 문제에서 풀었던 것처럼, print문을 첫번째 for문에 맞게 들여쓰기를 맞추면 쉽게 해결된다.
2000.28
3050.427
2050.2870000000003
1980.2772
----
7501.05
2050.2870000000003
2050.2870000000003
1980.2772
----
15452.163
15052.107
15552.177
14902.086000000001
----
정답확인data = [
[ 2000, 3050, 2050, 1980],
[ 7500, 2050, 2050, 1980],
[15450, 15050, 15550, 14900]
]
for ohlc in data:
for a in ohlc:
print(a+a*0.00014)
print('----')
193
191 번 문제의 결괏값을 result 이름의 리스트에 1차원 배열로 저장하라.
- 요구역량 : for문을 통해 출력된 요소를 하나의 리스트로 묶을 수 있는가?
새로운 리스트를 하나 생성하고(b), b.append(a)를 통해 값을 추가한다.
>> print(result)
[2000.28, 3050.427, 2050.2870000000003, 1980.2772, 7501.05, 2050.2870000000003, 2050.2870000000003, ...]
정답확인data = [
[ 2000, 3050, 2050, 1980],
[ 7500, 2050, 2050, 1980],
[15450, 15050, 15550, 14900]
]
b = []
for ohlc in data:
for a in ohlc:
b.append(a*1.00014)
print(b)
194
191번 문제의 결괏값을 result 이름의 리스트에 2차원 배열로 저장하라. 저장 포맷은 아래와 같다. 각 행에 대한 데이터끼리 리스트에 저장되어야 한다.
- 요구역량 : 기존 리스트 내 리스트에서 요소에 특정 값을 곱한후 다시 리스트 내 리스트를 재정렬하여 출력할 수 있는가?
이건 빈 리스트를 2개 만드는데, 처음에 1개(전체를 감쌀 리스트) 이후 for문으로 통해 요소를 불러오고 다시 새로운 리스트를 정의해서, append함수를 이용하여 채워넣는 문제입니다. 지금까지 봤던 문제중에 제일 복잡하다고 느껴지네요,,
리스트 선언 타이밍과 for문 작성 타이밍을 정확하게 알고 append 메서드를 정확하게 쓸 줄 알아야 할 것 같습니다.
>> print(result)
[
[2000.28, 3050.427, 2050.2870000000003, 1980.2772],
[7501.05, 2050.2870000000003, 2050.2870000000003, 1980.2772],
[15452.163, 15052.107, 15552.177, 14902.086000000001]
]
정답확인#답지
result = []
for line in data:
sub = []
for column in line:
sub.append(column * 1.00014)
result.append(sub)
print(result)
195
ohlc 리스트에는 시가(open), 고가 (high), 저가 (low) , 종가(close)가 날짜별로 저장돼 있다. 화면에 종가데이터를 출력하라.
- 리스트 내 리스트 중 특정 인덱스의 요소만 출력할 수 있는가?
ohlc = [["open", "high", "low", "close"],
[100, 110, 70, 100],
[200, 210, 180, 190],
[300, 310, 300, 310]]
100
190
310
정답확인
ohlc = [["open", "high", "low", "close"],
[100, 110, 70, 100],
[200, 210, 180, 190],
[300, 310, 300, 310]]
for i in ohlc[1:]:
print(i[-1])
196
ohlc 리스트에는 시가(open), 고가 (high), 저가 (low) , 종가(close)가 날짜별로 저장돼 있다. 종가가 150원보다 큰경우에만 종가를 출력하라.
- 요구역량 : 리스트 내 리스트 중 조건에 따라 특정요소만 출력할 수 있는가?
굳이 for문을 2번쓰지 않고도 풀 수 있는 문제입니다.
ohlc = [["open", "high", "low", "close"],
[100, 110, 70, 100],
[200, 210, 180, 190],
[300, 310, 300, 310]]
190
310
정답확인ohlc = [["open", "high", "low", "close"],
[100, 110, 70, 100],
[200, 210, 180, 190],
[300, 310, 300, 310]]
for i in ohlc[1:]:
for a in i[3:]:
if a > 150:
print(a)
#답지
for row in ohlc[1:]:
if (row[3] > 150):
print(row[3])
197
ohlc 리스트에는 시가(open), 고가 (high), 저가 (low) , 종가(close)가 날짜별로 저장돼 있다. 종가가 시가 보다 크거나 같은 경우에만 종가를 출력하라.
- 요구역량 : 리스트 내 리스트 중 특정 리스트 요소와 크기 비교를 통해 조건에 부합한 요소만 출력할 수 있는가?
196번과 동일한 방법으로 풀면 됩니다.
ohlc = [["open", "high", "low", "close"],
[100, 110, 70, 100],
[200, 210, 180, 190],
[300, 310, 300, 310]]
100
310
정답확인ohlc = [["open", "high", "low", "close"],
[100, 110, 70, 100],
[200, 210, 180, 190],
[300, 310, 300, 310]]
for i in ohlc[1:]:
for a in i[3:]:
if a >= i[0]:
print(a)
ohlc = [["open", "high", "low", "close"],
[100, 110, 70, 100],
[200, 210, 180, 190],
[300, 310, 300, 310]]
for i in ohlc[1:]:
if i[3] >= i[0]:
print(i[3])
198
ohlc 리스트에는 시가(open), 고가 (high), 저가 (low) , 종가(close)가 날짜별로 저장돼 있다. 고가와 저가의 차이를 변동폭으로 정의할 때 변동폭을 volatility 이름의 리스트에 저장하라.
- 요구역량 : 리스트내 리스트 요소 간 연산의 값을 하나의 리스트로 묶어서 출력할 수 있는가?
ohlc = [["open", "high", "low", "close"],
[100, 110, 70, 100],
[200, 210, 180, 190],
[300, 310, 300, 310]]
>> print(volatility)
[40, 30, 10]
정답확인ohlc = [["open", "high", "low", "close"],
[100, 110, 70, 100],
[200, 210, 180, 190],
[300, 310, 300, 310]]
volatility = []
for i in ohlc[1:]:
a = i[1]-i[2]
volatility.append(a)
print(volatility)
199
리스트에는 3일 간의 ohlc 데이터가 저장돼 있다. 종가가 시가보다 높은 날의 변동성 (고가 - 저가)을 화면에 출력하라.
- 요구역량 : 리스트 내 리스트 요소간 연산결과가 조건에 부합할 경우에만 연산결과를 출력할 수 있는가?
ohlc = [["open", "high", "low", "close"],
[100, 110, 70, 100],
[200, 210, 180, 190],
[300, 310, 300, 310]]
종가가 시가보다 높은 거래일의 OHLC는 [300, 310, 300, 310] 이다. 따라서 이 거래일의 변동성은 10 (310 - 300)이다.
10
정답확인ohlc = [["open", "high", "low", "close"],
[100, 110, 70, 100],
[200, 210, 180, 190],
[300, 310, 300, 310]]
for i in ohlc[1:]:
if i[-1] > i[0]:
print(i[-1]-i[0])
200
리스트에는 3일 간의 ohlc 데이터가 저장돼 있다. 시가에 매수해서 종가에 매도 했을 경우 총 수익금을 계산하라.
- 요구역량 : 변수 +=1 을 활용하여 각 요소를 연산한 전체 합을 구할 수 있는가?
변수 += 1은 여러 리스트에서 계산한 값을 합계산하여 출력할 수 있는 계산식이므로, 꼭 기억해두어야한다.
ohlc = [["open", "high", "low", "close"],
[100, 110, 70, 100],
[200, 210, 180, 190],
[300, 310, 300, 310]]
1일차 수익 0원 (100 - 100), 2일차 수익 -10원 (190 - 200), 3일차 수익 10원 (310 - 300) 이다.
0
정답확인ohlc = [["open", "high", "low", "close"],
[100, 110, 70, 100],
[200, 210, 180, 190],
[300, 310, 300, 310]]
a = 0
for i in ohlc[1:]:
a += (i[-1]-i[0])
print(a)
점점 문제가 어려워지네요,,
감사합니다.
'Coding Test > 초보자를 위한 파이썬 300제' 카테고리의 다른 글
[독학 파이썬] 초보자를 위한 파이썬 300제 풀이(211~220)_12.21 (0) | 2022.12.21 |
---|---|
[독학 파이썬] 초보자를 위한 파이썬 300제 풀이(201~210)_12.21 (0) | 2022.12.21 |
[독학 파이썬] 초보자를 위한 파이썬 300제 풀이(181~190)_12.20 (0) | 2022.12.20 |
[독학 파이썬] 초보자를 위한 파이썬 300제 풀이(171~180)_12.20 (0) | 2022.12.20 |
[독학 파이썬] 초보자를 위한 파이썬 300제 풀이(161~170)_12.20 (0) | 2022.12.20 |