코딩의 기록

따라하며 배우는 파이썬과 데이터 과학 6장 심화문제

모루우 2025. 1. 16. 17:52
728x90
반응형

1.

def square(n):
    return n ** 2

print('3의 제곱은 : ', square(3))
print('4의 제곱은 : ', square(4))

 

2.

def max2(m, n):
    if m > n:
        return m
    else:
        return n

def min2(m, n):
    if m < n:
        return m
    else:
        return n

print('100과 200중 큰 수는 :', max2(100, 200))
print('100과 200중 작은 수는 :', min2(100, 200))

 

3.

def max3(a, b, c):
    if a > b:
        if a > c:
            return a
        else:
            return c
    else:
        if b > c:
            return b
        else:
            return c

def min3(a, b, c):
    if a < b:
        if a < c:
            return a
        else:
            return c
    else:
        if b < c:
            return b
        else:
            return c

a, b, c = input("3 수를 입력하시오 :").split(" ")

a = int(a)
b = int(b)
c = int(c)

print('가장 큰 수는 :', max3(a, b, c))
print('가장 작은 수는 :', min3(a, b, c))

int()는 리스트가 안된다 아마도 3개를 받는건 리스트로 받는건가 봄 string, 바이트나 숫자만 가능한듯

https://reddot.kr/13

 

[파이썬] TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

두 개의 정수값을 입력받으려고 input(""). split()으로 문자열을 받고 이 것을 int()로 묶어서 형변환을 시키려 했더니 num, num2 = int(input("").split()) >> 2 10 TypeError: int() argument must be a string, a bytes-like objec

reddot.kr

 

4.

def max_and_min(n1, n2, n3):
    if a > b:
        if a > c:
            if b > c:
                return a, b
            else:
                return a, c
        else:
            return c, b
    else:
        if b > c:
            if a > c:
                return b, c
            else:
                return b, a
        else:
            return c, a

a, b, c = input("3 수를 입력하시오 :").split(" ")

a = int(a)
b = int(b)
c = int(c)

max, min = max_and_min(a, b, c)


print('가장 큰 수는 :',max)
print('가장 작은 수는 :', min)

 

5.

def cel2fah(cel):
    fah = (9/5) * cel + 32
    return fah

for i in range(0, 6):
    i10 = i * 10
    print("섭씨온도", i10, "도:", cel2fah(i))

 

6.

#소수를 저장해놓지 않으면 성능이 너무 느려지기 때문에 저장

PrimeDic = [] # 소수를 저장할 리스트

def is_Prime_core(n): #소수를 판별해주는 코어, 만약 들어온 수가 소수라면 추가함
    i = 0 # 소수를 0부터 나누어야 하기에
    sw = True # 소수 판별 스위치
    while (n//2) > PrimeDic[i]: #n이 소수사전의 수 보다 크면 반복
        r = (n//2) % PrimeDic[i] #나눠서 나온 나머지로 소수를 판독하기 위해 reader(판독기)의 약자

        if r == 0: #만약 나누었을 때 0이라면 소수가 아니므로
            sw = False
            return sw
            break;

        i += 1

    PrimeDic.append(n) #소수 추가
    return sw

def is_Prime(n): #들어온 수의 1/2이 소수사전에 있는지 검사 후 없으면 코어로 보내서 n/2까지 소수 검사를 하고 사전에 추가
    if len(PrimeDic) == 0: #PrimeDic이 오류 안나게 추가 시켜주기 근데 이건 사실 처음부터 넣어줘도 될 일이긴 함
        PrimeDic.append(2)
        PrimeDic.append(3)
        PrimeDic.append(5)
        PrimeDic.append(7)
        PrimeDic.append(11)
        PrimeDic.append(13)
        PrimeDic.append(17)

    if n//2 > PrimeDic[-1]: #소수사전에 수가 있는지 검사
        itr = PrimeDic[-1] +1 #마지막 수부터 n/2까지 검사해줄 이터레이터?
        while itr <= (n//2): # 참고로 //을 쓰는 이유는 0.5 이런 소수점 때문에 while문이 한번 더 돌아서 out of range가 뜨는 것을 막기 위해
            is_Prime_core(itr)
            itr += 1

    value = is_Prime_core(n) #True인지 False인지 받기 위해서
    return value

while True:
    n = int(input("소수 검사를 할 정수를 입력하시오: "))
    print("소수인가요? ", is_Prime(n))

솔직히 말하면 이거 보다 더 쉽게 짤 수 있는데 계속 나누면 비효율적이라 생각해서 한번 이렇게 짜봤는데...

걍 정석으로 짜는게 더 빠르다 걍 단순 계산은 이렇게 하는게 나을듯 계속 함수를 불러오고 하는게 더 오래걸리는 거 같다

def is_prime(x):
    for i in range(2, x):  # 2부터 x-1까지 아래를 반복한다.
        if num % i == 0:  # 2부터 x-1까지 나누었을 때 나머지가 0이면 False를 반환
            return False

        else:  # 아니면 반복을 계속한다.
            continue

    return True  # 나머지가 0이 되는 수가 없으면 True를 반환한다.


num = int(input('소수 검사를 할 정수를 입력하시오 : '))
print('소수인가요? :', is_prime(num))


 

7.

def factorial(n):
    f = 1
    for i in range(1, n+1):
        f = f * i

    return f

print("5!의 값은 ",factorial(5))
print("7!의 값은 ",factorial(7))
print("10!의 값은 ",factorial(10))

 

8.

def distance(x1, y1, x2, y2):
    dist = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** (1/2)
    return dist

x1 = float(input("x1: "))
y1 = float(input("y1: "))
x2 = float(input("x2: "))
y2 = float(input("y2: "))

print("(", x1, ",", y1, ")과","(", x2, ",", y2, ") 사이의 거리는 ", distance(x1, y1, x2, y2), sep = "")
728x90
반응형