PGR21.com
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다.
통합 규정을 준수해 주십시오. (2015.12.25.)
Date 2019/09/26 10:49:09
Name 첸 스톰스타우트
Subject [질문] 파이썬 입문자 질문..
파이썬 입문자입니다.. 함수 부분 공부중인데

average(명령어,숫자1,숫자2,숫자3...)
이렇게 입력하면 명령어에 따라

1.입력된 전체 숫자의 평균값을 구하거나
2.전체 숫자 평균값에서 나머지를 버린 값을 구하거나
하는 함수를 짜봤는데요

def average(func,*args):
...     total = 0
...     result = 1
...     if func == '전체':
...             for i in args:
...                     total = total + i
...             result = total / len(args)
...             return result
...     if func == '정수':
...             for i in args:
...                     total = total + i
...             result = total // len(args)
...             return result


인터프리터에 이렇게 입력하니 잘 실행되기는 합니다. 근데 여기서 if문하고 for문하고 return result 가 중복되는데 해당 구문을 한번만 작성해서 함수가 작동되게 할수 있는 방법이 혹시 있을까요?
지금은 명령어가 두개뿐이지만 앞으로 명령어를 여러개 넣을 상황이 생기면 그때마다  계속 반복해서 적는건가 싶어서..

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
낚시꾼
19/09/26 11:11
수정 아이콘
result 파트만 if문안에 넣으면 되지 않을까요
19/09/26 11:11
수정 아이콘
지금 이 경우에는 if문을 result에만 넣으면 되겠죠. for문은 위로, return문은 아래로 빼시구요.
한편, 나중에 프로그램이 더 복잡해지면 공통된 부분을 또 다른 함수로 만드는 것도 일반적인 방법입니다. 가령, def sum(args) 같이 합을 구하는 함수를 만들어두면, 비슷한 상황에서 for문을 안 써도 되겠죠?

그런데 사실 sum같이 널리 쓰이는 건 python에 이미 내장되어 있습니다 (..) 즉 for문을 통째로 sum(args) 로 바꾸셔도 잘 돌아갈겁니다.
철철대왕
19/09/26 11:12
수정 아이콘
다른게 result = total / len(args) 이것뿐인데 이 부분만 if 타면 될것같네요. 그리고 라인넘버가 있으면 좋을것 같슴미다.
19/09/26 11:13
수정 아이콘
(수정됨) 여기에 묻어가는 질문으로 저도 초보인데요.
def average(func,*args):
total = 0
result = 1
for i in args:
****total += 1
****if func == '전체':
********result = total / len(args)
****elif func == '정수':
****result = total // len(args)
return result
이렇게 하면 안되나요?
19/09/26 12:26
수정 아이콘
답은 나오겠지만 좋은 코드는 아닙니다. 결과적으로 맨 마지막에 계산하는 result만 의미가 있는데 중간에 의미없는 계산을 하게 되니까요.
월급루팡의꿈
19/09/26 11:16
수정 아이콘
for i in args:
total += i
if func=='전체:
result = total / len(args)
else:
result = total // len(args)
return result
하셔도 되요.
첸 스톰스타우트
19/09/26 11:45
수정 아이콘
모두들 답변 감사드립니다~~
궁금했던점이 해결되었네요 ^^
joshisland
19/09/26 18:15
수정 아이콘
>>> def average(func, *args):
... return sum(args) / len(args) if func == '전체' else int(sum(args) / len(args)) if func == '정수' else None

같이 값을 결정하는데 if문을 사용할 수 있습니다.

다른 예제: a = 42 if func == 'FourtyTwo' else "I don't know"
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
137993 [질문] 인터넷 속도 문의드립니다. 대칭 100M vs 비대칭 500M [12] 김태동 No.17577 19/09/27 7577
137992 [질문] 라섹 후 시력 하락. "가근시"에 대해 아시나요??? [4] WHIPLASH5177 19/09/27 5177
137991 [질문] 유튜브에 리뷰 영상들 저작권 위반아닌가요? [11] 콩사탕5500 19/09/27 5500
137990 [질문] LOL 이번 월드 챔피언쉽 패스 사용법이 궁금합니다 [3] Breguet3190 19/09/27 3190
137989 [질문] 갤럭시s10e 128g 자급제폰으로 80만원이면 적당한가요? [17] 삭제됨3938 19/09/27 3938
137988 [질문] 마우스 추천좀 부탁드립니다. [21] papaGom4147 19/09/27 4147
137987 [질문] 중소 게임개발 업체 질문 [7] 교자만두2350 19/09/27 2350
137986 [질문] 다들 가지고 계신 주차 꿀팁좀 알려주십쇼 흑흑 [21] 영혼4089 19/09/27 4089
137985 [질문] 서울 드래곤힐스파 가볼만 한가요? [9] 여섯넷백3399 19/09/27 3399
137984 [질문] 미국 환승 비자질문 [8] CapitalismHO3487 19/09/27 3487
137983 [질문] 미용실 고르는 법 부탁드립니다 [13] Lakto5779 19/09/27 5779
137982 [질문] Pes6(위닝10)구할수 있을까요? 마담리프4242 19/09/27 4242
137981 [질문] 피파 20 PC 버전 DirectX 에러 고치신 분? [2] 스토리북17977 19/09/27 17977
137980 [질문] 최근 다음 검색어 질문입니다 wish buRn2256 19/09/27 2256
137979 [질문] 모니터 구입 문의 (4k? 144hz?) [6] 돼지샤브샤브3277 19/09/27 3277
137978 [질문] 일드 당신차례입니다. 재밌나요?? [3] 애플3932 19/09/27 3932
137977 [질문] 공부 잘하시는 분들 및 공무원 합격생 분들 질문있습니다. [6] 삭제됨4322 19/09/27 4322
137976 [질문] 네트워크 구성 관련 질문입니다 [1] qwertyy3745 19/09/27 3745
137975 [질문] 강남역 주변 동남아 식당 추천 부탁드립니다. [6] 혼다히토미3003 19/09/27 3003
137974 [질문] 코인세탁방 건조기 온도가 어느정도인가요? [3] 마담리프4019 19/09/27 4019
137973 [질문] 주식을 해보고 싶습니다. [6] 어빈4653 19/09/27 4653
137972 [질문] 영양제좀 챙겨 먹어볼까해서 알아보는중인데 추천부탁드립니다.. [4] 웃어른공격3993 19/09/27 3993
137971 [질문] 다이어트 질문입니다 [3] AminG3362 19/09/27 3362
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로