whatisthis?
Phython. 파이썬 코딩 기초편-06 본문
<Quiz>
당신은 카카오 서비스를 이용하는 택시기사이다.
50명의 승객과 매칭 기회가 있을때, 총 탑승 승객 수를 구하는 프로그램을 작성하시오.
<조건>
1. 승객별 운행 소요 시간은 5분 ~ 50분 사이 난수로 정해진다.
2. 당신은 소요시간 5분 ~ 15분 사이 승객만 매칭해야 한다.
<출력 예시>
[O] 1번째 손님 (소요시간 : 15분) [ ] 2번쨰 손님 (소요시간 : 50분) [O] 3번째 손님 (소요시간 : 5분) ... [ ] 50번째 손님 (소요시간 : 16분) 총 탑승 승객 : 2 분 |
내가 작성한 코드.
# 50명의 손님 중 탑승 승객 수 구하는 프로그램
from random import *
count = 0;
for matching in range(1, 51):
time = randint(5, 51)
if(5 <= time <= 15):
print("[O] {0}번째 손님 (소요시간 : {1}분)".format(matching, time))
count += 1
else:
print("[ ] {0}번째 손님 (소요시간 : {1}분)".format(matching, time))
print("총 탑승 승객 : " + str(count) + "분")
1. randint(시작,끝) + a 이용 2. int(random() * 끝값 ) + a ) 이용 3. randrange(시작, 끝+1) + a 이용 |
<수정할 것>
randint를 사용했으므로 (5,50)으로 작성해야한다.
randrange의 경우엔 (5,51)이다.
*** 점점 퀴즈를 풀면서 효율적으로 코드를 작성할 줄 알게 된 것 같다.
강의에서 언급된 모범답안과 정확히 일치했다.
단, randint이므로 끝값+1이 아닌 그냥 끝값만 적으면 된다.
1. 함수
<사용자 함수의 정의>
def 함수명 () : |
def = define (v.정의하다)
예제1.
#함수 정의시 def 함수명():
def open_account():
print("새로운 계좌가 생성되었습니다.")
open_account()
def로 함수를 정의하기만 해선 아무 결과도 나타나지 않는다.
함수명() 과 같이 함수를 불러와야 결과가 시행된다.
___
예제 2.
#balance = 잔액, money = 입금할 돈
def deposit(balance, money):
print("입금이 완료되었습니다. 잔액은 {0}원 입니다.".format(balance + money))
return balance + money
balance = 0
balance = deposit(balance, 1000)
print(balance)
이처럼 함수에 입력값이 있도록 설정할 수도 있다.
(balance, money라는 값)
format을 통해 balance와 money를 더한 값을 출력했지만,
balance 변수에 더한 값을 저장하기 위해서는 return 을 통해 저장해주어야한다.
return balance + money라는 의미는 balance값에 money를 더한 값을 반환한다는 의미이다.
___
예제 2-(2)
def withdraw(balance, money):
if balance >= money:
print("출금이 완료되었습니다. 잔액은 {0}원 입니다.".format(balance - money))
return balance - money
else:
print("잔액이 부족합니다. 잔액은 {0}원 입니다.".format(balance))
return balance
다음과 같이 출금하는 withdraw 함수도 선언한다.
단, 이때 잔액이 출금하는 돈보다는 커야하므로 if-else문을 이용하여 두가지 경우로 나눈다.
balance = 0
balance = deposit(balance, 1000)
balance = withdraw(balance, 2000)
위에서 선언했던 deposit 함수로 balance 변수에 1000원을 더해주고, (입금)
withdraw함수로 balance 변수에서 2000을 빼려고 시도해보면 (출금)
if문에서 balance >= money 에 의해 else문이 실행되어 다음과 같은 결과가 나온다.
+) balance = withdraw(balance, 500)으로 바꿔본 결과 정상적으로 if문의 결과가 시행되었다.
___
예제 2-(3)
def withdraw_night(balance, money): #저녁에 출금
commision = 100
return commision, balance - money - commision
commision, balance = withdraw_night(balance, 500)
print("수수료가 {0}원이며, 잔액은 {1}원 입니다.".format(commision, balance))
이번에는 return에서 두가지 값을 한번에 반환하도록 하는 예제이다.
commision값을 return하고, 잔액인 balance - money - commision 값을 return한다.
따라서, 변수 두가지에 대한 값을 반환했으므로
commision, balance = withdraw_night(balance, 500)
과 같이 입력해야한다.
2. 기본값 설정
**참고 : 한 문장이 너무 길때는 역슬래시(\)를 쳐주고 엔터를 치면 두줄을 한줄로 알아서 인식한다.
def profile(name, age, main_lang):
print("이름 : {0}\t나이: {1}\t주 사용 언어: {2}" \
.format(name, age, main_lang))
profile("김씨", 20, "파이썬")
profile("최씨", 25, "자바")
이때, 모든 사람의 나이와 사용 언어가 같다면?
일일히 입력하지 않고 기본값을 설정해주면 된다.
#나이와 언어가 같은 사람들의 경우 기본값을 설정해주면 된다.
def profile(name, age=17, main_lang="파이썬"):
print("이름 : {0}\t나이: {1}\t주 사용 언어: {2}" \
.format(name, age, main_lang))
profile("김씨")
profile("최씨")
다음과 같이 함수의 3개의 인자중에서 name만 입력해도 된다.
(나머지 age, main_lang에는 기본값이 설정되어있으므로)
But. 만약 기본값이 설정되어있어도 직접 입력한 경우에는 그 값으로 대신해서 나오게 된다.
profile("정씨",18)
3. 키워드값
def profile(name, age, main_lang):
print(name, age, main_lang)
profile(name="김씨", main_lang="자바", age=25)
profile(main_lang="파이썬", age=21, name="최씨")
+) 응용
profile("김씨")
profile(name="김씨")
profile("김씨",17,"파이썬")
profile( name="김씨", main_lang="파이썬")
4. 가변인자
def profile(name, age, lang1, lang2, lang3, lang4, lang5):
print("이름 : {0}\t나이 : {1}\t".format(name, age), end=" ")
print(lang1, lang2, lang3, lang4, lang5)
profile("김씨", 22, "파이썬", "C", "자바", "C#", "C++")
이때, 만약 인자수가 5개가 아니고 6개로 늘어난다면?
또는 사람에 따라서 할줄아는 언어가 3개라면 남은 두칸은 "" 와 같이 빈칸으로 입력해야한다.
이를 해결하려면 '가변인자'를 이용하자!
___
def profile(name, age, *language):
print("이름 : {0}\t나이 : {1}\t".format(name, age), end=" ")
for lang in language:
print(lang, end=" ")
print()
profile("김씨", 22, "파이썬", "C", "자바", "C#")
profile("최씨", 28, "html", "css")
가변인자는 스타키(*)를 변수명 앞에 붙여서 선언한다.
예> *language
이는 이에 해당하는 인자수가 1개이든, 100개이든 상관없이 자동으로 크기가 조정이 되는 '가변' 인자이다.
위 예제에서도 김씨는 4가지의 언어를, 최씨는 2가지의 언어를 할 수 있는데
다른 "" 을 입력하거나 변수를 추가하는 등의 불편함 없이 자동으로 알아서 가변인자가 해결해준다.
** for문을 이용하여 lang, end=" " 를 실행한 이유는 줄바꿈 없이 나열하기 위해서이다.
for lang in language: print(lang, end=" ") print() |
+) 마지막줄에 for문 바깥에 print()가 있는 이유 -> 줄바꿈을 위해서!
5. 지역변수와 전역변수
지역변수 = 호출이 끝나면 사라지는 것
전역변수 = 모든 공간에서 부를 수 있는 것
gun = 10
def checkpoint(soldiers):
global gun #전역공간에 있는 gun 변수 사용
gun = gun - soldiers
print("[함수 내] 남은 총 : {0}".format(gun))
print("전체 총 : {0}".format(gun))
checkpoint(2)
print("전체 총 : {0}".format(gun))
global 변수명 << 전역변수 사용함.
만약, 함수 내에서 gun이라는 변수를 선언해서 사용했다면,
첫번째 줄에 있는 gun, 즉 전역변수인 gun과는 달리
지역변수인 gun으로써 작용했을 것임. (즉, 함수내에서만 쓰이고, 함수 호출이 끝나면 사라짐)
그러나 전역함수보다는 return값을 이용하는것을 권장.
cf. return값을 사용한 예제
gun = 10 # 이건 함수 밖에서 선언한 gun함수(전역)
def checkpoint_ret(gun, soldiers): # 함수 내에서 gun과 soldiers라는 인자 사용
gun = gun - soldiers
print("[함수 내] 남은 총 : {0}".format(gun))
return gun # return을 통해 gun값에 출력을 보내버림
print("전체 총 : {0}".format(gun)) # 첫번째 줄에 있는 gun변수 값
gun = checkpoint_ret(gun, 2) # 함수에서 soldeirs를 2로 하여 gun값을 return 받아옴
print("남은 총 : {0}".format(gun)) # 함수에서 받아온 gun값 출력
<Quiz>
표준 체중을 구하는 프로그램을 작성하시오
*공식
남자 : 키(m) * 키(m) * 22
여자 : 키(m) * 키 (m) * 21
<조건>
1. 표준체중은 별도의 함수 내에서 계산
- 함수명 : std_weight / 전달값 : height, gender
2. 표준 체중은 소수점 둘쨰자리까지 표기
<출력 예제>
키 175cm 남자의 표준 체중은 67.38kg 입니다.
'WEB STUDY > PHYTHON | BACK-END' 카테고리의 다른 글
Phython. 파이썬 코딩 기초편-08(上) (0) | 2021.09.18 |
---|---|
Phython. 파이썬 코딩 기초편-07 (3) | 2021.09.16 |
Phython. 파이썬 코딩 기초편-05 (2) | 2021.09.14 |
Phython. 파이썬 코딩 기초편-04 (5) | 2021.08.31 |
Phython. 파이썬 코딩 기초편-03 (1) | 2021.08.28 |