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"
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
137938 [질문] [컴견적] 이륙허가 부탁드립니다. [6] Albert Camus2990 19/09/26 2990
137937 [질문] (겜알못) 풋볼매니저(FM) 재밌게 즐기는 법 질문드려요 [12] 코시엔6217 19/09/26 6217
137936 [질문] 50대 중년 정장 브랜드 추천부탁드립니다 [13] 정어리고래10968 19/09/26 10968
137935 [질문] 파이썬 입문자 질문.. [8] 첸 스톰스타우트2520 19/09/26 2520
137934 [질문] 미국대학->미국대학원 vs 한국대학->미국대학원 어느게 더 나을까요.? [29] 뒷산신령4413 19/09/26 4413
137933 [질문] 여기가 바로 서울 최고 맛집이다!! 하는 곳 아시는분 계신가요 [26] 봄날엔4123 19/09/26 4123
137932 [질문] 오래 서있는 직업은 어떤게 있을까요? [20] Secundo4378 19/09/26 4378
137931 [질문] 전해수기란거 진짠가요? [4] 그말싫4636 19/09/26 4636
137930 [질문] f코드...어떻하면 좋을까요... [12] 비오는거리2708 19/09/26 2708
137929 [질문] 혼밥 잘 못하시는 분들 있나요? [11] 질게만쓰는사람2887 19/09/26 2887
137928 [질문] 선물받은 물건을 파는게 옳은걸까요? [16] 벙아니고진자야4550 19/09/26 4550
137927 [질문] 남성 올인원 로션 추천해주세요!!! [14] 생힝4539 19/09/26 4539
137926 [질문] 운동화에서 쓰레기 냄새가 나는데 어쩌죠? [8] Proactive3023 19/09/26 3023
137925 [질문] 다이어트 이 정도 식단으로 하면 괜찮을까요? [4] 핸드레이크2564 19/09/26 2564
137923 [질문] 내장그래픽 구형컴에서 스타리마스터가 버벅대지 않으려면 어떻게...? [3] 공발업나코템플러2834 19/09/26 2834
137922 [질문] 삼알못)이각 곽사의 악행이 그렇게 심했나요? [2] valewalker3886 19/09/26 3886
137921 [질문]  제꺼 메인보드가 블루투스를 지원하는지 알 수 있을까요? [6] 늑대가낙타낳다2741 19/09/25 2741
137920 [질문] (feat. 이시국) 일본 여행 정보 커뮤니티 없을가요.. [6] 냉면과열무3340 19/09/25 3340
137919 [질문] 다이어트 시작한지 3일된 사람인데 저도 질문이 있습니다. [14] 레너블7534 19/09/25 7534
137918 [질문] 인터넷 업그레이드 관련 질문 입니다. [3] Eulbsyar2542 19/09/25 2542
137917 [삭제예정] 혹시 치킨 쿠폰을 대신 가져가실 분 계신가요? [64] 타케우치 미유4408 19/09/25 4408
137916 [질문] 와우 클래식 하시는 분들 재밌으신가요? [11] Synopsis3979 19/09/25 3979
137915 [질문] 빅스비 연락처 중복검색 오류 해결방안 문의드립니다. 할부지상어1928 19/09/25 1928
목록 이전 다음
댓글

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