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로 형변환 해야함