코린이의 소소한 공부노트

공부하면서 만난 연습문제들 - 파이썬편 본문

Python

공부하면서 만난 연습문제들 - 파이썬편

무지맘 2021. 5. 21. 21:55

# 식 계산, 대입(expression evaluation & assignment)

a = 9
print(a)
>> 9

print(a - 3) # 식을 계산해서 평가하기
>> 6

print(a)     # 평가만 했지 대입은 안했으므로 값은 그대로
>> 9

# 두 변수의 값 바꾸기

a = 6
b = 3

temp = a  # a = 6, b = 3, temp = 6
a = b     # a = 3, b = 3, temp = 6
b = temp  # a = 3, b = 6, temp = 6

print(a, b)
>> 3 6

# 1부터 20까지의 자연수 중 2의 배수 또는 7의 배수를 모두 출력하기

a = set(range(2, 21, 2))   # 2부터 2씩 건너뛰어 2의 배수 집합 만들기
b = set(range(7, 21, 7))   # 7부터 7씩 건너뛰어 7의 배수 집합 만들기

# 내장함수 이용하기 1
a.union(b)
>> {2, 4, 6, 7, 8, 10, 12, 14, 16, 18, 20}

# 내장함수 이용하기 2
a.update(b)

# 반복문 이용하기
for n in b:
    a.add(n)

# 숫자 리스트에서 최댓값과 최솟값 찾기

a = [40, 57, 28, 10, 2, 83, 17, 84, 27, 5, 36, 31]

# sort함수 이용하기
a.sort()
print('최댓값은 {}, 최솟값은 {}'.format(a[-1], a[0]))
>> 최댓값은 84, 최솟값은 2

# 반복문 이용하기
_max = a[0]
_min = a[0]
for n in a[1:]: # 초기값이 a[0]이기때문에 a[1]부터 비교
    if n < _min:
        _min = n
    if n > _max:
        _max = n
print('최댓값은 {}, 최솟값은 {}'.format(_max, _min))

# 숫자 리스트의 평균 구하기

a = [40, 57, 28, 10, 2, 83, 17, 84, 27, 5, 36, 31]

# 반복문 이용하기
_sum = 0
for i in a:
    _sum += i
print('평균:', _sum/len(a))
>> 평균: 35.0

# sum함수 이용하기
print('평균:', sum(a)/len(a))

# reduce함수 이용하기
import functools as ft
print((ft.reduce(lambda x,y:x+y, a))/len(a))

# num이라는 자연수가 소수인지 판별하기

# 1. 반복문 이용하기 1
i = 2
while i < num:
    if num % i == 0:
        print(num, "은 소수가 아닙니다.")
        break
    i += 1
if i >= num:  # 소수가 아닐 때 중복출력 방지
    print(num, "은 소수입니다.")
    
# 2. 반복문 이용하기 2
def is_prime(n):
    for i in range(2, n): # 소수는 1과 자기 자신만 약수인 것에서 착안
        if n % i == 0:    # 2부터 n-1까지 나눠보면서 나누어 떨어지면 소수가 아님
            return False
    return True

# 복소수 클래스를 정의한 후 다음을 구현해보기

1) 덧셈, 뺄셈, 곱셈 연산자 지원

2) 복소수의 크기(길이) 연산 메소드

3) 복소수 출력 지원

4) 비교 연산자 지원

import math

class Complex:
    def __init__(self, a, b):
        self.r = a
        self.i = b
        
    def __add__(self, num): # 덧셈
        return Complex(self.r + num.r, self.i + num.i)
    
    def __sub__(self, num): # 뺄셈
        return Complex(self.r - num.r, self.i - num.i)
    
    def __mul__(self, num): # 곱셈
        if type(num) == int:
            return Complex(self.r * num, self.i*num) # 복소수의 실수배
        else:
            return Complex(self.r * num.r - self.i * num.i, self.i * num.r + self.r * num.i) # 복소수 곱셈
    
    def __len__(self): # 복소수의 크기
        return int(math.sqrt(self.r**2 + self.i**2)) # 길이는 정수로 나와야하므로 float을 int로 변환
    
    def __str__(self): # 복소수 출력
        if self.i >= 0:
            return '{} + {}i'.format(self.r, self.i)
        else:
            return '{} - {}i'.format(self.r, abs(self.i))

    def __eq__(self, num): # 비교 연산 ==
            return self.r == num.r and self.i == num.i
        
    def __ne__(self, num): # 비교 연산 !=
        return self.r != num.r or self.i != num.i

    def __ge__(self, num): # 비교 연산 >=
        return (self.r**2 + self.i**2) >= (num.r**2 + num.i**2)
        
    def __le__(self, num): # 비교 연산 <=
        return (self.r**2 + self.i**2) <= (num.r**2 + num.i**2)
        
    def __lt__(self, num): # 비교 연산 <
        return (self.r**2 + self.i**2) < (num.r**2 + num.i**2)  
        
    def __gt__(self, num): # 비교 연산 >
        return (self.r**2 + self.i**2) > (num.r**2 + num.i**2)
        
    def __abs__(self): # 절댓값(len과 연산은 같지만 결과는 float)
        return math.sqrt(self.r**2 + self.i**2)
    
a = Complex(3, 4)
b = Complex(2, -1)
print(a)
>> 3 + 4i
print(len(a))
>> 5
print(a>b)
>> True
print(a-b)
>> 1 + 5i
print(abs(b))
>> 2.23606797749979

len 추가 설명: 보통 len함수는 iterable 객체(리스트, 문자열 등)의 길이를 구할 때 쓰는 함수이기 때문에 결과가 항상 정수로 나오게 되는데, 복소수의 길이는 실수라서 변환(캐스팅)이 꼭 필요하다. 만약 return부분에서 int로 바꿔주지 않는다면 TypeError: 'float' object cannot be interpreted as an integer라는 오류를 보게 될 것이다.

'Python' 카테고리의 다른 글

람다(Lambda)함수 이해 및 사용하기  (0) 2021.06.11
함수를 이해하고 활용해보기  (0) 2021.05.27
반복문 - while, for  (0) 2021.05.21
조건문 - if  (0) 2021.05.18
데이터 타입, 연산자 (4) 딕셔너리, 셋  (0) 2021.05.14