파이썬 과제(심화 문법 사용)

hyo_d·2022년 9월 15일
0

1. 사칙연산 계산기 심화

요구조건

  • 클래스를 활용해 작성했던 계산기 코드를 활용해주세요
  • 기존처럼 사용자의 입력을 받고 출력하되, try / except를 활용해 사용자의 입력을 검증하는 코드를 추가해주세요
    • 두 번쨰 숫자에 0을 입력하고 나누기를 시도할 경우 “0으로 나눌 수 없습니다” 문구를 출력해주세요
    • 숫자가 아닌 다른 값을 입력했을 경우 “숫자만 입력 가능합니다” 라는 문구를 출력해 주세요

1) class를 선언하고, 변수 num1과 num2를 정수로 설정해준다. 이때 try/except 를 사용하여 변수에 입력된 값이 정수가 아닐 경우 "숫자만 입력 가능합니다"라는 문구를 출력한다.

class Calc(): # Calc라는 이름의 class 선언
    def set_number(self, num1, num2):
        try:
            self.num1 = int(num1)
            self.num2 = int(num2)
        except ValueError:
            print("숫자만 입력 가능합니다")

2) +, -, * 연산에 대한 메소드는 그대로 입력해주고, 0으로 나누면서 에러가 발생했을 때 처리하기 위해 divide 메소드에 try/except를 사용하였다.

    def plus(self):
        result = self.num1 + self.num2
        return result

    def minus(self):
        result = self.num1 - self.num2
        return result

    def multiple(self):
        result = self.num1 * self.num2
        return result    

    def divide(self):
        try:
            result = self.num1 / self.num2
            return result
            
        except ZeroDivisionError: # 0으로 나누면서 에러가 발생했을 때
            print("0으로 나눌 수 없습니다.")

3) 결과를 출력하기 위한 코드는 다음과 같다.

calc = Calc()

calc.set_number(20, 0)

print(calc.plus()) # 더한 값
print(calc.minus()) # 뺀 값
print(calc.multiple()) # 곱한 값
print(calc.divide()) # 나눈 값

✨ 완성된 전체 코드

class Calc(): # Calc라는 이름의 class 선언
    def set_number(self, num1, num2):
        try:
            self.num1 = int(num1)
            self.num2 = int(num2)
        except ValueError:
            print("숫자만 입력 가능합니다")

    def plus(self):
        result = self.num1 + self.num2
        return result

    def minus(self):
        result = self.num1 - self.num2
        return result

    def multiple(self):
        result = self.num1 * self.num2
        return result    

    def divide(self):
        try:
            result = self.num1 / self.num2
            return result
            
        except ZeroDivisionError: # 0으로 나누면서 에러가 발생했을 때
            print("0으로 나눌 수 없습니다.")

calc = Calc()

calc.set_number(20, 0)

print(calc.plus()) # 더한 값
print(calc.minus()) # 뺀 값
print(calc.multiple()) # 곱한 값
print(calc.divide()) # 나눈 값

2. 리스트 필터 및 정렬

요구조건

  • filter 혹은 리스트 축약식을 사용해 코드를 작성해주세요
  • 제공 된 사용자들 중 나이가 20살 미만인 사람들은 제외해주세요
  • 사용자들을 나이 순으로 정렬해주세요

1) 조금 더 보기 좋게 출력하기 위해 pprint를 import를 해주고, people이라는 리스트를 생성해주었다.

from pprint import pprint

people = [
    ("Blake Howell", "Jamaica", 18, "aw@jul.bw"),
    ("Peter Bowen", "Burundi", 30, "vinaf@rilkov.il"),
    ("Winnie Hall", "Palestinian Territories", 22, "moci@pacivhe.net"),
    ("Alfred Schwartz", "Syria", 29, "ic@tolseuc.pr"),
    ("Carrie Palmer", "Mauritius", 28, "fenlofi@tor.aq"),
    ("Rose Tyler", "Martinique", 17, "as@forebjab.et"),
    ("Katharine Little", "Anguilla", 29, "am@kifez.et"),
    ("Brent Peterson", "Svalbard & Jan Mayen", 22, "le@wekciga.lr"),
    ("Lydia Thornton", "Puerto Rico", 19, "lefvoru@itbewuk.at"),
    ("Richard Newton", "Pitcairn Islands", 17, "da@lasowiwa.su"),
    ("Eric Townsend", "Svalbard & Jan Mayen", 22, "jijer@cipzo.gp"),
    ("Trevor Hines", "Dominican Republic", 15, "ev@hivew.tm"),
    ("Inez Little", "Namibia", 26, "meewi@mirha.ye"),
    ("Lloyd Aguilar", "Swaziland", 16, "oza@emneme.bb"),
    ("Erik Lane", "Turkey", 30, "efumazza@va.hn"),
]

2) 나이가 20살 미만인 사람들은 제외하기 위해 filter를 사용하는 방법, 축약식을 사용하는 방법 두가지로 코드를 작성했다.

# 나이가 20살 미만인 사람들은 제외(Filter 사용)
person = list(filter(lambda x: x[2] >= 20, people))

# 나이가 20살 미만인 사람들은 제외(축약식 사용)
person = [x for x in people if x[2] >= 20]

3) 마지막으로 sort를 사용하여 사용자들을 나이 순으로 정렬하였다. 사용자의 나이는 people 리시트의 2번째 요소이므로 x[2]를 기준으로 정렬해준다.

# 사용자들을 나이 순으로 정렬
person.sort(key=lambda x: x[2])
pprint(person1)

✨ 완성된 전체 코드

from pprint import pprint

people = [
    ("Blake Howell", "Jamaica", 18, "aw@jul.bw"),
    ("Peter Bowen", "Burundi", 30, "vinaf@rilkov.il"),
    ("Winnie Hall", "Palestinian Territories", 22, "moci@pacivhe.net"),
    ("Alfred Schwartz", "Syria", 29, "ic@tolseuc.pr"),
    ("Carrie Palmer", "Mauritius", 28, "fenlofi@tor.aq"),
    ("Rose Tyler", "Martinique", 17, "as@forebjab.et"),
    ("Katharine Little", "Anguilla", 29, "am@kifez.et"),
    ("Brent Peterson", "Svalbard & Jan Mayen", 22, "le@wekciga.lr"),
    ("Lydia Thornton", "Puerto Rico", 19, "lefvoru@itbewuk.at"),
    ("Richard Newton", "Pitcairn Islands", 17, "da@lasowiwa.su"),
    ("Eric Townsend", "Svalbard & Jan Mayen", 22, "jijer@cipzo.gp"),
    ("Trevor Hines", "Dominican Republic", 15, "ev@hivew.tm"),
    ("Inez Little", "Namibia", 26, "meewi@mirha.ye"),
    ("Lloyd Aguilar", "Swaziland", 16, "oza@emneme.bb"),
    ("Erik Lane", "Turkey", 30, "efumazza@va.hn"),
]

# 나이가 20살 미만인 사람들은 제외(Filter 사용)
person1 = list(filter(lambda x: x[2] >= 20, people))

# 나이가 20살 미만인 사람들은 제외(축약식 사용)
person2 = [x for x in people if x[2] >= 20]

# 사용자들을 나이 순으로 정렬
person2.sort(key=lambda x: x[2])
pprint(person2)
profile
햇병아리

0개의 댓글