6장. if 문과 loop문 (p126)
PYTHON2017. 9. 10. 00:42
■ 6장. if 문과 loop문 (p126)
* 6장 목차
1. if문
2. for loop문
3. while loop문
4. 중첩 loop문
5. continue와 break 사용법
알고리즘 문제들을 파이썬으로 구현 ---> 전날 알고리즘 문제2개 공부
다음날 문제2개 오픈북
문제만 다른것으로 살짝 변경해서 PL/SQL
알고리즘 문제를 해결하는 목적 ---> 파이썬 프로그래밍을 잘하기 위해서 공채시험문제(파이썬)
■ if문 예제 (p126)
if 조건1 :
실행문
elif 조건2 : " 조건이 true 이면 실행이되고 조건이 false이면
실행문 실행이 안된다. "
elif 조건3 :
실행문
else: <----------- 생략가능
실행문
* 조건이 false로 평가 되는 경우 (p 118)
1. False
2. None
3. 숫자 0
4. 비어있는 순서열 : '' , () : 비어있는 튜플 , [] : 비어있는 리스트
5. 비어있는 딕셔너리 : {}
문제111. 숫자를 물어보게하고 숫자를 입력해서 짝수인지 홀수인지를 출력하는 if 문을 이용한 파이썬
코드를 작성하시오!
------------
| if 문 |
------------
a = input('숫자를 입력하세요 ')
if int(a)%2 == 0 :
print ('짝수입니다')
else:
print ('홀수 입니다.')
문제112. 위의 if문의 예제로mod 함수를 구현하시오 !
------------
| if 문 |
------------
print (mod(10))
짝수입니다.
def mod(a):
res =''
if int(a)%2 == 0:
res ='짝수입니다'
else:
res ='홀수 입니다.'
return res
print(mod(10))
문제113. 이름을 물어보게하고 이름을 입력하면 해당 사원이 고소득자인지
저소득자인지 출력되게 하시오 !
월급 >= 3000 고소득자 입니다.
월급 >= 2000 적당합니다.
월급 < 2000 저소득자입니다.
import pandas as pd
emp = pd.DataFrame.from_csv("D:\data\emp.csv")
a= input('이름입력')
empresult = emp[ ['sal'] ][emp['ename'] == a]
empresult = empresult.values[0]
print(empresult)
if int(empresult) >=3000 :
print ('고소득자입니다')
elif int(empresult) >=2000 :
print ('적당합니다.')
elif int(empresult) <2000 :
print ('저소득자입니다.')
문제114. 위의 문제를 다시 수행하는데 이름을 소문자로 입력해도 결과가 출력되게 하시오
import pandas as pd
emp = pd.DataFrame.from_csv("D:\data\emp.csv")
a= input('이름입력')
empresult = emp[ ['sal'] ][emp['ename'] == a.upper()]
empresult = empresult.values[0]
print(empresult)
if int(empresult) >=3000 :
print ('고소득자입니다')
elif int(empresult) >=2000 :
print ('적당합니다.')
elif int(empresult) <2000 :
print ('저소득자입니다.')
문제115. (알고리즘 문제 ) 가우스 공식으로 1부터 10까지의 숫자의 합을 출력하시오 !
------------
| if 문 |
------------
첫번째 수를 입력하시요 ~ 1
마지막 수를 입력하시오 ~ 10
1부터 10의 합은 55입니다.
a = input('첫번째 수를 입력하세요 ! ')
b = input('마지막 수를 입력하세요 ! ')
res ('%a 부터 %b 까지 합은 ',%a , %b)
a = int(input('첫번째 수를 입력하세요 ! '))
b = int(input('마지막 수를 입력하세요 ! '))
if a < b
res = (b*(b+1)/2) - (a*(a+1)/2)
res= (a+ b) / 2 *(b- a -1)
print(int(a),' 부터 ',int(b),'까지 합은 ',int(res))
else :
print ('
첫번재 입력한 숫자가
두번째 입력한 숫자보다 큽니다
')
문제116. 위ㅡ이 문제를 다시 수행하는데 아래와 같이 큰 숫자를 먼저입력하면 첫번재 입력한 숫자가
두번째 입력한 숫자보다 큽니다 라는 메세지가 출력되겧 사ㅗㅇ
a = input('첫번째 수를 입력하세요 ! ')
b = input('마지막 수를 입력하세요 ! ')
res ('%a 부터 %b 까지 합은 ',%a , %b)
a = int(input('첫번째 수를 입력하세요 ! '))
b = int(input('마지막 수를 입력하세요 ! '))
if a < b:
res = (b*(b+1)/2) - (a*(a+1)/2)
res= (a+ b) / 2 *(b- a -1)
print(int(a),' 부터 ',int(b),'까지 합은 ',int(res))
else :
print ('첫번재 입력한 숫자가 두번째 입력한 숫자보다 큽니다')
■ 6.2 for loop 문
문법 : for 반복변수 in 순서열:
↑
실행문 리스트, 튜플, 문자열
예제:
for i in (1,2,3) # 리스트
print (i)
for i in ['a','b','c']
print(i)
for i in 'I am a boy':
print(i)
for i in range(0,5):
print(i)
for i in range(5):
print(i)
for i in range(1,10,2):
print(i)
문제117. 구구단 2단을 출력하시오!
2 x 1 = 2
for i in range(2,10):
for j in range(1,10):
print(i 'x',i,' = ',i*j)
문제118., 별표 출력 !
for i in range(1,12):
res=''
for j in range(1,i):
res+='★'
print(res)
for i in range(1,11):
print('★'*i)
문제119. 별표 출력 반대로!!
for i in range(10,0,-1):
print('★'*i)
문제120. 아래와 같이 출력하시오 !
for j in range(5):
print(('w'*j).rjust(10))
for i in range(5,0,-1):
print(('★'*i).rjust(10))
for i in range(5)
print ((' '*i),('★'*5-i))
for i in range(5,0,-1):
print ((' '*i),('★'*5-i))
for i in range(10,0,-1):
if i>=5:
a=(' '*i)
b=('★'*(10-i))
print(a+b)
elif i<5:
c=(' '*(10-i))
d=('★'*(i))
print(c+d)
문제121. 중첩 for loop 문을 이용해서 ★ 로 사각형을 만드시오 !
가로의 숫자를 입력하시오 5
세로의 숫자를 입력하세요 5
★ ★ ★ ★ ★
★ ★ ★ ★ ★
★ ★ ★ ★ ★
★ ★ ★ ★ ★
★ ★ ★ ★ ★
a = int(input('세로숫자를 입력하세요 '))
b = int(input('가로숫자를 입력하세요 '))
-- for loop 중첩 안 했을 때
for i in range(a):
print ('★'*b)
-- for loop 중첩 했을 때
for i in range(a):
res = ''
for j in range(b):
res += '★'
print(res)
문제122. 구구단을 가로로 출력하시오 ~
for i in range(1,10):
res = ''
for j in range(2,10):
res += (str(j)+' x '+str(i)+' = '+str(i*j)+ ' ').ljust(13)
print(res)
문제123. for loop 문을 이용해서 power함수를 구현하시오
밑수를 입력하세요 ~ 2
지수를 입력하세요 ~ 3
2의 3승은 8 입니다.
a = int(input('밑수를 입력하세요 '))
b = int(input('지수를 입력하세요 '))
res =1
for i in range(b):
res *= a
print (a,'의 ',b,'승은 ',res,'입니다')
설명:
1. ('★' for i in ragne(5)) # for loop 문을 5번 돌려서 ★★★★★
2. join : ★5개를 모아주는 메소드
3. ''. : result 변수를 '' (None)으로 하겠다.
■ 숫자, 문자, 공백이 스크립트안에 얼마나 포함되었는지 확인하는 방법
s = 'some stirng'
numbers = sum(c.isdigit() for i in s)
words = sum(c.isalpha() for i in s)
space = sum(c.isspace() for i in s)
문제124. 겨울왕국 대본에는 숫자가 몇개나 있는가?
numbers =0
text_file = open("d:\data\winter.txt",'r')
lines = text_file.readlines()
total = 0
for i in lines :
numbers += sum(c.isdigit() for c in i )
문제125. 공백도 아니고 문자도 아니고 숫자도 아닌 문자가 (특수문자)
몇개 나 있는지 확인하시오
text_file = open("d:\data\winter.txt",'r')
lines = text_file.readlines()
numbers =0
total = 0
alpha = 0
spaces =0
for i in lines :
total += len(i)
numbers += sum(c.isdigit() for c in i )
alpha += sum(c.isalpha() for c in i )
spaces += sum(c.isspace() for c in i )
print(total-numbers-alpha-spaces)
■while loop
문법 : while 조건 :
실행문
예제 :
print ('몇번 반복할까요 : ? ')
limit = int(input('반복할 횟수를 입력하세요'))
count = 0
while count < limit:
count += 1
print('{12} 회 반복.'.format(count) )
문제126. 숫자를 물어보게하고 숫자를 입력하면 해당 숫자만큼
아래와 같은 그림이 그려지게 하시오!
숫자를 입력하세요 6
c=0
a = int(input('숫자를 입력하세요 '))
while c < a :
c+=1
quf =('★'*c).rjust(10)
print(quf)
문제127. 팩토리얼 while loop 문으로 구현하시오 !
팩토리얼 숫자를 입력하세요 ! 5
120 입니다.
5*4*3*2*1
문제128. log함수를 파이썬으로 구현하시오 ! (while loop문으로 )
( 알고리즘 문제 6번)
c= 0
a = int(input('밑수를 입력하세요 '))
b = int(input('지수를 입력하세요 '))
if a%b == 0 :
while a < b :
c+=1
a = c * a
-- 정수자리 찾기! 완료
다우니 향!~
노말 퍼퓸
문제129. (공채에서 가장 많이 나온느 알고리즘 문제)
두수를 입력 받아서 최대공약수를 구하시오 !
while loop 문 + 유클리드 호제법
첫번째 수를 입력하세요 ~ 24
두번재 수를 입력하세요 ~ 18
6 입니다.
while a%b != 0 :
if b > a :
(a, b) = (b, a) # swap !!!!
c = a%b
a = b
b = c
print (str(c)+'입니다')
-- 정수자리 찾기! 완료
문제130. (마지막 문제) 최대 공약수를 알굇픙ㄴ 2개 숫자를 입력하세요
a = input('최대공약수를 알고 싶은 2개의 숫자를 입력하세요 ')
li = []
li = a.split(' ')
a = int( li[0] )
b = int( li[1] )
while a%b != 0 :
if b > a :
(a, b) = (b, a) # swap !!!!
c = a%b
a = b
b = c
print (c)
■ 6장. if 문과 loop문
- for loop
-알고리즘
1.금방생각해도 구현할 수 있는 문제
2.오래 생각해야 구현할 수 있는 문제
( 버블정렬, 최단거리, 탐욕 알고리즘 )
↑
mit 공대 코드
mit 공대 머신러닝 코드를 이해하기 위한 문법?
1.format 함수
2.for loop
3.함수 생성하는 방법
4.자료형 - 리스트, 튜플, 딕셔너리
5.if 문
6.몬테칼르로 알고리즘 -- 혜승이 원주율 구하는 코드
파이썬으로 구현 !
7.탐욕 알고리즘
8.수학공식
self.values[self.prevstate] += self.alpha * (nextval - self.prevscore)
- while loop
■ 6장. if 문과 loop문 (p126)
- 6장 목차
- if문
- for loop문
- while loop문
- 중첩 loop문
■ 6.4. continue 문(p137)
"반복문이 실행되는 동안 특정 코드블럭은 실행하지 않고
다른 코드 블럭만 실행되게 할때 사용하는 문법 "
예제 설명:
for i in range(10) :
if i $ 2 == 1:
continue # 홀수는 컨티뉴 제껴라!
print (i)
문제131. 숫자를 1부터 10까지 출력하는데 중간에 5는 나오지 않게 !
for i in range(10):
if i == 5 :
continue
print (i)
■ break 문
"루프를 중단시키는 역할을 하는 문법"
예제 :
i = 0
while (True) : # 무한 루프 돌리겟따
i += 1
if i == 1000:
print('i가 {0}이 됨. 반복문을 중단함',format(i))
break
print(i)
문제132. 함수를 생성하는데 아래와 같이 숫자를 넣어서 실행하면
해당 숫자만큼 숫자가 세로로 출력되게 하시오 ~
print( break_fun(10) ) # 10 이 loop문을 중단시킬 숫자
1
2
3
4
5
6
7
8
9
10
none
문제133. 위의 함수를 수정해서 결과가 아래와 같이 가로로 출력되게 하시오
def break_fun(val):
res =''
num =1
while 1:
res += str(num) + ' '
if num == val:
break
num += 1
print(res)
print(break_fun(10))
■6장에서 배운 내용 if 문과 loop[문을 정리하는 문제
- pandas 를 이용해서 1.판다스 기본 문법
- pandas를 이용하지 않고 조인
- 1. for loop문을 중첩해서 문제를 해결
- 2. 딕셔너리 데이터 타입을 이해 (mit 코드에서도 중요하게 쓰인다.)
문제134. 아래와 같이 딕셔너리 형태의 데이터를 만들고 출력하시오 !
- 파이썬 데티ㅓ 구조 3가지 1.리스트 2.튜플 3.딕셔너리(키와 값으로 구성)
emp_dic = {'mgr':'7788','sal':'1100','deptno':'20','comm':'0','job',:'CLERK','hiredate':'1983-01-15','empno':7876','ename':'ADAMS'}
emp_dic
emp_dic['mgr']
문제135. 6장에서 배운 for loop 를 이용해서 emp2.csv를 읽어와서 emp_dict라는 딕셔너리 데이터 유형ㅇ르 만드시오
import csv
emp_file = open("D:\data\emp.csv",'r')
emp_csv = csv.reader(file)
emp = [] # 비어있는 리스트 하나 선언
for i in emp_csv :
emp.append({'empno':i[0],'ename':i[1],'job',i[2],'mgr':i[3],'hiredate':i[4],'sal':i[5],'comm':i[6],'deptno':i[7]})
print(emp)
문제136.emp 딕셔너리 변수에서 이름만 출력하시오
그동안에는 emp_list변수에서 ename 에 해당하는 부분ㅇ르 출력해왓다면
---> emp_list[1]
지금은 emp_dic 변수에서 ename 에 해당하는 부분을 출력하는 것이다ㅣ
---> emp_dic[키]
문제137. 이름과 월급과 직업을 출력하시오 !
for emp_dic in emp:
print(emp_dic['ename'].ljust(10),emp_dic['sal'].ljust(10),emp_dic['job'].ljust(10))
문제138. dept.csv 를 읽어서 딕셔너리 데이터 구조로 저장하고 아래와 같이
수행하면 deptno, dname, loc가 출력되게 하시오
import csv
dept_file = open("D:\data\dept.csv",'r')
dept_csv = csv.reader(file)
dept= [] # 비어있는 리스트 하나 선언
for i in emp_csv :
emp.append({'deptno':i[0],'dname':i[1],'loc',i[2]})
문제139. emp.csv 와 dept.csv 를 각각 읽어와서 emp_dic, dept_dic
딕셔너리 자료형으로 만드는 스크립트를 하나로 합치시오
import csv
dept_file = open("D:\data\dept.csv",'r')
emp_file = open("D:\data\emp.csv",'r')
dept_csv = csv.reader(dept_file )
emp_csv = csv.reader(emp_file)
dept= []
emp = []
for i in dept_csv :
dept.append({'deptno':i[0],'dname':i[1],'loc':i[2]})
for i in emp_csv :
emp.append({'empno':i[0],'ename':i[1],'job',i[2],'mgr':i[3],'hiredate':i[4],
'sal':i[5],'comm':i[6],'deptno':i[7]})
문제140. emp와 dept라는 딕셔너리 자료구조를 만드는 스크립트와 중첩 for loop문을 이용해서
emp와 dept를 조인 시켜서 ename 과 loc를 출력하시오
" nested loop 조인 방법 "
for e in emp:
for d in dept:
if e['deptno'] == d['deptno']:
print( e['ename'],d['loc'])
문제141. 부서위치가 DALLAS 인 사원들의 이름과 부서위치를 출력하시오 !
for e in emp:
for d in dept:
if (e['deptno'] == d['deptno']) & (d['loc'] == 'DALLAS'):
print( e['ename'].ljust(7),d['loc'])
for e in emp:
for d in dept:
if (e['deptno'] == d['deptno']) and (d['loc'] == 'DALLAS'):
print( e['ename'].ljust(7),d['loc'])
문제142. 위의 스크립트를 이용해서 조인 함수를 생성하시오 !
print (join( emp, 'ename',dept,'loc','deptno'))
def join(t1,col1,t2,col2,jn):
for e in t1 :
for d in t2 :
if e[jn] == d[jn]:
print( e[col1 ].ljust(7),d[col2])
join( emp, 'ename',dept,'loc','deptno')
문제143. Pandas를 이용해서 ename 과 loc 를 출력하시오
import pandas as pd
emp= pd.read_csv("D:\data\emp.csv")
dept= pd.read_csv("D:\data\dept.csv")
result = pd.merge(emp,dept,on='deptno')
print (result[['ename','loc']])
문제144. 부서위치가 dallas인 사원들의 이름과 부서위치를 출력하시오pandas사용
import pandas as pd
emp= pd.read_csv("D:\data\emp.csv")
dept= pd.read_csv("D:\data\dept.csv")
result = pd.merge(emp,dept,on='deptno')
print (result[['ename','loc']][result['loc']=='DALLAS'])
문제145. 이름과 부서위치를 출력하는데 아래와 같이 Outer join을 구현하시오
select e.ename, d.loc
from emp e , dept d
where e.deptno = d.deptno(+);
import pandas as pd
emp= pd.read_csv("D:\data\emp.csv")
dept= pd.read_csv("D:\data\dept.csv")
result = pd.merge(emp,dept,on='deptno',how='right')
print (result[['ename','loc']][result['loc']=='DALLAS'])
'PYTHON' 카테고리의 다른 글
gcp를 이용해서 jupyter notebook / jupyter lab 서버 만들기 (0) | 2018.08.27 |
---|---|
9장. 객체와 클래스 (가장 중요한 단원) (0) | 2017.09.10 |
8장. 모듈 (0) | 2017.09.10 |
7장. 함수 (0) | 2017.09.10 |
1-5장 (0) | 2017.09.10 |