본문 바로가기
개발일지/Python

2022.02.07 파이썬정복 12장 표준 모듈 ft. 책버림

by 다니엘의 개발 이야기 2022. 2. 7.
320x100
# 12장 표준 모듈

'''
import math

print(math.sqrt(2)) # math.sqrt는 ()안의 제곱근을 출력해주는 함수이다.
'''
# 위의 경우는 1. 내가 import해야하는 수식이 있고, 2. 이 수식을 이용하기 위해서는 수식.~~~() 구조를 띄게 된다.
# 이걸 생략하며 사용하기위한 방법이 다음의 방법이다.
'''
from math import sqrt
# from 수식 import 세부수식

print(sqrt(3))

# 이것 외에도 메인 수식에서 전체를 가져오고 싶다고 한다면
# from math import *
# 이렇게 표시해주면 된다.
import math as m
print(m.sqrt(4))
'''
'''
# 이건 매우 흥미롭다. 그리고 감도 잘 안오는 수학적 의미가 있는것같다

import math
import turtle as t

t.penup()
t.goto(-720,0)
t.pendown()
for x in range(-720,720):
    t.goto(x,math.sin(math.radians(x))*100)
t.done()

# 와... 이건 진짜 와우다.... 비록 대부분의 의미가 뭔지 이해는 안되도 정말 대단하다.
# 파이썬에서 이렇게 동작하는 건 처음본다.
'''
# 2. 시간
'''
import time

t = time.time() # time.time???
print(time.ctime())
'''

'''
import time

now = time.localtime()
print("%d년 %d월 %d일"%(now.tm_year,now.tm_mon,now.tm_mday))
print("%d:%d:%d"%(now.tm_hour,now.tm_min,now.tm_sec))
'''

# 정말 많은 예시들이 나왔으나, 읽어보는 차원에서 그쳤다.
# 왜냐하면 시간을 다른 표현방법으로 7개 쯤은 표현한것같다.
# 대체적으로 구글링으로 차후에 충분히 소화 가능하고 구조가 복잡하지도 않은걸 붙들고 있고 싶진 않다.

# 구구단

# 일부러 sleep을 넣어서 느리게 만든것 같다.
# 설명으로는 시나 소설을 출력하게 될때 활용하는게 적합할거라고 하였다. 시간을 조절하여 좀 더 천천히 한다면

# 해설코드
'''
import time

for dan in range(2,10):
    print(dan,"단")
    for hang in range(2,10):
        print(dan, "*",hang, "=", dan*hang)
        time.sleep(0.2)
    print()
    time.sleep(1)
'''

'''
# 기본 구구단 해보기 - 성공

for i in range(2,10):
    print(i,"단")
    for a in range(2,10):
        print(i,"*",a,"=",i*a)
    print()
# 성공은 했는데 좀 더 간단하게 만들어보고싶다.
'''

'''
import random

food =["쌈밥","볶음밥","백반","순대국"]
print(random.choice(food))
'''

# 음.. 이걸 해야하나 말아야하나 고민을 많이 했지만 하기로
'''
# 해설판
import random

correct = 0
while True:
    a = random.randint(1,9)
    b = random.randint(1,9)
    question = "%d + %d = ?(끝낼 때는 0) "%(a,b)
    c= int(input(question))

    if c ==0:
        break
    elif c ==a+b:
        print("정답입니다.")
        correct = correct+1
    else:
        print("틀렸습니다.")

print("%d개 맞췄습니다." % correct)

# 이것도 놀랍다. 무한으로 나오는 랜덤한 숫자 + 랜덤한 숫자를 맞추는 프로그램이다.
'''
'''
# 내가 시도해본 랜덤 문제 - 배끼기 버전

import random

correct = 0
while True:
    a = random.randint(1,100)
    b = random.randint(1,199)
    question = "%d + %d = ? (끝낼때는 0) : "%(a,b)
    c = int(input(question))

    if c ==0:
        break
    elif c ==a+b:
        print("정답입니다.")
    else:
        print("틀렸습니다.")

print("%d개 맞췄습니다."%correct)
'''

'''
# 직접 해본 버전 - 틀렸음

import random

correct = 0

while True:
    a = random.randint(1,1000)
    b =random.randint(1,1000)
    question = "%d + %d = ? 그만두고 싶으면 0 : "%(a,b) # 이부분이 불안정하다.
    c = int(input(question))                 # 이부분은 손도 못댔다.

    if c ==0:
        break
   # elif c is True:     # 단순히 True라고 하는게 안먹는거 같다.
    elif c == a+b:      # 이제서야 제대로 작동한다.
        correct += 1
        print("맞았습니다.")
    else:
        print("틀렸습니다.")

print("맞춘 정답은 %d개 입니다."%correct)
# 문제가 있다. 맞추든 틀리든 틀렸다고 나온다.
'''

'''
# 다시 도전 버전 - 성공

import random

correct = 0

while True:
    a = random.randint(1,10)
    b = random.randint(1,10)
    question = "%d + %d = ? 끝내고 싶으면 0을 누르세요 : "%(a,b)
    c = int(input(question))

    if c == 0:
        break # break 를 if 문의 가장 먼저 나오게 하는것도 인상적이다.
    elif c == a+b:
        print("정답입니다.")
        correct +=1
    else:
        print("틀렸습니다.")

print("총 %d개 맞췄습니다."%correct)
'''

# 로또 번호
# 해설코드

'''
import random

nums=random.sample(range(1,46),6)
nums.sort()
print(nums)

'''
'''
# 배낀 버전 

import random

nums= random.sample(range(1,46),6) # 정확히 sample이 뭘까?
nums.sort()
print(nums)
'''
'''
# 직접 시도해본 버전 - 미숙한 성공

import random

nums=random.sample(range(1,46),6) # 지정된 범위안에서 정해진 갯수만큼 대표를 추출해 내는것 (여기 코드에서는 6개)
nums.sort()
print(nums)
'''

'''
# 해설코드
import random

correct = 0
while True:
    a = random.randint(10,99)
    b = random.randint(10,99)
    op = random.randint(1,3)

 # 이 부분은 정말 왜 존재하는지 이해가 안간다. 특히나 ans는.
    if op==1:
        ans = a+b
        mark = "+"
    elif op ==2:
        if (a<b):
            a,b = b,a
        ans = a-b
        mark = "-"
    else:
        ans = a*b
        mark = "*"
 # 오히려 중간 단락인 이 부분을 없애고, 밑의 단락을 좀 만져주면 작동하지 않을까?

    question = "%d %s %d = ? 끝낼때는 0 : "%(a,mark,b)
    c =int(input(question))

    if c ==0:
        break

    elif c == ans:
        print("정답입니다.")
        correct += 1
    else:
        print("틀렸습니다.")
print("%d 개 맞췄습니다."% correct)
'''
# 카피는 생략한다. 뭐랄까.. 의미를 이해 못하겠고
# 머리가 안돌아가는데 굳이 노력해서 하기 싫다. 필요하면 차후에 배껴서 하면서 익숙해지자

# 랜덤 업다운 게임 99까지의 숫자.
# 해설코드
'''
import random

secret = random.randint(1,100)
while True:
    num = int(input("숫자를 입력하세요(끝내길 원하면 0) : "))
    if num == 0:
        break
    if num == secret:
        print("맞췄습니다.")
        break
    elif num > secret:
        print("입력한 숫자보다 더 작습니다.")
    else:
        print("입력한 숫자보다 더 큽니다.")
    '''
'''
# 카피코드
import random

secret = random.randint(1,100)
# num = int(input("1~99까지의 숫자를 맞추시오, 끝내길 원하면 0 : ")) # 실수2 이걸 여기 써줬더니 틀렸을 경우 틀린 결과값이 무한루프로 나왔다.

while True: # 실수 1 이걸 빼먹었어서 작동이 안되었었다.
    num = int(input("1~99까지의 숫자를 맞추시오, 끝내길 원하면 0 : ")) # 실수 2의 정상위치. 매우 중요
    if num == 0:
        print("이용해주셔서 감사합니다.")
        break

    elif num == secret:
        print("정답입니다.")
        break
    elif num > secret:
        print("더 작은 수 입니다.")
    else:
        print("더 큰 수 입니다.")
'''

'''
# 해설 코드
# 정해진 숫자를 맞추되, 몇번만에 맞추었는지 보강된 코드

import random

secret = random.randint(1,100)
count=0
while True:
    num = int(input("숫자를 입력해주세요(끝낼 때 0) : "))
    if num ==0:
        break
    count +=1       # 왜 break문이 들어가있는곳에서 count +=1을 넣어놨고 다른곳엔 count 추가가 없는데 어떻게 몇번만에 맞춘걸로 나올까?
                    # 코드가 돌아가는 순서는 맨 위부터, 맨 왼쪽부터다. 따라서 여기에 count가 위치하므로, num값이 0이면 break로 끝나고
                    # 그 외의 숫자면 정답, 오답 이전에 1회 시도로 추가된다. 매우 중요하다.
    if num == secret:
        print("%d번만에 맞췄습니다."%count)
        break
    elif num >secret:
        print("입력한 숫자보다 더 작습니다.")
    else:
        print("입력한 숫자보다 더 큽니다.")

'''

'''
# 카피코드
# 안보고 시도해보기

import random
number = random.randint(1,100)
count = 0

while True:
    num = int(input("숫자맞춰봐. 하기 싫음 0눌러서 탈출: "))
    if num == 0:
        print("안녕히가세요. 수고하셨습니다.")
        break
    count +=1
    if num == number:       # 실수1. elif로 해서 하나의 코드로 묶으려고 했다. 하지만 그게 안되더라. 왜 안되는진 모르겠다.
        print("%d번 만에 맞췄습니다. 정답 입니다."%count)
        break   # 누락했었다.
    elif num > number:
        print("그 숫자보단 많습니다.")
    else:
        print("그 숫자보단 적습니다.")
'''
'''
import sys

print(sys.argv)
'''
'''
# 현재의 달력출력 수식
# 이것도 상당히 놀라우나, 나중에 만져보도록 하자. 피곤하다.

import calendar
import time
import sys # 궁금1. sys가 정확히, 구체적으로 뭘 표현하는 걸까?


if (len(sys.argv) == 1): # 궁금2. argv가 뭘까? # 궁금3. 이 길이를 체크하는 함구에서는 길이 값이 1로 나오는데, 뭐가 안에 들어있기에 1인가?
    t = time.time()
    tm = time.localtime(t)
    calendar.prmonth(tm.tm_year, tm.tm_mon) # 궁금4. prmonth? 이건 또 뭘까? 
                                        # 궁금 5.Thonny를 돌려보니 사실상 자동적으로 여기서 수식이 끝난다. 아래 수식이 필요한가?
elif len(sys.argv) == 2:
    print(calendar.calendar(int(sys.argv[1])))
elif len(sys.argv) ==3:
    calendar.prmonth(int(sys.argv[1]), int(sys.argv[2]))
else:
    print("인수는 2개 이하여야 합니다.")
'''

# 경과일 계산
# 이 sys라는 것과 argv 라는 것은 그냥 이해가 안간다.
# 책의 설명은 빈약을 넘어서서 언급조차 하지 않고 있고, 검색해봐도 명확히 설명된게 없는듯 하다.
# 그냥 따라하는 선에서 끝내자.
# 진짜 책이 보면볼수록 쓰래기같다
# 김상형 저자의 파이썬 정복 절대 사지 않길 권장한다.

import sys
import time

if len(sys.argv) !=2: # 진짜 이부분도 왜 그런지 감도안온다
    print("시작 날짜를 yyyymmdd로 입력하십시오")
    sys.exit(0)

birth = sys.argv[1]
if len(birth) !=8 or birth.isnumeric() == False:
    print("날짜 형식이 잘못 되었습니다.")
    sys.exit(0)

tm=int(birth[:4]), int(birth[4:6]),int(birth[6:8]), 0,0,0,0,0,0 # 진짜 이부분도 왜 그런지 감도안온다
ellapse = int((time.time() - time.mktime(tm)) / (24*60*60))
print(ellapse)

12장이 거의 끝나갈 무렵, 짜증나서 그냥 책 버렸다.

진짜 졸라쓰래기같다.

 

한 8강? 정도까지는 그래도 설명 나온다.

근데 9강? 정도부터는 왜그런지 설명도 안나오고 12강인 모듈부터는 그냥 화룡 정점이다.

그냥 너무 당연하게 새로운 개념을 표현한다.

왜그렇게 돌아가는지도 모르겠고 그걸 알 수 도없다.

 

진짜 내가 여태까지 파이썬 책 2권, 강의 2개 봤는데

모두 그런 패턴이였다.

1/4 지점까지는 그래도 괜찮다. 설명도 잘해주고

근데 2/4 지점부터는 진짜 너무 당연하게 안다는 듯이 새로운 개념을 알려주는데 당췌 추론자체를 할 수없는것들이 많다.

하... 진짜 졸라쓰래기 같다. 그렇게 돈 벌어먹고 싶나?

 

아무튼 다른 파이썬 책을 시도해보도록 하겠다.

300x250