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

2022.02.08 ㅈ같지만 다시시작 파이썬 모듈

by 다니엘의 개발 이야기 2022. 2. 8.
320x100
# 들어가는 글
'''
import math

def abs_sign(a):
    if a >=0:
        return a
    else:
        return -a

def abs_square(a):
    b = a*a
    return math.sqrt(b)

print(abs_sign(5))
print(abs_sign(-3))
print()
print(abs_square(5))
print(abs_square(-3))
'''
# 첫번째 마당
# 알고리즘 기초

# 첫번째 문제
'''
# 내가 푼 문제
# 1. 1부터 10까지의 수를 모두 더하면?

 total = 0
for i in range(1,11):
    total += i
print(total)

# 2. 1부터 100까지의 수를 모두 더하면?

total = 0
for i in range(1,101):
    total += i
print(total)
# 너무 연습이 되어있어서 쉽게 풀었다. 하지만 해설을 보자 내 코드가 좋은 코드가 아님을 깨달았다.
# 왜냐하면 간단하게 축약이 가능하기 때문이다.
# 함수 정의 기능을 사용해서 답안 보지 말고 해보자
'''
'''
# 내가 함수 정의해서 다시 풀어본 문제
# 1회 실패. - 위에 먼저 풀어두었던 수식을 주석처리 하지 않아서
# 2회 실패 - 이미 정의된 함수에 print 기능이 내장되어있음에도 print(hand(10)) 이런식으로 써줘서 값이 none, 55 이런식으로 나왔다.


def hand(i):
    total=0
    for a in range(i+1): # 이거는 생각조차 못하고 있었는데 해설을 배꼈다. i+1만 하지만 이것도 크다.
        total +=a
    print(total)


hand(10)
hand(100)
'''

'''
# 첫번째 해설코드

# 1부터 n까지 연속한 숫자의 합을 구하는 알고리즘 1
# 입력 n
# 출력 1부터 n까지의 숫자를 더한 값

def sum_n(n):
    s = 0
    for i in range(1,n+1):
        s= s+i
    return s # 이부분에서 나의 정의 수식과 차이점이 되었다. 보통 보면 마지막 정의를 return으로 해주더라. print가 아니라.
            # 경우에 따라서 달라질 수 있겠지만 이 케이스에서는 마지막 정의를 print로 하게 되면 불필요한 값까지 출력된다.

print(sum_n(10))
print(sum_n(100))
'''

'''
# 두번째 해설코드

def sum_n(n):
    return n *(n+1) //2

print(sum_n(10))
print(sum_n(100))

# 확실히 선순위가 함수정의. 후순위로 수학 수식까지 알면 정말 수식이 간결해진다.
# 이 수식에 대해서 본 기억은 있으나 전혀 기억나지 않았다.
'''

'''
위 처럼 같은 문제를 풀때도 두개의 해설을 준 이유가,
식이 보기에도 간결할 수록, 연산이 짧아질 수록 프로그램을 돌리는데 좋은 코드라고 한다
첫번째 해설코드는 덧셈 n번이지만 두번째는 덧셈,곱셈,나눗셈 각 한번으로써 총 세번으로 끝난다고 한다.

시간 복잡도
공간 복잡도에 대해서도 말했다.

주저리 거릴필요도 없다.
내가 동일한 문제를 직면했을때 얼마나 수학수식에 대해서 내 안에 녹아져 있느냐 없느냐에 따라서
저런 코드를 만들어 낼 수 있을거라고 생각한다.
'''


##### sys모듈

'''
import sys

print("버전 :", sys.version)
print("플랫폼 : ", sys.platform)
if (sys.platform =="win32"):
    print(sys.getwindowsversion())
print("바이트 순서: ", sys.byteorder)
print("모듈 경로: ",sys.path)
sys.exit(0)
'''

'''
import sys
print(sys.argv)
print(len(sys.argv))
'''

'''
import calendar
import time
import sys

if len(sys.argv) ==1:
    t = time.time()
    tm = time.localtime(t)
    calendar.prmonth(tm.tm_year, tm.tm_mon)
    
# 사실상 sys.argv를 len으로 해보면 언제나 1이 나왔다. 내가 여태까지 시도한 거에 의하면 따라서 이 밑의 수식은 불필요하다.
# 왜 sys.argv가 길이가 1인지 나는 모른다. 어디에도 설명되어있지 않다. 안에 뭐가 들어있는지도 모른다. 뭔가 경로만 나와있는거같다.
# 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개 이하여야 합니다.")
'''

'''
# 경과일 계산

import sys
import time

if len(sys.argv) !=2:
    print("시작 날자를 yyyymmdd로 입력하십시오.") # 애초에 어디에 시작날자를 입력하라는건가?
    sys.exit(0) # 0은 무슨 기능인가?
    # 애초에 이 위로 어차피 sys.argv는 1이기 때문에 여기까지만 출력되는거 아닌가?
    
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)
'''

'''
import sys
import time

year = int(input("태어난 년도를 입력하세요(4자리) : "))
month = int(input("태어난 월을 입력하세요(2자리) : "))
day = int(input("태어난 일을 입력하세요 (2자리) : "))

tm = year,month,day,0,0,0,0,0,0 # 도대체 이 0의 기능은 뭘까
ellapse = int((time.time() - time.mktime(tm)) / (24*60*60)) #이건 뭔 의미일까 왜 24*60*60일까
print(ellapse) 
'''

#3. 밑면이 8이고 높이가 5인 직각삼각형의 빗변 길이를 구하라.
# 아예 감도 안왔었다. 해설코드다.
import math

print(math.hypot(8,5))

#4. 1994년 5월 5일에 태어난 사람이 현재 며칠째 살고 있는지 계산하는 프로그램을 작성해라
'''
# 내가 위의꺼 따라서 써본 코드
import sys # 하면서 느낀거지만 사실상 이 수식에선 이걸 import 할 필요가 없구나.
import time

# 이 부분이 정수처리 되지 않아서 안되는건가? 싶어서 int로 박아놔도 값은 똑같다.
year = int(1994)
month = int(5)
day = int(5)

tm = year,month,day,0,0,0,0,0,0
ellapse = int((time.time() - time.mktime(tm) / (24*60*60)))
print(ellapse) # 왜 결과값이 1644309014 이렇게 많이 나오는가? 내 생일로 위의 수식에서 진행했을땐 10,000의 자리로 족했는데
# 왜 같은 식의 원리인데도 값이 들쭉날쭉 한걸까
'''

'''
# 해설코드

import time

tm = 1994,5,5,0,0,0,0,0,0
birth = time.mktime(tm) # mktime이 뭐냐
today = time.time()
ellapse = (today - birth) / (60*60*24) # 왜 위와 수식이 같은데 값은 다른것인가, 60*60*24가 뭔뜻일까
print("태어난지 %d일 지났습니다."%ellapse) # 태어난지 10141일 지났습니다.
# 진짜 졸라 이상하다 왜 위와같은 상황들이 벌어진건지 모르겠다.
'''
'''
#5. 10에서 20사이의 난수 10개를 뽑아 출력하라. 끝수인 20도 포함한다.

import random

for i in range(10):
    print(random.randint(10,20)) # 끝수가 20이 포함인데 왜 21이 아닌가. 게다가 값으로는 20도 나왔다 하... ㅅㅂ 진짜 저자
'''
300x250