Traceback ( most recent call last) :
File "main.py", line 4, in <module>
greeting("Donald Trump")
File "main.py", line 2, in greeting
print("Hello", yourname + "!")
NameError: name'yourname' is not defined # 오류
def add_all(numbers):
result = 0
for number in numbers #for문 끝에 :가 빠졌다
result += number
reutrn result
def add_all(numbers):
result = 0
for number in numbers:
result += numbre #number 오타
reutrn result
add_all([1,2,3])
def usd_to_krw(price):
price_in_krw = price * 1100
reutrn price_in_krw + " won" # str(price_in_krw) 변경
usd_to_krw(4.99)
def first_character(string):
reutrn string[0] # if len(string) > 0: 추가
first_character("")
def average(numbers):
return sum(numbers) / len(numbers) # if len(numbers)>0: 추가
average([])
def average(numbers):
try:
return sum(numbers) / len(numbers)
except ZeroDivisionError:
print("No numbers!")
import unittest
class IsPalindromeTests(unittest.TestCase):
def test_level(self):
self.assertTrue(is_palindrome("level"))
def test_level(self):
self.assertFals(is_palindrome("lever"))
unittest.main()
class calculator():
def clear():
...
def press_digit(digit):
...
def press_plus():
...
class calculatorTest(unittest.TestCase):
def test_press_one_digit(self):
...
def test_press_multiple_plus(self):
...
def test_press_clear_after_writing(self):
...
계산기 자체를 구현하는 calculator.py와 구현한 계산기를 테스트하는 코드인 calculator_test.py 를 수정하여라
calculator.py
Calculator 클래스는 계산기 버튼의 종류에 따라 4가지의 메소드를 가집니다.
press_digit(): 숫자 버튼을 눌렀을 때의 동작을 구현합니다. 0부터 9까지의 숫자를 인자로 받을 수 있으며
assert() 문에 의해 이 외의 인자가 들어온 경우 에러가 발생합니다.
press_operator(): 연산자 버튼을 눌렀을 때의 동작을 구현합니다. +, -, * , / 중 하나의 기호를 인자로 받을 수 있습니다. 이외의 인자가 들어온 경우 에러가 발생합니다.
press_equal(): = 버튼을 눌렀을 때의 동작을 구현합니다.
press_clear(): 클리어, 즉 계산기의 C 혹은 AC 버튼을 눌렀을 때의 동작을 구현합니다.calculator_test.py
Calculator의 동작을 테스트하는 코드입니다. 파이썬의 unittest 모듈을 사용하며, 각 테스트 함수 별로 설명이 적혀 있습니다. 설명을 읽고, 그대로 구현하면 됩니다.
# calculator.py
def operate(n1, n2, operator):
if operator == '+':
return n1 + n2
if operator == '-':
return n1 - n2
if operator == '*':
return n1 * n2
if operator == '/':
return n1 / n2
class Calculator:
operators = ['+', '-', '*', '/']
def __init__(self):
self.current_number = 0
self.current_operator = None
self.memory = None
self.last_input = None
def press_digit(self, digit):
assert(type(digit) is int)
assert(0 <= digit <= 9)
if self.last_input is None or type(self.last_input) is int:
self.current_number = self.current_number * 10 + digit
elif type(self.last_input) is str:
self.memory = self.current_number
self.current_number = digit
self.last_input = digit
def press_operator(self, operator):
assert(operator in self.operators)
if self.memory is not None:
self.current_number = operate(self.memory, self.current_number, self.current_operator)
self.current_operator = operator
self.last_input = operator
def press_equal(self):
if self.memory is not None:
self.current_number = operate(self.memory, self.current_number, self.current_operator)
self.last_input = None
def press_clear(self):
self.current_number = 0
self.current_operator = None
self.memory = None
self.last_input = None
# calculator_test.py
import unittest
from calculator import Calculator
class AdditionTests(unittest.TestCase):
# "3 + 8 =" 을 입력하고 결과를 확인합니다.
def test_add_two_numbers(self):
calculator = Calculator()
calculator.press_digit(3)
calculator.press_operator('+')
calculator.press_digit(8)
calculator.press_equal()
self.assertEqual(calculator.current_number, 3 + 8)
# "13 + 24 + 37 =" 을 입력하고 결과를 확인합니다.
# 위의 코드를 참고해 테스트 코드를 완성하세요.
def test_add_two_2_digit_numbers(self):
calculator = Calculator()
calculator.press_digit(1)
calculator.press_digit(3)
calculator.press_operator('+')
calculator.press_digit(2)
calculator.press_digit(4)
calculator.press_operator('+')
calculator.press_digit(3)
calculator.press_digit(7)
calculator.press_equal()
self.assertEqual(calculator.current_number, 13 + 24 + 37)
class SubtractionTests(unittest.TestCase):
# "99 - 37 =" 을 입력하고 결과를 확인합니다.
# 위의 코드를 참고해 테스트 코드를 완성하세요.
def test_subtract_two_numbers(self):
calculator = Calculator()
calculator.press_digit(9)
calculator.press_digit(9)
calculator.press_operator('-')
calculator.press_digit(3)
calculator.press_digit(7)
calculator.press_equal()
self.assertEqual(calculator.current_number, 99 - 37)
# "37 - 24 + 17 =" 을 입력하고 결과를 확인합니다.
# 위의 코드를 참고해 테스트 코드를 완성하세요.
def test_subtract_three_numbers(self):
calculator = Calculator()
calculator.press_digit(3)
calculator.press_digit(7)
calculator.press_operator('-')
calculator.press_digit(2)
calculator.press_digit(4)
calculator.press_operator('+')
calculator.press_digit(1)
calculator.press_digit(7)
calculator.press_equal()
self.assertEqual(calculator.current_number, 37 - 24 + 17)
class ClearTests(unittest.TestCase):
# "9 C 8 + 7 =" 을 입력하고 결과를 확인합니다. (C는 clear)
def test_clear_between_numbers(self):
calculator = Calculator()
calculator.press_digit(9)
calculator.press_clear()
calculator.press_digit(8)
calculator.press_operator('+')
calculator.press_digit(7)
calculator.press_equal()
self.assertEqual(calculator.current_number, 8 + 7)
# "9 + 8 = C 1 + 1 =" 을 입력하고 결과를 확인합니다. (C는 clear)
# 위의 코드를 참고해 테스트 코드를 완성하세요.
def test_clear_between_operations(self):
calculator = Calculator()
calculator.press_digit(9)
calculator.press_operator('+')
calculator.press_digit(8)
calculator.press_equal()
calculator.press_clear()
calculator.press_digit(1)
calculator.press_operator('+')
calculator.press_digit(1)
calculator.press_equal()
self.assertEqual(calculator.current_number, 1 + 1)
unittest.main()