Computer timer
1
2
import time
print (time.perf_counter())
4.4624788088037566e-07
1
2
3
4
import time
print (time.perf_counter())
print(time.sleep(1)) # wait 1 second
print(time.perf_counter())
32.67407215024988 None 33.67460184648448
1
2
3
4
import time
n = time.perf_counter()
time.sleep(2.5)
print (time.perf_counter() - n)
2.500652191277908
- 현재 시간을 측정하고 기록해뒀다가 다음 측정한 시간값에서 빼주면 그 프로그램이 수행되는데 걸린 시간을 측정할 수 이씀!
왜 정확히 2.5가 아니징? 컴퓨터는 1000분의 1초 밖에 평가를 못함 0.1초 ( == 100ms) 눈깜빡하면 컴퓨터에게는 오랜 시간 10000분의 1정도의 오차는 사람이 인지할 수 없음
1
2
3
4
5
6
7
8
def f(n): # 피보나치 수열 계산
if n<= 2:
return 1
else:
return f(n-1) + f(n-2)
n = time.perf_counter()
print(f(20))
print (time.perf_counter() - n)
6765 0.003338380396883167
1
2
3
4
5
6
7
8
def f(n): # 피보나치 수열 계산
if n<= 2:
return 1
else:
return f(n-1) + f(n-2)
n = time.perf_counter()
print(f(30))
print (time.perf_counter() - n)
832040 0.3754957256146554
20에서 30으로 늘렸을 뿐인데 시간 차이가 많이남!
Random number
Random method returns unpredictable value
1
2
import random
random.randint(1,3)
아무리 작아도 1 아무리 커도 3인 숫자들 중에서 임의의 값을 보여줌 (규칙 없음)
근데 정말 랜덤일까? 정말 규칙이 없을까? 사람이 랜덤한 숫자를 1000개 생각하면 100개정도는 규칙을 가짐 점점 더 커진다거나.. 규칙이 없도록 강제하면 그 안에서 반드시 규칙이 있는 작은 부분이 생김
randint로 0~백만을 두개 만들어서 x,y쌍을 만들어서 표를 찍어서 그 점들이 반원 안에 들어가면 빨간색, 바깥에면 파란색으로 하고 확인해보면 아래같은 그래프가 나옴! 사분면 안의 전체 점의 갯수가 백만개일때, 빨간 점은 몇개일까? 1/4 파이알제곱 * 백만 점의 갯수가 많으면 많을수록 파이에 가까워짐
input
1
2
n = 3
print(n)
3
1
2
3
n = input("Enter n: ")
print(n)
print(type(n))
Enter n: 3 3
<class ‘str’>
type은 str
게임을 만들쟈
1) 타자치기
1
2
3
4
5
6
7
8
import time
x = time.perf_counter()
ans = input("Enter the number 32767:")
d = time.perf_counter() - x
if d < 7 and ans=="32767":
print("Correct. It took", d, "seconds")
else:
print("Wrong. But you entered", ans, "in", d, "seconds")
Enter the number 32767:32767 Correct. It took 2.4185358874777023 seconds
원래 이래야하지만 7초 이후에 7을 입력하면
Enter the number 32767:32767 Wrong. But you entered 32767 in 10.653603206201772 seconds
숫자를 계속 같은것만 쳐야해서 재미가 없음 -> random 쓰면 됨 점수도 안알랴줌… -> score 변수 추가
반복하고 점수를 알려주쟈
1
2
3
4
5
6
7
8
9
10
11
12
13
import time
score = 0
for i in range(3):
x = time.perf_counter()
ans = input("Enter the number 32767:")
d = time.perf_counter() - x
if d < 7 and ans=="32767":
score += 10
print("Correct! You took ", d, "seconds!")
else:
print("Wrong")
print("Your score: ",score)
Enter the number 32767:33333 Wrong Enter the number 32767:32767 Correct! You took 2.013103176526272 seconds! Enter the number 32767:45454 Wrong Your score: 10
2) 구구단
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import time
import random
score = 0
for i in range(3):
x = time.perf_counter()
m = random.randint(2,9)
n = random.randint(2,9)
ans = input(str(m) + "*"+ str(n) + "=")
d = time.perf_counter() - x
if d < 7 and ans==str(m*n):
score += 10
print("Correct! You took ", d, "seconds!")
else:
print("Wrong")
print("Your score: ",score)
99=81 Correct! You took 2.556958410143693 seconds! 24=8 Correct! You took 1.8257375250288987 seconds! 2*3=6 Correct! You took 1.245385908473736 seconds! Your score: 30
input은 str type이기 때문에 m과 n을 str로 형변환 해야함