신년 연휴 이후 3일만에 3일차 강의가 진행되었습니다.
몇일 안했다고 연습했던 코랩 단축키도 가물가물 했는데 오늘도 연습했으니 내일은 더 좋아지겠죠?
아무생각 없이 2일차 작성했는데 블로그에 마크다운 언어로 작성할 수 있는 기능이?
오른쪽 목차기능도 활용 가능하니 마크다운으로 쓰는 연습도 함께 할 수 있게됐습니다.^^


이전 시간 복습

강의 시작 후 간단하게 input/output 복습을 진행했다. 대부분 간단하게 할 수 있었다.
배웠는지 안배웠는지 조차 헷갈리는게 하나 있었다.
두 단어를 입력받고, 공백을 기준으로 분리해서 각 변수에 할당하고 출력하는 문제

sentence_4 = input("2024년에는 ___ 달에 ___ 권의 책을 읽는다: ")  
sentence_4_1, sentence_4_2 = sentence_4.split()

print(f"2024년에는 {sentence_4_1} 달에 {sentence_4_2} 권의 책을 읽는다.")  

그외에는 end를 사용한 문장 합치기

# end를 사용해서 다른 두 문장을 합치기
print(f"올해는 {word1}와", end = " ")
print(f"{word2}에 집중하려고 한다.")

Random

파이썬에서 난수를 생성하기 위해 사용

1. 난수생성

  • randint(a, b) : a 와 b 상이의 무작위 정수 생성 (b도 포함)
  • randrange(start, stop[, step]) : 지정된 범위에서 무작위 정수 반환
    start ~ stop -1 까지가 범위이고, step을 지정할 수 있다.
  • random() 0 과 1 사이의 무작위 실수 반환

2. 시퀀스 내 무작위 선택

  • choice(sequence) : 주어진 시퀀스(리스트, 튜플 등)에서 임의의 요소 선택
  • shuffle(sequence) : 주어진 시퀀스의 요소 순서를 무작위로 섞음
  • sample(sequence, k) : 주어진 시퀀스에서 k 개의 무작위 요소 선택


    randrange()




choice()

배운걸 이용해서 윷놀이 게임도 만들었는데 빽도 추가해서 올려본다

# 윳놀이 프로그램
import random

throw1 = random.choice([0,1])
throw2 = random.choice([0,1])
throw3 = random.choice([0,1])
throw4 = random.choice([0,1])

total_back = throw1 + throw2 + throw3 + throw4
results = ['모', '도', '개', '걸', '윷', '빽도']

if throw1 == 1 and throw2 == 0 and throw3 == 0 and throw4 == 0:
  result = results[5]
else:
  result = results[total_back]

print(f"이번 턴은 {result} 입니다.")

변수

어려운 것은 없었다.

x = 10
y = x
z = y
x = 20
print(x, y, z) 

결과값은 20, 10, 10

x, y, z 변수가 같은 값을 가리키진 않는다

# id(x), id(y)에 대해서
# -5 ~ 256

x = 256
y = 256

print(x, y)

결과
256, 256

print(x == y)    # 값 비교
print(x is y)    # ID값 비교

결과 
True
True

# -5 ~ 256

x = 257
y = 257

print(x, y)

결과
257, 257

print(x == y)    # 값 비교
print(x is y)    # ID값 비교

결과 
True
False

print(id(x), id(y)) # ID값이 바뀐걸 확인할 수 있다.

정수형에서는 -5 ~ 256 까지는 괜찮은데 256이 넘어가면 메모리 위치도 변경되는거 같다.
이유는 잘 모르지만 효율성 때문이 아닐까 추측해본다.


무한대 inf

이런 것도 있나 싶은데 예전 기억 떠올려보면 무지 큰수랑 비교해서 무조건 True를 리턴하고 싶었던 적이 있었던거 같은데
구체적인 생각은 안나는데 그런걸 표현할 수 있었다.

x_inf = float("inf")
y_inf = float("_inf")

실수의 부동소수점 문제

컴퓨터의 연산은 정확하지 않고, 고려하여 코딩해야 한다.
IEEE754 표준이 10진수 숫자를 표현하는데 완벽하지 않다.

10.1 + 10.2

# 출력
20.299999999999997

0.1 + 0.2

# 출력
0.30000000000000004

프로그래밍 언어는 10진수를 컴파일 과정에서 2진수로 전환하여 계산하게 되는데 0.1, 0.2 는 무한소수가 된다.
메모리의 한계로 무한한 값을 저장할 수 없으니 적당한 소수점 위치에서 반올림하여 계산 종료한다.

python 프로그래밍 과정에서 정확한 값을 얻기 위해서라면
decimal 을 사용하여 좀 더 정확한 연산을 할 수 있다.

import decimal

float(decimal.Decimal('.1') + decimal.Decimal('.2')) # 출력: 0.3

나중에 계산할때 까먹지 않기를..
값 틀렸다고 코드에서 오류 찾는 바보짓 할거 같은 예감.

그 외 지수 표현, 복소수 표현 등을 배웠다.
그냥 배우다 보니 도대체 왜 이렇게 표현이 복잡한가 할수도 있을듯 싶은데
이런건 결국 실제 코드에서 필요한 순간을 만나야 비로소 깨닫게 되리라ㅋ