본문 바로가기

PYTHON/초보자를 위한 파이썬 300제

08. 파이썬 분기문 191 ~ 200

오 200번이닷 역시나 코드를 조잡하게 짜는 나,,, 공부 또 공부~ 솔직히 이제는 모르는 문법이라기 보다는 내가 배웠던 문법들을 잘 이용해야 한다. 하핫

 

https://wikidocs.net/78565

 

191 ~ 200

.answer {margin-top: 10px;margin-bottom: 50px;padding-top: 10px;border-top: 3px solid LightGray;bo…

wikidocs.net

 

print("-" * 80)
# 2024 03 09 SAT
# 191
# 각가격에 0.014%의 수수료를 포함한 가격을 한 라인에 하나씩 출력
data = [
    [2000, 3050, 2050, 1980],
    [7500, 2050, 2050, 1980],
    [15450, 15050, 15550, 14900]
]

for row in data:
    for col in row:
        print(col + (0.014 * col))

# 192
# 191번 출력 결과에 행 단위로 구분자 추가
for row in data:
    for col in row:
        print(col + (0.00014 * col))
    print("----")

# 193
# 192번 문제의 결과값을 1차원 배열로 리스트에 저장
result = []
for row in data:
    for col in row:
        col = col + col * 0.00014
        result = result + [col]
print(result)

# 194
# 191번 문제의 결과값을 2차원 배열로 리스트에 저장
results = []
for row in data:
    sub = []
    for col in row:
        col = col * 1.00014
        sub.append(col)
    results.append(sub)
print(results)

# 195
# ohlc 리스트의 종가 데이터 출력
ohlc = [["open", "high", "low", "close"],
        [100, 110, 70, 100],
        [200, 210, 180, 190],
        [300, 310, 300, 310]]

for row in ohlc:
    if type(row[3]) == int:
        print(row[3])

for row in ohlc[1:]:
    print(row[3])

# 196
# ohlc 리스트의 종가가 150보다 큰 경우에만 종가 출력
for row in ohlc[1:]:
    if row[3] > 150:
        print(row[3])

# 197
# 종가가 시가보다 크거나 같은 경우에만 종가 출력
for row in ohlc[1:]:
    if row[3] >= row[0]:
        print(row[3])

# 198
# 고가와 저가의 차이인 변동폭을 리스트에 저장
volatilty = []
for row in ohlc[1:]:
    volatilty.append(row[1]-row[2])
print(volatilty)

# 199
# 종가가 시가보다 높을 때 변동폭 출력
for row in ohlc[1:]:
    if row[3] > row[0]:
        print(row[1]-row[2])

# 200
# 시가에 매수해서 종가에 매도했을 때 총 수익금 계산
r = []
for row in ohlc[1:]:
    r.append(row[3] - row[0])
print(sum(r))

re = 0
for row in ohlc[1:]:
    re = re + (row[3]-row[0])
print(re)

191 ~ 200 출력 결과

 

내가 몰랐던 문법

 

1. append

append() 메서드는 리스트에 새로운 요소를 추가하는 데 사용된다. 괄호 안에는 추가하려는 요소가 들어가며 요소는 리스트에 포함될 수 있는 모든 유형의 데이터가 될 수 있다. 

 

2. 194번 문제

1차원 배열을 2차원 배열로 저장하는 문제였다. 여기서의 문제는 행과 열을 저장할 빈 리스트가 2개 필요한데 나는 행을 저장할 리스트 1개만 설정해서 계속 오류?가 발생했다. 열을 저장하는 빈 리스트도 초기화해줬어야 한다. 따라서 각 행의 요소에 대해서 sub이라는 리스트에 저장하고 각 행에 대해 변횐된 sub 리스트를 result 리스트에 추가하는 것이다. 

 

3. 195번 문제

엥 내가 적은 게 사라져따,,,다시 적어보자면 이 문제는 각 행의 세 번째 요소를 반복적으로 접근해야 하는 데 문자열이 들어있는 첫 번째 리스트는 제외하고 나머지 리스트의 세 번째 요소만을 출력해야 했다. 나는 이것을 if문을 사용해 세 번째 요소의 type이 int인지를 판별해 for문을 들어갈 수 있도록 코드를 작성하였다. 하지만 응용된 문제들에서는 이 방식이 너무 코드를 조잡하게 만들어 정답 코드를 확인해보니 ohlc[1:] 를 통해 내가 반복하고 싶은 리스트의 위치를 정할 수 있었다. 이 방식을 통해 뒷 문제들도 고쳐나가고 해결해나갔다. 후,,, 어렵군;;

 

4. 200번 문제 

나는 리스트 자체를 빈 리스트로 초기화해서 리스트 안의 요소들을 더하는 방식으로 코드를 작성하였다. 하지만 변수를 0으로 두고 이 변수에 차례대로 값을 더해나가면 보다 깔끔하게 총합을 구할 수 있다.