멋사 네 번째 과제

olhsg·2023년 4월 10일
1

멋쟁이 사자처럼

목록 보기
4/15
post-thumbnail

이번 활동에서는 파이썬의 반복문과 함수, 클래스에 대해 공부했다!
그리고 반복문까지의 다양한 예제들을 직접 코딩하는 것이 이번 과제이므로
열심히 코딩을 해 보겠따!

우선! 공부한 것들 정리~

1. 반복문

  • while : 반복 횟수가 명확하지 않을 때

    반복문을 빠져나오고 싶으면 break를 작성하면 된다
  • for: 반복 횟수가 명확할 때

    for 문은 반복 횟수가 명확할 때 사용하기 때문에 이처럼 리스트나 튜플에 들어가 있는 요소를 하나씩 반복하는 반복문이다

2. 함수

함수: 입력 값을 가지고 일을 수행한 뒤 결과물을 내는 것
함수의 사용 이유: 반복적인 내용을 간소화하기 위해서

def 함수명(매개변수):
	<수행할 문장1>
    <수행할 문장2>

기본적인 구조는 이러하다!
def는 함수를 만들 때의 예약어이며, 함수명은 작성자가 임의로 설정한다
함수명 뒤 괄호에는 매개변수를 적는데, 매개변수는 함수에 입력되는 값을 받는 변수이다
수행할 문장에는 조건문 if, 반복문 while,for문 등의 수행 문장들을 입력하면 된다.

def plus (a,b):
	return a + b

예시로 def 예약어로 함수를 만들고, 함수명은 plus로 설정한 뒤
함수에 입력되는 값인 매개변수를 a와 b를 주었다.
그리고 실행 문장으로는 a + b 의 값을 return하게 했다
(return = 함수의 결과값을 돌려주는 명령어)

a = 10
b = 5
hap = plus(a,b)
print(hap)

이제 plus 함수를 사용하기 위해 a, b 변수에 각각 10, 5의 값을 주고 hap 변수를 만들어
함수를 사용했다! 그리고 hap 변수를 print하면 결과값을 알 수 있다!

매개 변수와 인수
매개변수: 함수에 입력되는 값을 저장하는 변수
인수: 함수를 호출할 때전달하는 입력값

def puls (a,b):     #매개변수
	return a + b
print(puls(10,5))   #10, 5 = 인수 

입력값과 리턴값: 함수의 형태는 존재 유무에 따라 4가지 유형으로 나뉜다

  • 일반적인 함수 (입력값 O, 리턴값 O)
def 함수이름(매개변수)
	<수행할 문장>
    return 리턴값

이러한 형태로 예시를 작성하면

def plus(a, b):
	hap = a + b
    return hap
a = plus(10,5) #리턴값을 받을 변수 = 함수이름(입력인수1, 입력인수2, ...)
print(a)
  • 입력값이 없는 함수 (입력값 X, 리턴값 O)
def sing():
	return "let it go"
a = sing()
print(a)

입력값이 없는 함수는 함수명 뒤 괄호가 비어있다.
리턴값을 받을 변수에 함수이름()를 작성하면 된다

  • 리턴값이 없는 함수 (입력값 O, 리턴값 X)
def plus(a, b):
	print("f{a}, {b}의 합은 {a+b}입니다.")
plus(10,5)

호출해도 리턴되는 값이 없기 때문에 이런 식으로 사용한다
이때 print문은 리턴이 아닌 <수행할 문장>에 해당하는 부분이라 리턴이 되는 것이 아니다 즉, 리턴값은 오직 return 명령어로만 받을 수 있다 생각하면 된다

  • 입력값, 리턴값이 없는 함수 (입력값 X, 리턴값 X)
def sing():
	print("let it go")
sing()

입력 인수를 받는 매개변수도 없고 return문도 없는 함수이다
이러한 함수는 함수이름()으로 사용한다

3. 객체지향과 클래스

  • 클래스란?
    현실 세계의 사물을 컴퓨터 안에서 구현하려고 고안된 개념
class 클래스명:
	#관련 코드 구현

현실 세계의 자동차로 예시를 든다면

class 자동차:
	색상 = 빨간색 
    속도 = 80
    def 자동차 속도 올리기():
    	현재 속도에서 증가할 속도만큼 속도를 올리는 코드

이렇게 작성할 수 있다
우선 클래스명은 자동차로 지정하고, 자동차의 속성인 색상과 속도는 변수처럼 생성하는데 이때 이러한 속성들을 필드(Field)라고 한다.
그리고 자동차 속도를 올리는 함수 부분은 클래스 안에서는 함수라 표현하지 않고 메서드라고 한다. 이를 바탕으로 파이썬 코드를 만들면

이러하다. 이때 결과는 아무것도 나오지 않게 되는데 그러한 이유는 클래스는 자동차를 직접 만드는 것이 아니라, 자동차를 만들기 위한 설계도라 생각하면 이해하기 쉽다.
그리고 여기서 self는 자신이 속한 클래스를 의미하므로
self.speed는 class car의 speed 값을 받은 뒤, 증가할 속도 값인 value값을 받아 속도가 올라갈 것이라는 의미이다. (조금... 이해하기 어렵다)

  • 인스턴스
    자동차의 설계도인 class를 만들었으니 설계도를 가지고 자동차 만들어야 한다.
    이때 만들어진 자동차를 인스턴스(객체)라고 얘기한다.
    간단하게 인스턴스를 만드는 법은 (=자동차 만들기)
redCar = car()
blueCar = car()
greenCar = car()

인스턴스 이름 = 클래스() 로 작성하면 된다. 그런데 현재 클래스(=자동차 설계도)의 필드(=자동차 속성)에는 아무런 값이 없으므로 필드에 값을 넣어줘야 하는데 현재 인스턴스를 3개 만들었으니 각각 다른 값을 대입할 수 있다.

redCar.color = "빨강"
redCar.speed = 50
blueCar.color = "파랑"
blueCar.speed = 80
greenCar.color = "그린"
greenCar.speed = 10

필드에 값을 대입하는 건 인스턴스명.필드명 = 값 형식으로 표현할 수 있다.

  • 메서드 호출
redCar.upSpeed(30)

현재 작성한 메서드는 하나밖에 없기 때문에 인스턴스명.메서드명(값) 형식으로 사용하면 redCar 인스턴스에는 원래의 속도 50에서 +30이 된 값이 출력될 것이다!

  • 생성자란?
    인스턴스를 생성하면 무조건 호출되는 메서드
    /
    앞에서 자동차의 설계도를 만들고, 그 설계도를 토대로 인스턴스(자동차)를 만들어 하나씩 필드에 값을 대입했다. 그런데 인스턴스를 하나씩 만들고 하나씩 값을 대입하기에는 너무 귀찮다. 그래서 이런 귀차니즘을 해소하기 위해 생성자를 사용하는데 한마디로 표현하자면 인스턴스를 생성하면서 필드값을 초기화시키는 메서드(함수)라고 생각하면 된다!
class 클래스명:
	def __init__(self):
    	초기화할 코드 입력

생성자의 기본 코드는 이러하다. 앞서 만든 class car에서 사용하자면

class car:
	color = ""
    speed = 0
    def __init__(Self, value1, value2):
    	self.color = value1
        self.speed = value2
 redcar = Car(빨강,50)
 blueCar = car(파랑,80)

으로 작성할 수 있다! 그래서 코드도 더 간결해지고,
다른 인스턴스를 만들 때도 더 편리하다는 걸 느낄 수 있을 것이다.

  • 클래스의 상속이란?
    기존 크래스에 있는 필드와 메서드를 그대로 물려받는 새로운 클래스를 만드는 것으로 상속받은 후엔 새로운 클래스에서 추가로 필드나 메서드를 만들어 사용할 수 있다.
class 서브클래스(슈퍼클래스):
	서브 클래스의 내용 코딩

상속을 구현하는 방법은 이러하다.
앞서 자동차의 설계도를 만들었는데 사실 자동차에도 여러 종류가 있다. 예를 들면 승용차와 트럭은 자동차라 말할 수 있지만 엄연히 종류가 다르다. 그렇기 때문에 기본적인 자동차의 설계도를 가져오되, 각각 다른 설정값을 넣어준다 생각하면 된다.

슈퍼 클래스 car를 생성한 뒤, 서브 클래스 truck을 생성했다
이때 서브 클래스에서 메서드 upSpeed의 속도가 150을 초과하면 speed = 150이란 값을 줘서 슈퍼 클래스와 서브 클래스를 나름대로 구별하려고 했다.
서브 클래스 truck은 슈퍼 클래스의 필드값과 메서드값을 그대로 상속받으면서도
자신의 클래스에서 재정의한 값이 있다면 재정의한 값으로 설정이 된다

그래서 결과값은 이렇게 나오게 된다



문제 1.

정수 3개를 입력받아 가장 큰 정수를 출력하시오 (max()함수도 사용 가능)

나는 리스트를 사용하여 정수 3개를 입력 받도록 한 뒤, max 함수를 사용해 리스트에서 제일 큰 값을 출력하도록 하였다!

출력 결과는 이러하다


문제 2.

고명이의 간식을 주문하려고 한다. S, A, B 등급 별로 S등급은 무료, A등급은 2천원, B등급은 3천원의 배송비가 붙는다. 간식 값이 25,000원일 경우, 주문자에게 등급을 입력받아 총 결제 금액이 얼마인지 구하는 프로그램을 만드시오 (고명이 귀여워)

나는 변수 dessert와 사용자에게 입력을 받는 user 변수를 만들어서 조건문을 작성했다.
대소문자 둘 다 입력했을 때 원하는 값이 나올 수 있도록 or을 사용하였고
S, A, B가 아닌 다른 문자를 입력 받았을 때는 없는 등급이라는 안내문을 출력하도록 했다.

출력 결과는 이러하다!


문제 3.

사용자에게 단을 입력받아 해당하는 구구단을 while문을 사용해 출력하시오

사용자에게 입력받을 변수 gugu를 만든 뒤, 구구단의 횟수가 될 변수 i는 1부터 시작해야 하므로 1을, 구구단의 곱셈 결과를 넣을 변수 j에는 0으로 초기화했다
그리고 while 반복문을 사용해 i가 9가 될 때까지 반복하도록 값을 준 뒤
포맷팅 방식을 사용해 값을 출력하도록 했다.


출력 결과는 이러하다!


문제 4.

numbers = [50, 21, 4, 689, 2, 103, 90, 273, 79, 36]이 있을 때 if문을 사용해 50이상이면서 홀수인 숫자를 출력하시오

리스트 numbers를 만들고, i라는 변수를 만든 뒤 for문을 사용해 리스트 값을 하나씩 반복하도록 했다. 그리고 조건을 주기 위해 for문 안에 if문을 사용해 50이상이면서 홀수인 값을 출력하기 위에 리스트에 i 변수를 넣었고 이러한 조건이 만족하지 못하면 i에 값을 1씩 증가시켜 다음 리스트 값을 계산하도록 했다!

결과는 이러하다!


문제 5.

입력받은 숫자만큼 계단식으로 별이 하나씩 증가하게 출력하시오

star라는 변수에 사용자가 입력할 숫자를 넣고, for문에서 range()함수를 사용했다.
보는 것처럼 for문 안에 또 다른 for문을 넣은 뒤 조건문 if을 넣어 a>=b 일때
별을 출력하도록 만들었다.
조금 더 풀어서 설명하자면 a가 1일때 b는 0부터 시작하므로 a>=b는 성립한다.
그래서 별을 출력하게 되고, 다시 a가 2일 때 b는 또 0이므로 별을 출력하는 것이다. 이렇게 차례대로 출력하다 a >=0 이 성립되지 않으면 아무런 값도 출력하지 않는 print()로 코딩을 끝냈다

결과는 이러하다!


문제 6.

while문을 이용해 100이하의 자연수 중 22의 배수를 한줄로 출력하시오

number 변수에 0 값을 준 뒤, while을 사용했다
100이하의 자연수 중에서 값을 출력해야 하므로 while 조건식에 number <= 100을 적었고, 22의 배수인 값만 출력하기 위해 조건문 if를 사용해 number를 22로 나눴을 때 몫이 0이 되는 값 (=22의 배수)을 출력하도록 했다. print에서는 end=" "를 주어 원하는 값이 한줄로 출력되도록 했으며 100까지 계속 반복이 되야 하므로 number = number + 1 의 값을 주었다.출력 결과는 이러하다!


문제 7.

입력받은 숫자만큼 계단식으로 별이 하나씩 감소하게 출력하시오

문제 5번과 매우 흡사하다! 5번에서 설명했기 때문에 다른 코드 설명은 따로 하지 않겠다 다만 별이 하나씩 감소하게 출력하기 위해서는 이번엔 a<=b의 값을 만족해야 한다!

결과는 이러하다!


문제 8.

숫자 5까지 출력하되 별을 계단식으로 출력하시오

레전드... 이거 푸느냐고 머리가 지끈거렸다;;
중첩문 for 사용한다고 해도 쉬운 문제만 써가지고... 이렇게 3개나 중첩한 적은 처음이었는데 오기로 풀기는 했다만... 사실 제대로 설명할 수는 없다 ㅠㅠ
그래도 설명을 쓰자면 우선 숫자 5까지 출력하기 위함으로 for range()함수에 1부터 6까지의 값을 줬다 (마지막 값은 -1이 되니까)
그리고 나서 5, 7번 문제처럼 숫자를 피라미드식으로 출력한다 생각해야 하니까
b는 1부터 a+1까지의 값을 줬다.
이러한 값을 준 이유는 예시로 a = 1일때,
b는 1 ~ a+1(=a) 까지만 반복하므로 숫자 1만 반환할 것이며
a = 2 일때도 마찬가지로 b는 1 ~ a+1(=a) 까지만 반복하므로 숫자 12까지만 반환한다
c는 이해하기 좀 힘들었는데 우선 내가 쓴 거는... 1부터 6-a까지의 값을 줬다.
첫 번째 줄에서 b의 값이 1로 있는 상황에서 별을 4개를 채워야 하는데 이때 a=1이니까
c는 1 ~ 6-a 이며 이는 1~ 6-1=5 즉 1 ~ 5가 된다. 그런데, 이때 마지막 값은 -1이므로
최종적으로 c는 1부터 4까지 총 4번을 반복하게 되는 것이다.

그래서 나의 출력 결과는 이렇게 떴다...
생소한 코딩 언어가 하나도 없는데도 이렇게 날 괴롭히다니
중첩 for문... 다시 봤다

파이썬에서 함수와 클래스는 정말 매우 중요하고... 중요한 개념이니
확실히 짚고 넘어가야 하는 게 중요한 것 같다!!!!!!! 복습하고 문제를 풀면서 더 자세히 공부하게 된 기분이라 이제 더 이상 까먹지는 않을 것 같다... :)

profile
누구보다 밝게 코딩하기♡

0개의 댓글