목차
6-1. if문
6-2. for문
6-3. while문
6-4. countinue와 breeak
6-5. 한줄 for문
6-6. 퀴즈 #5
7-1. 함수 and 7-2. 전달값과 반환값
7-3. 기본값
7-4. 키워드값
7-5. 가변인자
7-6. 지역변수와 전역변수
7-7. 퀴즈 #6
6-1. if문
파이썬에서 if문을 작성하는 방법은
if 조건 :
실행할 내용
elif 조건 :
실행할 내용
else : > 위의 조건이 다 아니면
실행할 내용
weather = input("오늘 날씨는 어떠합니까?") > input()은 사용자로부터 값을 입력받습니다.
if weather == "비" or "눈": > 비나 눈이올때 or를 사용해서 둘중에 하나일때 if문을 실행시킬 수 있습니다.
int(input("기온은 어때요? ")) -> input으로 입력받을때 무조건 문자열로 받기때문에 숫자를 입력받고 싶으면 int로 바꿔줍니다.
그리고 위에서 사용한 or 말고 and도 가능합니다.
elif 0 <= temp < 10: -> 이런식으로 and를 생략가능
weather = input("오늘 날씨는 어때요?")
if weather == "비" or weather == "눈":
print("우산을 챙기세요")
elif weather == "미세먼지":
print("마스크를 챙기세요")
else:
print("준비물 필요 없어요")
temp = int(input("기온은 어때요? "))
if 30 <= temp:
print("너무 더워요. 나가지 마세요")
elif 10 <= temp and temp < 30:
print("괜찮은 날씨에요")
elif 0 <= temp < 10:
print("외투를 챙기세요")
else:
print("너무 추워요, 나가지 마세요")
6-2. for문
for문은 반복문 입니다.
for문의 사용법은
for waiting_no in [0,1,2,3,4,5]:
print("대기번호 : {0}".format(waiting_no))
만약 숫자가 순차적으로 올라갈때는
for waiting_no in range(1, 6):
print("대기번호 : {0}".format(waiting_no))
처럼 range를 사용하면 더 편합니다..
for waiting_no in range(1, 6):
print("대기번호 : {0}".format(waiting_no))
starbucks = ["아이언맨","토르","그루트"]
for customer in starbucks:
print("{0}, 커피가 준비되었습니다.".format(customer))
6-3. while 문
while문 또한 for문과 마찬가지로 반복문 입니다.
사용법은
while 조건문:
수행할 문장
while문은 조건문이 참(True)인 동안 while 문에 속한 문장이 계속해서 돕니다.
customer = "토르"
index = 5
while index >= 1:
print("{0}, 커피 준비 완료 {1}번 남았습니다.".format(customer, index))
index -= 1
if index == 0:
print("커피는 폐기처분되었습니다.")
만약 코드를 이렇게 작성하면
customer = "아이언맨"
index = 1
while True:
print("{0}, 도와주세요! 호출 {1} 회".format(customer, index))
index += 1
이렇게 무한 루프에 걸려 계속해서 호출합니다.
무한루프를 탈출 하려면 Ctrl + C 를 눌러 탈출할 수 있습니다.
customer = "토르"
person = "Unknown"
while person != customer:
print("{0}, 커피가 준비 되었습니다.".format(customer))
person = input("이름이 어떻게 되세요? ")
while문은 조건에 만족할때까지 계속 돕니다.
위의 코드에서는 손님 customer 가 "토르" 이고 조건문에서는
person 과 customer 이 같지 않으면 계속해서 실행시켜달라는 조건이기 때문에
"토르"라고 입력해야 프로그램이 종료됩니다.
6-4. countinue와 breeak
countinue와 break는 반복문 안에서 사용할 수 있습니다.
예를 들어 책읽기를 시키는데 특정 번호 몇번이 결석 했다고 가정해보고 코드를 작성해보면
absent = [2, 5] # 2번과 5번이 결석 했다고 가정
for student in range(1, 11): # 1부터 10까지
if student in absent: # 만약 absent에 있는 숫자면
continue # 건너뛰기
print("{0}, 책을 읽어라.".format(student))
이제 break를 사용해 보겠습니다.
absent = [2, 5] #결석
no_book = [7] #책이 없음
for student in range(1, 11):
if student in absent:
continue
elif student in no_book:
print("오늘 수업 여기까지. {0}는 교무실로.".format(student))
break # 반복문 즉시 종료
print("{0}, 책을 읽어라.".format(student))
6-5. 한줄 for문
출석번호가 1 2 3 4, 앞에 100을 붙이기로 했습니다. > 101, 102, 103, 104
그러면 숫자에 100씩 더해줘야하는데 이렇게 사용할 수 있습니다.
students = [1,2,3,4]
students = [i+100 for i in students] # i에 100을 더하고 i를 students와 합치겠다.
print(students)
아니면 이름을 길이로 변환할 수도 있습니다.
students = ["Iron man", "Thor", "I am groot"]
students = [len(i) for i in students] # 문자별 길이를 출력해라.
print(students)
마지막으로 문자를 대문자로 다 바꿔주는 코드입니다.
students = ["Iron man", "Thor", "I am groot"]
students = [i.upper() for i in students] # 문자를 다 대문자로 바꿔줘라.
print(students)
6-6. 퀴즈 #5
우선 난수로 정해진다고 했으니까 역시나 random을 사용해야겠군요.
그리고 50번째 손님까지 출력해야 하니까 반복문을 사용해야겠습니다.
from random import *
count = 0
for customer in range(1,51): # 50명의 승객
time = randrange(5, 51) # 5분 ~ 50분 사이의 난수 생성
if time >= 5 and time <= 15: # 5분 ~ 15분 사이의 승객만 매칭
print("[o] {0}번째 손님 (소요시간 : {1}분)".format(customer,time))
count += 1
else:
print("[ ] {0}번째 손님 (소요시간 : {1}분)".format(customer,time))
print("총 탑승 승객 : {0} 분".format(count))
7-1. 함수 and 7-2. 전달값과 반환값
함수를 정의 하는법
def 함수이름(안에 선언할 변수1,변수2):
동작할 내용
함수를 실행시키는법은
함수이름()
def open_account():
print("새로운 계좌가 생성되었습니다.")
def deposit(balance, money): #입금
print("입금이 완료되었습니다. 잔액은 {0}원 입니다.".format(balance+money))
return balance + money
#함수 deposit은 더한 값을 반환해야하기 때문에 return이 필요함.
def withdraw(balance, money): #출금
if balance >= money: # 잔액이 출금보다 많으면
print("출금이 완료되었습니다. 잔액은 {0} 원입니다.".format(balance - money))
return balance - money
else:
print("출금이 완료되지 않았습니다. 잔액은 {0} 원입니다.".format(balance))
return balance
def withdraw_night(balance, money): # 저녁에 출금
commission = 100 # 수수료 100원
return commission, balance - money - commission
open_account()
balance = 0 # 잔액
balance = deposit(balance, 1000)
commission, balance = withdraw_night(balance, 500)
print("수수료 {0} 원이며, 잔액은 {1} 원입니다.".format(commission, balance))
7-3. 기본값
만약에 학생들이 있는데, 프로필을 만들어야 한다고 가정해봅시다.
이 학생들이 같은 학교,같은 학년,같은 반,같은 수업. 이면
학교 이름,몇학년인지,몇반인지,수업과목이 뭔지만 정해주고
이름만 입력하게하면 편하게 프로필을 만들 수 있겠죠?
def profile(name, age = 17, main_lang = "파이썬"): # 기본값을 정해주면 나이,언어는 자동으로 나온다.
print("이름은 : {0}\t나이 : {1}\t주 사용 언어 : {2}".format(name, age, main_lang))
profile("김")
profile("박")
7-4. 키워드값
함수에서 전달받는 매개변수의 값을 키워드를 이용해서 호출해주면
그 키워드에 해당하는 값이 순서가 뒤바뀌어도 잘 전달됩니다.
def profile(name, age, main_lang): # 매개변수 : name,age,main_lang
print(name, age, main_lang)
profile(name="김원식",age=20, main_lang="파이썬")
profile(name="강성욱",age=23, main_lang="자바")
7-5. 가변인자
또 다시 프로필이라는 함수를 만들때
이름,나이,할줄 아는 언어 를 입력받는다고 했을때 코드를 작성하면,
def profile(name, age, lang1, lang2, lang3, lang4, lang5):
print("이름 : {0}\t나이 : {1}\t".format(name, age), end = " ")
# end = " "는 줄바꿈을 하지 않고 이어서 출력한다는 뜻이다.
print(lang1, lang2, lang3, lang4, lang5)
profile("유재석",20,"Python","Java","C","C++","C#")
profile("김태호", 25, "Kotlin", "Swift","","","")
근데 만약
누구는 언어 공부를 열심히 해서 많이 쓸 수 있는데,
누구는 몇개밖에 모를 수 있습니다.
이럴때 쓸 수 있는게 가변인자 입니다.
def profile(name, age, *language):
print("이름 : {0}\t나이 : {1}\t".format(name, age), end = " ")
for lang in language:
print(lang, end=" ")
print()
profile("유재석",20,"Python","Java","C","C++","C#","JavaScript")
profile("김태호", 25, "Kotlin", "Swift")
7-6. 지역변수와 전역변수
지역변수 : 함수내에서만 쓸 수 있는것
함수가 호출될때 만들어 졌다가, 함수 호출이 끝나면 사라집니다.
전역변수 : 모든 공간에서 (프로그램 내에서) 쓸 수 있는것
gun = 10
def checkpoint(soldiers):
gun = gun - soldiers
print("[함수 내] 남은 총 : {0}".format(gun))
print("전체 총 : {0}".format(gun))
checkpoint(2)
print("남은 총 : {0}".format(gun))
# 에러 발생
에러가 발생하는 이유는
checkpoint에서 만들어진 gun은
gun = 10 과 다른 gun이라서 초기화가 안되어있으니까 에러가 발생하는데
이것이 바로 지역변수입니다.
그럼 이제 전역변수를 사용해보겠습니다.
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))
전역변수를 많이쓰면 코드 관리가 어려워집니다. 그래서 권장되는 방법은 아닙니다.
따라서 함수의 전달값으로 전달해서 계산을 하고 반환값을 받아서 사용하는 방법이 있습니다.
gun = 10
def checkpoint_ret(gun, soldiers):
gun = gun - soldiers
print("[함수 내] 남은 총 : {0}".format(gun))
return gun
print("전체 총 : {0}".format(gun))
gun = checkpoint_ret(gun, 2)
print("남은 총 : {0}".format(gun))
7-7. 퀴즈 #6
우선 기본적으로 1m = 100cm 라는 것을 알고있습니다.
175cm 남자는 1.75m x 1.75m x 22 = 67.375가 나오는데,
키를 100으로 나누고 곱해주면 되겠군요.
조건2를 보시면 소수점 둘째자리 까지 표시라고 되어있습니다.
그러면 round()를 사용해야겠습니다.
def std_weight(height, gender):
if gender == "남자":
weight = height / 100 * height / 100 * 22 # 1m = 100cm
print("키 {0}cm{1}의 표준 체중은 {2}kg입니다.".format(height,gender,round(weight,2)))
return round(weight, 2)
elif gender == "여자":
weight = height / 100 * height / 100 * 21 # 1m = 100cm
print("키 {0}cm{1}의 표준 체중은 {2}kg입니다.".format(height,gender,round(weight,2)))
return round(weight, 2)
std_weight(175,"남자")
std_weight(165,"남자")
std_weight(165,"여자")
std_weight(185,"여자")
'Python' 카테고리의 다른 글
Python(6) 활용1 (0) | 2024.11.04 |
---|---|
Python(5) 기초 마무리 (0) | 2024.11.03 |
Python(3) 문자열 , 자료구조 (0) | 2024.11.01 |
Python(2) 파이썬 숫자 (0) | 2024.10.31 |
Python(1) 첫 시작. (0) | 2024.10.30 |