상세 컨텐츠

본문 제목

[Python 파이썬 독학 4일차]

파이썬 스터디/파이썬-Python 기본편

by 후즈테크 2020. 9. 22. 21:25

본문

반응형

 

회사 일과 따라가지 못하는 이해로 ... 같은 부분을 몇일을 봤으나,

나를 자책할 때 쯤 잘못된 점을 찾았다......

 

나도코딩님은 6시간이면 된다고 하셨지.....ㅠㅠ

결과는 아래에 ㅠㅠ

 

1. 분기 IF

: 조건에 따라 다른 동작을 원할 때 사용

weather = input("오늘 날씨가 어때요?") # input 사용자의 입력을 받는 변수(string)

if weather == "비" or weather == "눈" : # weather = "눈" or "비" 로 할 경우, 결과 값이 다름. 같은 변수라도 or 뒤 weather == 넣어줘야함.

print("우산을 챙기세요.")

elif weather == "미세먼지" :

print("마스크를 챙기세요.")

else :

print("준비물 필요없어요.")

 

temp = int(input("기온이 어때요? ")) # 온도에 맞게 정수 값으로 변환

if 30 <= temp :

print("너무 더워요. 나가지 마세요.")

elif 10 <= temp and temp < 30 : # 10 <= temp < 30 으로도 표현가능

print("괜찮은 날씨에요.")

elif 0 <= temp < 10 :

print("외투를 챙기세요")

else :

print("너무 추워요. 나가지 마세요.")

반응형

2. for

: 순서대로 반복문을 진행 할 경우 사용.

---------------------------------------------------------------------

원하는 출력 값

대기번호 : 0

대기번호 : 1

대기번호 : 2

대기번호 : 3

대기번호 : 4

---------------------------------------------------------------------

방법 1.

for waiting_no in [0,1,2,3,4]: # 0부터 순서대로 반복

print("대기번호 : {0}".format(waiting_no))

 

방법 2.

for waiting_no1 in range(5) : #0,1,2,3,4 / range(1,6) 등으로도 표현 가능

print("대기번호 : {0}".format(waiting_no1))

# starbuks 내 손님이 아래와 같을 때, for 문을 이용해서 출력 가능.

starbucks = ["아이언맨", "토르", "아이엠 그루트"] # 방문자

for customer in starbucks : # customer 라는 변수는 starbucks 내에 있는 리스트 이고,

print("{0}님 주문하신 커피나왔습니다." .format(customer)) # 순서대로 리스트 내 값을 반환

 

3. while

: 해당 조건을 만족할 때 까지 반복할 때 사용.

case 1

# 준비된 커피의 고객을 부르고, 5회 초과 시, 커피 폐기처분하는 코딩

customer = "토르"

index = 5

while index >= 1: #조건을 만족할 때 까지 반복

print("{0}, 커피가 준비되었습니다. {1} 번 남았어요." .format(customer, index))

index -= 1

if index == 0:

print("커피는 폐기처분 되었습니다.")

'''

결과 값 :

토르, 커피가 준비되었습니다. 5 번 남았어요.

토르, 커피가 준비되었습니다. 4 번 남았어요.

토르, 커피가 준비되었습니다. 3 번 남았어요.

토르, 커피가 준비되었습니다. 2 번 남았어요.

토르, 커피가 준비되었습니다. 1 번 남았어요.

커피는 폐기처분 되었습니다.

'''

​

​

case 2

# 준비된 커피의 고객을 부르고, 해당 고객이 올 때까지 반복, 무한루프 발생함

customer = "아이언맨" #무한루프 발생, 종료 시 Ctrl + C

index = 0

while True :

print("{0}, 커피가 준비되었습니다. 호출 {1}회." .format(customer, index))

index += 1

# 무한루프가 발생하지 않도록 코딩 되어야 함.

'''

결과 값 :

아이언맨, 커피가 준비되었습니다. 호출 1회.

아이언맨, 커피가 준비되었습니다. 호출 2회.

~~

아이언맨, 커피가 준비되었습니다. 호출 54859회.

아이언맨, 커피가 준비되었습니다. 호출 54860회.

아이언맨, 커피가 준비되었습니다. 호출 54861회.

아이언맨, 커피가 준비되었습니다. 호출 54862회.

아이언맨, 커피가 준비되었습니다. 호출 54863회.

아이언맨, 커피가 준비되었습니다. 호출 54864회.

아이언맨, 커피가 준비되었습니다. 호출 54865회.

'''

​

​

 

case 3

# 고객 확인 후, 해당 고객이 올 때 까지 호출

customer = "토르" # 원하는 고객

person = "Unknown" # 커피 완료 여부 확인하는 고객

while person != customer : # 커피 주문이 완료된 고객과 확인하는 고객이 같지 않을 경우 반복

print("{0}, 커피가 준비되었습니다." .format(customer))

person = input("이름이 어떻게 되세요? ") # 커피 완료 여부 확인하는 고객 확인

4. continue 와 break

: 반복문 속에서 해당 조건 만족 시 예외 처리 후 진행 할지(continue), 멈출지(break)를 결정하는 구문

case1. # 1~10까지의 출석번호를 가진 학생이 있으며, 결석한 학생을 제외하고 순서대로 책을 읽는 코딩

absent = [2, 5] # 결석

for student in range(1, 11) : # 1 ~ 10 번까지

if student in absent : # 학생이 결석자 리스트에 있을 경우,

continue # 아래 문장을 실행시키지 않고, 반복문 실행

print("{0}, 책을 읽어봐".format(student))

'''

결과 값 :

1, 책을 읽어봐

3, 책을 읽어봐

4, 책을 읽어봐

6, 책을 읽어봐

7, 책을 읽어봐

8, 책을 읽어봐

9, 책을 읽어봐

10, 책을 읽어봐

'''

case 2. # case 1에서 조건 추가. 책을 가지고 오지 않은 학생이 있을 경우, 멈춤.

absent = [2, 5] # 결석

no_book = [7] #책을 깜빡했음

for student in range(1, 11) : # 1 ~ 10 번까지

if student in absent :

continue # 아래 문장을 실행시키지 않고, 반복문 실행

elif student in no_book : # elif 위치가 cotinue 와 continue 실행 문장 사이에 위치함, 위치 바뀔 경우 Error

print("오늘 수업 여기까지. {0}는 교무실로 따라와" .format(student))

break # 지금 상황에서 종료

print("{0}, 책을 읽어봐".format(student))

'''

결과 값 :

1, 책을 읽어봐

3, 책을 읽어봐

4, 책을 읽어봐

6, 책을 읽어봐

오늘 수업 여기까지. 7는 교무실로 따라와

'''

5. 한줄로 for 문 작성하기

: 변수 = [ 변수를 기준한 결과 값 for 변수(i) in 예제 리스트 ]

# 예제 리스트 내에 있는 값을 i 라 하고, i를 기준으로 한 결과 값을 표기

#출석 번호가 1,2,3,4 앞에 100을 붙이기로 함 -> 101, 102, 103, 104

students = [1,2,3,4]

print(students) # 결과 값 : [1, 2, 3, 4]

students = [ i + 100 for i in students]

print(students) # 결과 값 : [101, 102, 103, 104]

# 학생 이름을 길이로 변환

students = ["Iron Man", "Thor", "I am Groot"]

print(students) # 결과 값 : ['Iron Man', 'Thor', 'I am Groot']

students = [len(i) for i in students]

print(students) # 결과 값 : [8, 4, 10]

# 학생 이름을 대문자로 변환

students = ["Iron Man", "Thor", "I am Groot"]

print(students) # 결과 값 : ['Iron Man', 'Thor', 'I am Groot']

students = [i.upper() for i in students]

print(students) # 결과 값 : ['IRON MAN', 'THOR', 'I AM GROOT']

Quiz 5.

당신은 Cocoa 서비스를 이용하는 택시 기사님입니다.

50명의 승객과 매칭 기회가 있을 때, 총 탑승 승객 수를 구하는 프로그램을 작성하시오.

조건 1 : 승객별 운행 소요 시간은 5분 ~ 50분 사이의 난수로 정해집니다.

조건 2 : 당신은 소요시간 5분 ~ 15분 사이의 승객만을 매칭해야 합니다.

---------------------------------------------------------------------------------------

(출력문 예제)

[O] 1번째 손님 (소요시간 : 15분)

[ ] 2번째 손님 (소요시간 : 50분)

[O] 3번째 손님 (소요시간 : 5분)

......

[O] 50번째 손님 (소요시간 : 16분)

총 탑승 승객 : 2분

---------------------------------------------------------------------------------------

Ans 1. 내가 작성한 코딩

from random import *

match = 0

for cus in range(1,51) :

dtime = randrange(5,50)

if 5 <= dtime <= 15 :

print( "[O] {0}번째 손님 (소요시간 : {1}분)" .format(cus, dtime))

match += 1

else :

print( "[ ] {0}번째 손님 (소요시간 : {1}분)" .format(cus, dtime))

print("총 탑승 승객 : {0}분" .format(match))

---------------------------------------------------------------------------------------

Ans 2. '나도코딩' 님 작성한 코딩

from random import *

cnt = 0

for i in range(1,51):

time = randrange(5,51)

if 5 <= time <= 15:

print( "[O] {0}번째 손님 (소요시간 : {1}분)" .format(i, time))

cnt += 1

else:

print( "[ ] {0}번째 손님 (소요시간 : {1}분)" .format(i, time))

print("총 탑승 승객 : {0}분" .format(cnt))

from random import *

cnt = 0

for i in range(1,51):

	time = randrange(5,51)

	if 5 <= time <= 15:

		print( "[O] {0}번째 손님 (소요시간 : {1}분)" .format(i, time))

		cnt += 1

	else:

		print( "[ ] {0}번째 손님 (소요시간 : {1}분)" .format(i, time))

print("총 탑승 승객 : {0}분" .format(cnt))

---------------------------------------------------------------------------------------

FeedBack...

내가 작성한 코딩은 동작하지 않았고, 나도코딩 님 코딩과 비교했을 때,

변수 외에는 다른 부분이 없었으나, 동작하지 않았다.

 

어쩔 수 없이 나도코딩 님 답안 코딩을 보며 똑같이 작성했다고 생각 했으나

동작하지 않았다.....(이때부터 뭐지? 멘붕시작)

 

이 상태에서 고민만 하던 시간이 이틀....ㅠㅠ

결론은 들여쓰기 차이였다....

나에게 익숙한 SQL 처럼 구문의 순서만 맞을 경우, 동작하지 않는다...

아래와 같이 해당 명령어(for, if 등) 과 그 아래에서 동작하는 print 등의 들여쓰기가 맞춰져야 해당 코드가 블럭 단위에 맞게 적용되는 거 같다..ㅠㅠ

 

from random import *

cnt = 0

for i in range(1,51):

[Tap]time = randrange(5,51)

[Tap]if 5 <= time <= 15:

[Tap][Tap]print( "[O] {0}번째 손님 (소요시간 : {1}분)" .format(i, time))

[Tap][Tap]cnt += 1

[Tap]else:

[Tap][Tap]print( "[ ] {0}번째 손님 (소요시간 : {1}분)" .format(i, time))

print("총 탑승 승객 : {0}분" .format(cnt))

혹시 누군가 똑같이 코딩을 짰는데...혹은 따라 타이핑을 했는데 동작하지 않는다면

들여쓰기를 확인해봐야 할 것 같다.

추가 Ans 2. 내가 작성한 코딩

while 문으로도 될 것 같아서 진행해 봄.

from random import *

​

cus = 1 # 만나는 손님 수, cus 번째 손님

cnt = 0 # 매칭된 손님 수

while cus < 51 : # cus 번째 손님이 51보다 작으면 , 최초 cus = 1 번째

	time = randrange(5,50) # 소요 시간 난수

	if 5<= time <= 15 :

		print( "[O] {0}번째 손님 (소요시간 : {1}분)" .format(cus, time))

		cnt += 1 # 만나는 손님 증가

		cus += 1 # 매칭된 손님 증가

	else :

		print( "[ ] {0}번째 손님 (소요시간 : {1}분)" .format(cus, time))

		cus += 1 #만나는 손님만 증가

print("총 탑승 승객 : {0}분" .format(cnt))

유튜버 '나도코딩' 님의 영상을 보며 공부 및 노트 작성합니다.

함께 공부해 나가실 분은

 

www.youtube.com/watch?v=kWiCuklohdY&feature=youtu.be

반응형

관련글 더보기

댓글 영역