파이썬

파이썬

QA

파이썬

본문

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() # 이하 생략
답변을 작성하시기 전에 로그인 해주세요.
전체 123,118 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT