ㅁ어제까지 배운 내용
1. 아나콘다 설치( 파이썬 + 파이썬을 가지고 프로그래밍할 때 필요한 중요 패키지들)
주로 이용할 파이썬 툴 => 주피터 노트북
2. 파이썬의 자료형 5가지 : 문자형, 숫자형, 리스트형, 튜플형, 사전형
3. 파이썬에서의 들여쓰기 중요성
# 동전을 10번 던졌을 때 앞면이 몇 번 나오고 뒷면이 몇 번 나오는지 출력하는 코드
import random
coin = ['앞면','뒷면']
cnt = 0
cnt2 = 0
for i in range(10) :
a = random.choice(coin)
if a == '앞면':
cnt = cnt +1
elif a == '뒷면' :
cnt2 = cnt2+1
print ('10번중에 앞면이',cnt,'번 나왔습니다')
print ('10번중에 뒷면이',cnt2,'번 나왔습니다')
문제25. 주사위를 20번 던져서 짝수의 눈이 몇 번 나왔는지 홀수의 눈이 몇 번 나왔는지 출력하시오
import random
dice = [1,2,3,4,5,6]
cnt = 0
cnt2 = 0
for i in range(20) :
a = random.choice(dice)
if a % 2 == 0:
cnt = cnt +1
elif a % 2 == 1:
cnt2 = cnt2+1
print ('20번중에 짝수의 눈이',cnt,'번나왔습니다')
print ('20번중에 홀수의 눈이',cnt2,'번나왔습니다')
011 for문 개념 배우기 ① (for)
특정 코드를 반복적으로 수행하기 위해서는 반복문을 사용해야 하는데 파이썬에서는 for문이 반복문을 수행하기 위해 가장 많이 사용되는 문법.
for 변수 in 범위*:
실행문(반복적으로 실행할 코드)
1. 리스트 범위인 경우 : 리스트의 요소의 갯수만큼 반복문이 실행됨.
for i in [1,2,3]:
print(i)
2. 튜플 범위인 경우
for i in (1,2,3):
print('나는 파이썬 예제를 끝까지 공부했습니다.')
3. range()범위인 경우
print(range(11))
print(list(range(11)))
0부터 11미만까지의 숫자가 리스트 변수로 구성되었음.
for i in list(range(11)):
print(i)
for i in range(11):
print(i)
for문의 범위로 range를 사용할 때 list()함수를 사용해도 되고 사용하지 않아도 동일한 결과가 출력됨.
for i in range(1,11): #1부터 11미만까지 출력
print(i)
for i in range(1,11,2): #1부터 11미만까지 2칸씩 건너뛰면서 출력
print(i)
for i in range(10,1,-1): #10부터 1씩 차감해서 2까지 출력
print(i)
4. 사전형 범위인 경우
m = {'i':'나는', 'am':'입니다.','boy':'소년'}
for i in m: #키값이 출력됨
print(i)
m = {'i':'나는', 'am':'입니다.','boy':'소년'}
m.items() # m 사전형 안의 요소들이 출력
for i in m.items(): # m사전형 안의 요소들을 튜플형으로 출력
print(i)
for i in m.items(): # m사전형 안의 요소들 중에서 키만 가져옴
print(i[0])
for i in m.items(): # m사전형 안의 요소들 중에서 값만 가져옴
print(i[1])
5. 문자형 범위인 경우 : 문장에서 철자를 하나씩 출력
for i in 'i am a boy':
print(i)
문제26. 주사위 2개를 동시에 던져서 둘 다 주사위의 눈이 6이 나오는 확률을 출력하시오(10만번 던지시오)
dice1 = [1,2,3,4,5,6]
dice2 = [1,2,3,4,5,6]
cnt = 0
import random
for i in range(100000):
if random.choice(dice1) == 6 and random.choice(dice2) == 6:
cnt = cnt + 1
print(cnt / 100000 * 100,'%')
문제27. 주사위와 동전을 동시에 던져서 주사위의 눈은 5가 나오고 동전은 앞면이 나오는 확률을 구하시오. (10만번 던지세요)
dice = [1,2,3,4,5,6]
coin = ['앞면','뒷면']
cnt = 0
import random
for i in range(100000):
a = random.choice(dice)
b = random.choice(coin)
if a == 5 and b == '앞면':
cnt = cnt + 1
print(cnt/100000)
문제28. 아래의 상자에 빨간색 구슬 3개와 파란색 구슬2개가 있다. 이 중에 하나를 뽑았을 때 그 구슬이 빨간색일 확률은 어떻게 되는가?
import random
pocket = ['빨','빨','빨','파','파']
cnt = 0
for i in range(100000):
a = random.choice(pocket)
if a == '빨':
cnt = cnt + 1
print(cnt/100000)
문제29. 아래의 주머니에 빨간구슬 3개와 파란구슬 2개가 들어있는데, 이 중에 2개를 random으로 뽑으시오.
import random
box = ['red','red','red','blue','blue']
print( random.sample(box,2) ) # sample로 출력시 리스트 형태로 나옴
위의 random모듈의 sample 함수의 추출방법은 비복원 추출. 즉, 주머니에서 2개의 공을 뽑았을 때 1개씩 뽑아서 2개를 뽑는다고 하면 1개를 뽑고 뽑은 공은 다시 주머니에 넣지 않고 남은 공 중에서 1개를 더 뽑는것.
random.sample을 이용하면 비복원 추출만 해야하므로 복원 추출을 할 수 없음.
따라서, 복원 추출과 비복원 추출을 자유롭게 할 수 있는 모듈이 있음 => numpy 모듈
import numpy as np
box = ['red','red','red','blue','blue']
result = np.random.choice(box,2,replace = True)
print(result)
# replace = True : 복원추출, replace = False : 비복원추출
문제30. 위에서 추출한 2개의 공이 둘 다 빨간공일 확률은 어떻게 되는가?(비복원 추출, 10만번 반복하세요)
# numpy모듈
import numpy as np
box = ['red','red','red','blue','blue']
cnt = 0
for i in range(100000):
result = np.random.choice(box,2,replace = False) #2개를 비복원 추출해서 result에 담는데
result2 = list(result) # result가 numpy array여서 list함수로 list로 변환 > result2에 담음
#print(result2.count('red') ) #result2리스트에 count라는 메소드를 이용해서
#result2 리스트에 red가 몇 개 있는지 출력
if result2.count('red') == 2:
cnt = cnt + 1
print(cnt / 100000)
# random모듈
import random
box = ['red','red','red','blue','blue']
cnt = 0
for i in range(100000):
result = random.sample(box,2)
if result[1] == 'red' and result[0] == 'red':
cnt = cnt + 1
print(cnt/100000)
#random모듈 count를 쓴 코드
import random
box = ['red','red','red','blue','blue']
cnt = 0
for i in range(100000):
result = random.sample(box,2)
if result.count('red') == 2:
cnt = cnt + 1
print(cnt/100000)
문제31. (점심시간 문제) 통계학 개론에 나오는 문제를 파이썬으로 구현하세요.
6개의 제품이 들어있는 상자가 있는데, 그 중에 2개가 불량품이라고 가정하자. 제품검사를 위해서 3개를 추출했을 때 그 중에 1개가 불량품이 발견될 확률은 ? (복원추출, 10만번 반복하시오)
import numpy as np
box = ['pass','pass','pass','pass','nonpass','nonpass']
cnt = 0
for i in range(100000):
result = np.random.choice(box,3,replace = True)
result2 = list(result)
if result2.count('nonpass') == 1:
cnt = cnt + 1
print(cnt / 100000)
점심시간 문제. (SQL문제) 2^100의 자릿수의 합은?
select sum(substr(power(2,100),level,1))
from dual
connect by level <= length(power(2,100)) ;
012 for문 개념 배우기 ② (for~continue~break)
for 반복문 내에서 continue를 만나면 그 다음 반복 실행으로 넘어갑니다. 그렇지 않고 break를 만나면 for 반복문을 완전히 벗어나게 됩니다.
for문을 이용해서 반복문을 수행하다가 어떤 조건에 따라 반복문을 계속 수행하고, 아니면 반복문을 벗어나야하는 경우가 있습니다.
for 변수 in 범위:
if 조건:
continue # 이 부분은 그냥 지나치고 다음 반복문을 수행해라~~
# 숫자를 1부터 10까지 출력하시오
for i in range(1,11):
print(i)
# 위의 결과에서 숫자 5만 출력하지 않고 나머지 숫자만 출력하시오.
for i in range(1,11):
if i == 5:
continue #이 부분을 그냥 지나치고 아무것도 하지 마라(이 코드 내에서)
print(i)
if와 print가 동등한 레벨에 있으므로 if를 수행하고 나서 print를 수행하는 이 작업을 10번 반복할 것인데 if문을 수행할 때 i가 5이면 아무것도 하지 않겠다.
문제32. 1부터 10까지 출력하는 for문을 수행하는데 continue를 써서 짝수만 출력되게 하시오
for i in range(1,11):
if i % 2 == 1:
continue
print(i)
ㅇfor문에서 사용하는 break문 : 루프문을 중단 시키는 역할
for i in range(1,11):
print(i)
if i == 3:
break
문제33. 1번부터 100번까지 출력하는 for loop문을 작성하시오
for i in range(1,101):
print(i)
문제34. 위의 코드에서 input함수와 break를 이용해서 숫자를 물어보게 하고 숫자를 입력하면 해당 숫자까지만 숫자가 출력되게 하시오.
n = int(input('숫자를 입력하세요~')) # 변수n에 숫자를 입력받고
for i in range(1,101): # i를 1부터 100까지 출력하는데
print(i)
if i == n: # 만약에 i가 n의 변수값이라면
break # 멈춰라
문제35. 16을 8로 나눈 나머지 값을 출력하고 24를 8로 나눈 나머지 값을 각각 출력하시오
print(16 % 8)
print(24 % 8)
문제36. 숫자를 1번부터 24번까지 출력하시오
for i in range(1,25):
print(i)
문제37. 아래와 같이 2개의 숫자를 각각 물어보게하고 두번째로 입력된 숫자만큼 1번부터 출력되게 하시오.
a = int(input('첫번째 숫자를 입력하세요~'))
b = int(input('두번째 숫자를 입력하세요~'))
for i in range(1,b+1):
print(i)
문제38. 위의 문제를 다시 수행하는데 이번에는 반대로 24부터 1번까지 출력되게 하시오
a = int(input('첫번째 숫자를 입력하세요~'))
b = int(input('두번째 숫자를 입력하세요~'))
for i in range(b,0,-1):
print(i)
문제39. (필수 알고리즘1) 두 개의 숫자를 물어보게하고 두 개의 숫자의 최대 공약수를 출력하시오
a = int(input('첫번째 숫자를 입력하세요~'))
b = int(input('두번째 숫자를 입력하세요~'))
for i in range(b,0,-1):
if a % i == 0 and b % i == 0:
break
print('최대공약수는 ',i,'입니다.')
013 for문 개념 배우기 ③ (for~else)
for반복문을 완전히 수행했을 때만 실행하는 부분을 정의하려면
for ~ else문을 사용해야합니다.
for ~ else에서 else뒤에 실행되는 코드는 for반복문을 성공적으로 수행해야지만 실행됩니다.
for i in range(1,11):
print(i)
else:
print('성공적으로 수행되었습니다')
만약 for 반복문에 break문이 있어서 중간에 멈췄다면 else다음의 문장은 수행되지 않음.
문제40. 숫자를 물어보게 하고 해당 숫자만큼 1번부터 출력되게 하시오
a = int(input('숫자를 입력하세요~'))
for i in range(1,a+1):
print(i)
문제41. 위의 코드를 수정해서 중단할 숫자를 물어보게 하고 중단할 숫자까지만 출력되게 하시오
숫자를 입력하세요~ 10
중단할 숫자를 입력하세요~ 6
a = int(input('숫자를 입력하세요~'))
b = int(input('중단할 숫자를 입력하세요~'))
for i in range(1,a+1):
print(i)
if i == b:
break
문제42. 위의 코드에 else를 사용해서 for문이 성공적으로 다 수행되었으면 '성공적으로 결과가 출력되었습니다'라고 메시지가 출력되게 하고 그렇지 않고 break에서 멈췄으면 메시지가 안나오게 하시오
a = int(input('숫자를 입력하세요~'))
b = int(input('중단할 숫자를 입력하세요~'))
for i in range(1,a+1):
print(i)
if i == b:
break
else:
print('성공적으로 결과가 출력되었습니다.')
013-2 이중 for loop문
반복문 자체를 반복시키고 싶을 때 중첩 for loop문을 사용합니다.
for 인덱스변수 in 범위:
for 인덱스변수 in 범위:
실행문
# 구구단 2단을 출력하세요!
for i in range(1,10):
print('2 x',i,'=',2*i)
# 구구단 2단부터 9단까지 출력하시오
for num in range(2,10): #2부터 9까지 num을 반복
for i in range(1,10): #1부터 9까지 i를 반복
print( num, 'x', i, '=', num*i)
# num=2일때 i를 1~9까지 반복실행, num=3일때 i를 1~9까지 반복실행 ~ ...
문제43. 동전을 100번 던져서 앞면이 나올 확률을 출력하시오
import random
coin = ['앞면','뒷면']
cnt = 0
for i in range(100):
a = random.choice(coin)
if a == '앞면':
cnt = cnt + 1
print (cnt / 100)
문제44. 위의 작업을 10번 반복해서 10개의 확률을 출력하시오
import random
coin = ['앞면','뒷면']
for k in range(10):
cnt = 0
for i in range(100):
a = random.choice(coin)
if a == '앞면':
cnt = cnt + 1
print (cnt / 100)
문제45. 주사위를 2개 동시에 1000번 던져서 주사위 눈의 합이 10이 되는 확률을 구하시오
import random
dice1 = [1,2,3,4,5,6]
dice2 = [1,2,3,4,5,6]
cnt = 0
for i in range(1000):
a = random.choice(dice1)
b = random.choice(dice2)
if a + b == 10:
cnt = cnt + 1
print(cnt / 1000)
문제46. 위의 확률 구하는 작업을 10번 수행하시오
import random
dice1 = [1,2,3,4,5,6]
dice2 = [1,2,3,4,5,6]
for k in range(10):
cnt = 0
for i in range(1000):
a = random.choice(dice1)
b = random.choice(dice2)
if a + b == 10:
cnt = cnt + 1
print(cnt / 1000)
문제47. 2의 100승을 출력하시오
print(2**100) # 파이썬에서 제곱을 나타내는 연산자 : **
문제48, 위에서 출력된 결과를 문자로 출력되게 하시오
str(2**100) # 양쪽에 작은따옴표를 붙여서 출려됨. 이것은 문자라는 뜻
문제49. 위의 결과를 for loop문의 범위로 지정해서 위의 숫자들을 하나씩 출력하시오
for i in str(2**100):
print(i)
문제50. 위에서 출력된 값들을 모두 더하시오
cnt = 0
for i in str(2**100):
cnt = cnt + int(i)
print(cnt)
문제51. 0에서 1사이의 난수를 출력하시오
import random
print(random.uniform(0,1))
문제52. 위의 0 ~ 1사이의 난수를 2개를 생성하시오
import random
a = random.uniform(0,1)
b = random.uniform(0,1)
print(a)
print(b)
문제53. (오늘의 마지막 문제) (필수 알고리즘2) 원주율을 몬테카를로 알고리즘으로 알아내시오
import random
cnt = 0
for i in range(100000):
a = random.uniform(0,1)
b = random.uniform(0,1)
if a**2 + b**2 <= 1:
cnt = cnt + 1
print(cnt*4/100000)
'Study > class note' 카테고리의 다른 글
sql / log함수 (0) | 2021.12.10 |
---|---|
python / while문 (0) | 2021.12.09 |
python / 주석, 자료형 개념, print, for문 개념 (0) | 2021.12.07 |
python / 설치 (0) | 2021.12.06 |
sql / TCL (0) | 2021.12.06 |