파이썬
본문
turtle로 5명학생의 평균점수를 막대그래프로 그리기인데요
반복되는 걸 최대한 줄여서 이중for문이나 다중for문을 사용해야하는데 어떻게 바꾸나요...?
import turtle
def drawBar(height):
t.begin_fill()
t.left(90)
t.forward(height)
t.write(str(height), font = ('Arial', 20, 'bold'))
t.right(90)
t.forward(40)
t.right(90)
t.forward(height)
t.left(90)
t.end_fill()
jeong_jumsu = [75, 60, 90, 85, 15]
kim_jumsu = [30, 25, 55, 66, 52]
lee_jumsu = [60, 60, 75, 58, 45]
park_jumsu = [90, 100, 85,70,100]
min_jumsu = [20, 30, 25, 10, 20]
jeong_avg = 0
kim_avg = 0
lee_avg = 0
park_avg = 0
min_avg = 0
for val in jeong_jumsu:
jeong_avg = jeong_avg + val
jeong_avg = jeong_avg / 5
for val in kim_jumsu:
kim_avg = kim_avg + val
kim_avg = kim_avg / 5
for val in lee_jumsu:
lee_avg = lee_avg + val
lee_avg = lee_avg / 5
for val in park_jumsu:
park_avg = park_avg + val
park_avg = park_avg / 5
for val in min_jumsu:
min_avg = min_avg + val
min_avg = min_avg / 5
date = [jeong_avg, kim_avg, lee_avg, park_avg, min_avg]
t = turtle.Turtle()
t.color("red")
t.fillcolor("green")
t. pensize(3)
for d in date:
drawBar(d)
답변 2
안녕하세요?? ^-^
질문하신 취지가 for문이 여러 번 반복된 것을 이중 for문으로 심플하게 바꾸는 것을 의미하신거죠??
turtle 모듈을 pypi에서 찾지 못했는데 아래 소스가 맞는지 확인 부탁드려요 :)
https://github.com/python/cpython/blob/3.8/Lib/turtle.py
파이썬은 리스트를 요소로 하는 리스트를 허용하기 때문에
다음과 같은 방법으로 이중 for문을 사용해서 반복을 줄일 수 있어요!
jeong_jumsu = [75, 60, 90, 85, 15]
kim_jumsu = [30, 25, 55, 66, 52]
lee_jumsu = [60, 60, 75, 58, 45]
park_jumsu = [90, 100, 85, 70, 100]
min_jumsu = [20, 30, 25, 10, 20]
total_list = [jeong_jumsu, kim_jumsu, lee_jumsu, park_jumsu, min_jumsu] # 리스트 안의 리스트
date = []
for person in total_list: # 이중 for문으로 돌립니다.
temp = 0
for score in person: # 개인별 합계를 구합니다.
temp += score
date.append(temp / 5) # append 메서드로 리스트에 요소를 추가합니다.
t = turtle.Turtle() # 이하 생략
결과값을 찍어보면 [65.0, 45.6, 59.6, 89.0, 21.0]로 동일하게 나오는 것을 확인할 수 있네요 ^^
그럼 즐거운 주말 되세요!
+) 이중 for문을 사용하지 않더라도 sum() 함수를 이용하여 간단하게 처리할 수도 있어요~
total_list = [jeong_jumsu, kim_jumsu, lee_jumsu, park_jumsu, min_jumsu]
date = []
for person in total_list:
temp = sum(person) / 5 # 리스트의 합을 구하여 5로 나눕니다.
date.append(temp)
t = turtle.Turtle() # 이하 생략
++) 람다함수를 사용하면 파이써닉한 방법으로 아주 간단하게 표현할 수도 있어요 ^^
total_list = [jeong_jumsu, kim_jumsu, lee_jumsu, park_jumsu, min_jumsu]
date = list(map(lambda x : sum(x) / 5, total_list))
t = turtle.Turtle() # 이하 생략