Quiet Time



■ 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장 목차
  1. if문
  2. for loop문
  3. while loop문
  4. 중첩 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