• Daum
  • |
  • 카페
  • |
  • 테이블
  • |
  • 메일
  • |
  • 카페앱 설치
 
카페정보
카페 프로필 이미지
아름다운황혼열차(黃昏列車)
카페 가입하기
 
 
 
 

친구 카페

 
등록된 친구카페가 없습니다
 
카페 게시글
검색이 허용된 게시물입니다.
-───♣자유게시판방 스크랩 코드클럽코리아 파이썬레슨 제12차시
코드클럽코리아 추천 1 조회 120 15.11.26 22:49 댓글 0
게시글 본문내용

코드클럽코리아 파이썬 레슨 제12차시 조영환교수 알고리듬 강의 코드클럽코리아

2015.11.26. 22:13 수정 삭제

복사 http://blog.naver.com/ktfco/220551261537

전용뷰어 보기

Lesson_12 조건문

[학습목표] 조건문을 사용하여 결정구조 문제를 해결할 수 있다.

 

1. 조건문의 이해

조건문은 조건부 실행(conditional execution)을 제어한다. , 조건에 따라 실행할 문장을 결정한다.

조건문을 'if '으로 부르기도 한다.

(1) 조건문 형식

조건문 형식

설명

if_stmt ::= "if" expression ":" suite

("elif" expression ":" suite)*

["else" ":" suite]

?“” 속의 내용은 생략할 수 없다.

?*는 반복 가능, []는 생략 가능을 의미한다.

?expression은 조건 식, suite는 실행할 문장이다.

?실행할 문장이 없는 경우에는 pass문을 사용할 수 있다.

?문장의 실행은 expression을 순서대로 조사하여 최초로 참이 되는 곳의 suite를 실행하고 if 구문을 벗어난다.

모두 거짓이면 else 다음의 suite를 실행하고, else가 없으면 아무것도 실행하지 않고 if 구문을 벗어난다.

 

 

 

 

(2) 조건문의 사용 예

no

statement

example

description

1

"if" expression ":" suite

a=100

if a>90: print('A')

?a90보다 크면 ‘A'를 출력하고, 아니면 출력하지 않는다. 지금은 A가 출력된다.

?if :을 생략할 수 없다.

?print('A')는 줄을 바꾸어 쓸 수 있다.

2

"if" expression ":" suite

“else" ":" suite

a=89

if a>90: print('A')

else: print('not good')

?'a>90'가 참이 아니므로 no pass가 출력된다.

?else:을 생략할 수 없다.

?print('no good')은 줄을 바꾸어 쓸 수 있다.

3

"if" expression ":"

suite

"elif" expression ":"

suite

a=89

if a>90:

print('A')

elif a>80:

print('B')

?a>90이 거짓이므로 다음의 조건인 a>80을 조사한다.

a>80은 참이므로 B를 출력한다.

?elif:을 생략할 수 없다.

elif‘else if’를 줄인 말이다.

4

"if" expression ":"

suite

"elif" expression ":"

suite

"else" ":"

suite

a=79

if a>90:

print('A')

elif a>80:

print('B')

else: print('not good')

?a>90이 거짓, a>80도 거짓.

모두 거짓이므로 not good을 출력한다.

?print('A'), print('B')는 실행할 문장이 한 개이므로

:과 같은 줄에 쓸 수 있다.

5

"if" expression ":"

suite

"elif" expression ":"

suite

"elif" expression ":"

suite

"else" ":"

suite

a=79

if a>90:

print('A')

elif a>80:

print('B')

elif a>70:

print('C')

else:

print('not good')

?elif를 반복 사용한 예이다. C가 출력된다.

?다음과 같이 줄여 쓸 수 있다.

if a>90: print('A')

elif a>80: print('B')

elif a>70: print('C')

else: print('not good')

6

pass

a=100

if a>90:

pass

elif a>80:

print('B')

?pass는 실행할 구문이 없는 경우에 사용한다.

a>90은 참이지만 아무런 일도 하지 않고 if문을 벗어난다.

 

 

 

 

 

no

구분

example

description

1

중첩 조건문

(nested if statement)

kor=100

sci=100

if kor>=90:

if sci>=90:

print('good')

else:

print('more')

?if, elif, else 등의 블록 속에 if문을 사용할 수 있다.

?들여쓰기(indentation)를 주의하여야 한다.

 

2

 

논리연산

kor=100

sci=100

if kor>=90 and sci>=90:

print('good')

else:

print('more')

?조건식에는 비교연산과 조건 연산을 사용한다.

관계연산: >, >=, <, <=, ==, !=, is, is not, in, not in

논리연산: and, or, not,

?1번의 예와 의미가 다르다. 스스로 이해하라.

if 5 in [1,3,5,7]:

print('exist')

?5[1,3,5,7]의 원소이면 참이 된다.

3

참과 거짓

a=“”

if a:

print('True')

else:

print('False')

?참과 거짓은 다음과 같이 판단한다.

거짓:False, 숫자 0, None, ''(빈 문자열),[], (), {}

:True, 위의 거짓이 아닌 모든 것

 

4

3항 연산

a=90

if 90<=a<=100:

print('good')

else:

print('not good')

?3항 연산을 할 수 있다.

?a90이상 100이하이면 good를 출력하고,

아니면 not good을 출력하라.

(90<=a and a<=100)와 같다.

5

조건 표현식

(conditional expression)

a=90

b=100

min=a if a<=b else b

print(min)

?표현식의 가운데에 있는 조건을 먼저 평가하여,

참이면 왼쪽의 것, 거짓이면 오른쪽의 것을 변수에 할당한다.

?다음과 완전히 같은 의미이다.

a=90

b=100

if a<=b:

min=a

else:

min=b

print(min)

 

 

(3) 특별한 조건문

 

 

(4) 조건문의 예

example 1

example 2

점수가 90점 이상이면 ‘A', 80점 이상이면 ’B', 70점 이상이면 'C', 60점 이상이면 'D' 그 외는 ‘F'의 학점이 되게 하라.

우리 집에는 오토바이(motorbike), (car), 헬리콥터(copter) 그리고 제트기(jet)도 있다. 그러나 자전거(bike)가 없으면 BMW(버스, 지하철, 걷기)를 하라.

score=100

if score>=90: grade='A'

elif score>=80: grade='B'

elif score>=70: grade='C'

elif score>=60: grade='D'

else: grade='F'

print(grade)

home=['motorbike', 'car','copter','jet']

if 'bike' not in home:

print('BMW')

<간단한 방법도 있다>

score=100

a='FFFFFFDCBAA'

grade=a[score//10] #점수를 10으로 나눈 몫을 aindex.

print(grade)

 

 

 

2. 윤년, 평년 판단

<v:f eqn="if lineDrawn pixelLineWidth 0"> <v:f eqn="sum @0 1 0"> <v:f eqn="sum 0 0 @1"> <v:f eqn="prod @2 1 2"> <v:f eqn="prod @3 21600 pixelWidth"> <v:f eqn="prod @3 21600 pixelHeight"> <v:f eqn="sum @0 0 1"> <v:f eqn="prod @6 1 2"> <v:f eqn="prod @7 21600 pixelWidth"> <v:f eqn="sum @8 21600 0"> <v:f eqn="prod @7 21600 pixelHeight"> <v:f eqn="sum @10 21600 0"> </v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f> <o:lock aspectratio="t" v:ext="edit"> </o:lock><w:wrap type="square"></w:wrap> 지구가 태양의 둘레를 한 바퀴 도는 데는 3655시간 4846초가 걸린다. 1년을 365일로 하면 4년 후에는 약 1일 정도 차이가 난다. 그래서 4년마다 1년을 366일로 한다. 그런데 366일로 하면 지구가 원래의 위치보다 조금 더 지나게 된다. 그래서 100년에 한 번씩 366일로 하지 않고 365일로 한다. 이렇게 하여도 차이가 있어 400년에 한 번씩은 366일로 하여야 한다.

지금의 달력은 이러하다. 이것을 그레고리력(Gregorian calendar)이라고 한다.

 

<v:f eqn="if lineDrawn pixelLineWidth 0"> <v:f eqn="sum @0 1 0"> <v:f eqn="sum 0 0 @1"> <v:f eqn="prod @2 1 2"> <v:f eqn="prod @3 21600 pixelWidth"> <v:f eqn="prod @3 21600 pixelHeight"> <v:f eqn="sum @0 0 1"> <v:f eqn="prod @6 1 2"> <v:f eqn="prod @7 21600 pixelWidth"> <v:f eqn="sum @8 21600 0"> <v:f eqn="prod @7 21600 pixelHeight"> <v:f eqn="sum @10 21600 0"> </v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f> <o:lock aspectratio="t" v:ext="edit"> </o:lock><w:wrap type="square"></w:wrap> 그레고리력의 윤년, 평년 판단 방법을 정리하면 다음 그림과 같다.

 

평년(common year)1년이 365일이고(2월이 28),

윤년(leap year)1년이 366일이다(2월이 29).

 

 

 

 

 

어떤 연도가 윤년인지 평년인지 판단하여 보자.

방법 1

방법 2

y=2015

if y%4==0: #4의 배수이면 100의 배수 판단

if y%100==0: #100의 배수이면 400의 배수 판단

if y%400==0: #400의 배수이면 윤년

year='leap'

else:

year='common' #400의 배수가 아니면 평년

else:

year='leap' #100의 배수가 아니면 윤년

else: #4의 배수가 아니면 평년

year='common'

print(year)

y=2015

if y%400==0:

year='leap'

elif y%100==0:

year='common'

elif y%4==0:

year='leap'

else:

year='common'

print(year)

*판단을 역순으로 하였다.

*else는 들여쓰기 위치에 따라 if와 대응된다.

방법 3

방법 4

y=2015

if y%100==0:

if y%400==0:

year='leap'

else:

year='common'

elif y%4==0: #100의 배수가 아니면 4의 배수인가 판단

year='leap'

else:

year='common'

print(year)

*가운데 조건인 100의 배수 판단을 먼저 하였다.

y=2015

year=['common','leap']

x=0 if y%4!=0 | (y%100==0 and y%400!=0) else 1

print(year[x])

 

* 평년은 4의 배수가 아니거나, 100의 배수이면서 400의 배수가 아닌 경우이다. 이러한 경우에는 0, 아니면 1x에 할당하는 조건 표현식을 사용하였다. 매우 간단하다.

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

더 간단하게, 참이면 1, 거짓이면 0이 반환되는

논리연산으로도 가능하다.

y=2015

year=['leap','common']

x= y%4!=0 | (y%100==0 and y%400!=0)

print(year[x])

 

 

 

* 위의 4가지 방법을 모두 이해하고 스스로 작성할 수 있으면 ‘if통과이다.

 

<v:f eqn="if lineDrawn pixelLineWidth 0"> <v:f eqn="sum @0 1 0"> <v:f eqn="sum 0 0 @1"> <v:f eqn="prod @2 1 2"> <v:f eqn="prod @3 21600 pixelWidth"> <v:f eqn="prod @3 21600 pixelHeight"> <v:f eqn="sum @0 0 1"> <v:f eqn="prod @6 1 2"> <v:f eqn="prod @7 21600 pixelWidth"> <v:f eqn="sum @8 21600 0"> <v:f eqn="prod @7 21600 pixelHeight"> <v:f eqn="sum @10 21600 0"> </v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f> <o:lock aspectratio="t" v:ext="edit"> </o:lock><w:wrap type="topAndBottom"></w:wrap> 3. 세계 부자 순위

살림이 넉넉하고 재산이 많은 사람을 부자(富者, the rich)라고 한다. 대부분의 사람들은 부자가 되고 싶어 한다. 그렇다면 수입이 얼마가 되면 부자일까?

세계에서 1% 안에 드는 부자가 되려면 일 년에 5000만 원 정도(47500달러)를 벌면 된다고 한다. 3000만원을 벌면 10%, 1억을 벌면 0.59%에 해당된다. 이러한 내용은 global rich list(세계 부자 순위)라는 사이트에 있다.

<v:f eqn="if lineDrawn pixelLineWidth 0"> <v:f eqn="sum @0 1 0"> <v:f eqn="sum 0 0 @1"> <v:f eqn="prod @2 1 2"> <v:f eqn="prod @3 21600 pixelWidth"> <v:f eqn="prod @3 21600 pixelHeight"> <v:f eqn="sum @0 0 1"> <v:f eqn="prod @6 1 2"> <v:f eqn="prod @7 21600 pixelWidth"> <v:f eqn="sum @8 21600 0"> <v:f eqn="prod @7 21600 pixelHeight"> <v:f eqn="sum @10 21600 0"> </v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f> <o:lock aspectratio="t" v:ext="edit"> </o:lock><w:wrap type="topAndBottom"></w:wrap>

 

연간 개인 소득을 입력 받아서 세계인구비율에 따른 소속 집단을 찾아보자.

 

입력

연간 개인 소득이 입력된다.

단위는 달러($)이며 정수이다.

 

출력

소속 집단을 출력한다.

소속 집단은 위의 표와 같이 하위 5, 상위 3개 집단 그리고 소속이 없는 중간 집단이 있다.

중간 집단은 ‘the middle'이며,

400달러 이하는 ‘Bottom 10'이고, 47500달러 이상은 ’Top 1'이다. percent는 출력하지 않는다.

 

입력의 예

100000

 

출력의 예

Top 1

 

 

 

 

 

4. 스스로 확인하기

삼각형의 판별

<v:f eqn="if lineDrawn pixelLineWidth 0"> <v:f eqn="sum @0 1 0"> <v:f eqn="sum 0 0 @1"> <v:f eqn="prod @2 1 2"> <v:f eqn="prod @3 21600 pixelWidth"> <v:f eqn="prod @3 21600 pixelHeight"> <v:f eqn="sum @0 0 1"> <v:f eqn="prod @6 1 2"> <v:f eqn="prod @7 21600 pixelWidth"> <v:f eqn="sum @8 21600 0"> <v:f eqn="prod @7 21600 pixelHeight"> <v:f eqn="sum @10 21600 0"> </v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f> <o:lock aspectratio="t" v:ext="edit"> </o:lock><w:wrap type="square"></w:wrap> 삼각형이란 '한 평면상에 있고, 일직선상에 없는 3개의 점을 2개씩 쌍으로 하여 선분으로 연결했을 때 만들어 지는 도형을 일컫는 말이다. 이러한 삼각형에는 3개의 변과 3개의 내각이 있게 되는데 이것을 삼각형의 6요소라고 하며, 이것에 의하여 모양과 크기가 결정된다.

삼각형은 가장 기본적인 평면도형이므로 평면기하학의 거의 모든 성질을 해명할 때 삼각형의 성질을 사용하게 된다.

문제

삼각형의 주요한 성질은 ‘2변의 길이의 합이 다른 한 변의 길이 보다 크다.’는 것이다. 이 성질을 만족하지 못하면 삼각형이 아니다. 삼각형인 경우, 변의 길이에 따른 삼각형의 종류는 다음과 같다.

정삼각형(regular triangle) : 3변의 길이가 같은 삼각형

이등변삼각형(isosceles triangle): 2변의 길이가 같은 삼각형

부등변삼각형(scalene triangle) : 3변의 길이가 서로 다른 삼각형

3변의 길이를 입력받아 삼각형의 종류를 판별하자.

 

입력

3변의 길이가 같은 줄에 입력된다.

공백(space)으로 구분되어 있으며 실수이다.

 

출력

삼각형이 아니면 no, 정삼각형이면 regular, 이등변삼각형은 isosceles, 부등변삼각형이면 scalene를 출력한다.

 

입력의 예

3.0 4.0 5.0

 

출력의 예

regular

삼각형의 판별 문제해결의 예

세계 부자 순위 문제해결의 예

fin=open('d:/input.txt')

fout=open('d:/output.txt','w')

tri=['no','regular','isosceles','scalene']

a,b,c=fin.readline().split()

a=float(a); b=float(b); c=float(c)

if (a+b)>c and (a+c)>b and (b+c)>a:

if a==b==c: x=1

elif a==b or a==c or b==c: x=2

else: x=3

else: x=0

fout.write(tri[x])

fin.close()

fout.close()

fin=open('d:/input.txt')

fout=open('d:/output.txt','w')

per=['Bottom 10','Bottom 20','Bottom 50', \

'Bottom 75','Bottom 85', 'Top 1', \

'top 5','Top 10','the middle']

income=int(fin.readline())

if income<=400: p=0

elif income<=500: p=1

elif income<=850: p=2

elif income<=1487: p=3

elif income<=2182: p=4

elif income>=47500: p=5

elif income>=33700: p=6

elif income>=25400: p=7

else: p=8

fout.write(per[p])

fin.close()

fout.close()

 

 

출처>코드클럽코리아  www.codeclub.kr

?

 
다음검색
댓글
최신목록