▶ Python
파이썬 부등식
Cyber0946
2020. 7. 7. 11:25
수량 사이의 대소 관계를 부등호를 사용해서 나태내는 식을 부등식이라고 한다.
다음의 문제를 통해 알아보자
문제: 60L의 물이 들어 있는 600L 용량의 욕조에 물을 더 받으려 한다. 분당 30L 씩 받을 수 있다고 할 때,
언제 가득차게 되는가 ??
이 문제는 다음의 부등식을 통해 해결가능하다.
- 60+30x <600
이걸 파이썬의 for문과 if문을 사용해서 구해보자.
import numpy as np
# numpy 모듈을 임포트 해준다.
x = range(0, 1000)
a = []
for i in x:
if 3*i + 60 < 600:
a.append(i)
else:
pass
print(max(a))
# 부등식을 만족하는 값들 중에 가장 큰 X값을 출력해 준다.
이제 for in과 if 문의 조합으로 한줄로 표현해 보자.
import numpy as np
x= range(1000)
a= [i for i in x if x*3 + 60 <6000]
#a는 리스트 x의 원소중 3x +60 <6000을 만족하는 원소만 뽑아서 만든 리스트이다.
print(max(a))
마지막으로 filter 와 lambda로 부등식을 풀어보자.
import numpy as np
x2 = np.arange(0,1000)
b = list(filter(lambda x: 3*x+60 < 600, x2))
#1)lambda 함수를 사용해서 3x+60 <600 을 만족하는지 확인한다.
#2)filter 함수를 적용해서 x2를 대상으로 부등식을 만족하는 원소만 필터링한다.
#3)해당 원소만 리스트 b로 만든다.
print(max(b))
#4)제일 큰 원소를 출력한다.
자 이제 이것을 활용해서 임의의 일차 부등식 문제와 정답을 출력하는 파이썬 프로그램을 만들어 보자.
import numpy as np
class Inequality:
def __init__(self):
self.a = 0
self.constant = 0
self.coefficient =0
self.symbol1 =""
self.symbol2 =""
print('x는 -10 부터 10까지의 정수이다. 다음 부등식을 만족하는 x를 구하시오.')
def question(self):
self.coefficient =0
self.constant = np.random.randint(low = -10, high =10, size = 2)
#2개의 난수를 발생시킨다.
while self.coefficient == 0:
self.coefficient = np.random.randint(low =-10, high =10)
self.a = np.random.randint(4, size=1)
#부등호를 표현하기 위한것 case
if np.random.randint(2) == 0:
self.symbol1= "+"
else :
self.symbol1= "-"
if self.a % 4 == 0:
self.symbol2 = '>'
elif self.a % 4 == 1:
self.symbol2 = '>='
elif self.a % 4 == 2:
self.symbol2 = '<='
elif self.a % 4 == 3:
self.symbol2 = '<'
print('{}x {} {} {} {}'.format(self.coefficient,self.symbol1,self.constant[0], self.symbol2,self.constant[1]))
def answer(self):
if self.symbol1 == '-':
self.constant *= -1
if self.a%4 == 0:
y= list(filter(lambda a: self.coefficient*a+self.constant[0] > self.constant[1],np.arange(-10,10,1)))
elif self.a%4 ==1:
y= list(filter(lambda a: self.coefficient*a+self.constant[0] >= self.constant[1],np.arange(-10,10,1)))
elif self.a%4 ==2:
y= list(filter(lambda a: self.coefficient*a+self.constant[0] <= self.constant[1],np.arange(-10,10,1)))
elif self.a%4 ==3:
y= list(filter(lambda a: self.coefficient*a+self.constant[0] < self.constant[1],np.arange(-10,10,1)))
print(y)
if __name__ == "__main__":
def print_menu():
print("1. 문제출제")
print("2. 종료")
menu = input("메뉴선택: ")
return int(menu)
def run():
while 1:
q1 = Inequality()
menu = print_menu()
if menu == 2:
break
elif menu == 1:
q1.question()
print("풀이를 완료하셨으면 y를 입력해 주세요")
check_ans = input("풀이완료여부: ")
if check_ans == 'y' or check_ans == 'Y':
q1.answer()
else:
print("잘못된 입력입니다. 다시 입력해주세요")
run()
run()
프로그램을 실행하면 다음과 같은 양식으로 출력되고 1 메뉴를 통해 문제를 생성하고 문제 풀이가 끝나면 y를 통해서 정답을 확인할 수 있는 방식의 프로그램이다.