Post

[Python] 함수 사용자입력 반복문 클래스

이번에는 함수랑 클래스부분 맛만 보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 커피 자판기 
# 남은 커피가 있으면 판매 -> 판매 -> 없으면 안 판매

coffee =10
while True:
  money =int(input("돈을 넣어 주세요 : "))
  if money == 300:
    print("커피를 드립니다.")
    coffee -=1
  elif money >300:
    print("거스름 돈은 %d원입니다." %(money-300))
    coffee -=1
  else:
    print("금액이 부족합니다.")
  
  if coffee ==0:
    print("매진되었습니다")
    break

반복문과 조건문으로 만들었습니다. 이렇게하면 입력한 값이 300이 초과할 경우 커피를 하나씩 빼고 출력문을 실행한 뒤 다 떨어지면 break로 반복문을 빠져나오게 했습니다!

for문

파이썬의 직관적인 특징을 잘 보여주는 것이 for문입니다. while문과 비슷하지만 for문은 구조를 살펴보기에 좋습니다!

1
2
3
list = [1,2,3,4,5]
for i in list:
  print(i)

자바에서는 int i 설정하고 범위와 증가형을 다 해주어야 했지만 파이썬에서는 저렇게 i in list를 쓰면 i는 list의 원소값을 처음부터 하나씩 끝까지 가져올 때까지 반복합니다! 정말 간단하죠?

1
2
3
4
a = [(1,2),(3,4),(5,6)]

for x in a:
  print(x)

이렇게 원소값을 하나의 튜플로서 해줘도 반복해줍니다. 따라서 x에는 (1,2) , (3,4), (5,6) 이 세트로 하나씩 대입이 됩니다!

1
2
3
4
a = [(1,2),(3,4),(5,6)]

for x,y in a:
  print(x+y)

이렇게 x,y로 a에서 저 튜플을 한개씩으로 보는게 아니라 각각의 값을 추출할 수 있습니다. 따라서 출력문은 3,7,11이 나옵니다!

1
2
3
4
5
6
7
score = [90,70,50,40,80]
i=0
for x in score:
  i +=1
  if x<60:continue

  print("%d번 합격" %i)

score의 원소를 하나씩 x에 담은 후 반복을 할때마다 i를 1씩 증가시킵니다. 그리고 x가 60점 미만이라면 continue로 그 다음 반복을 실행합니다!

따라서 60점 이상인 분들만 출력이 되겠죠?

1
2
3
4
5
6
7
8
9
10
11
12
add =0

for i in range(1,11,2):
  add+=i

print(add)

add=0
for i in range(11,1,-2):
  add+=i

print(add)

# range함수와 for 문

# range(start, stop, step)start를 생략하면 0부터, step을 생략하면 1씩 증가합니다. 이렇게 1부터 11미만까지(10까지) 2씩 증가하거나 -2씩 증가, 즉 2씩 감소하게해서 i에 넣었군요!

1
2
3
4
5
6
# for 문과 range를 이용해서 구구단을

for i in range(2,10):
  print(" ")
  for j in range(1,10):
    print(i*j,end="")

range문으로 구구단을 만들었습니다! 자바보다 훨씬 편하네요~

List Comprehension

for문을 사용하면 여러 줄을 작성할 것을 한번에 할 수 있습니다.

1
2
3
a = [1,2,3,4]
result = [n*3 for n in a if n%2 ==0]
print(result)

result 부분에 보시면 a라는 리스트에서 하나씩 n으로 집어넣습니다. 그리고 그 n에 3을 곱한것을 result에 넣어주죠. 단 조건문도 넣을 수 있어서 저는 짝수를 설정했습니다. 조건은 더 n이 최종적으로 연산이 되고 검사를 하는건가 봅니다!

1
2
3
4
5
6
7
8
i =0


while i<5:
  i +=1
  for i in range(1,i+1):
    print("*",end ="")
  print("")

항상 코딩문제 나오면 등장하는 기본문제.. *출력입니다. 하나씩 증가하면서 *을 출력합니다!

함수란?

과일 -> 믹서기 -> 과일주스 바나나 -> 믹서기 -> 바나나주스 사과 -> 믹서기 -> 사과주스

왜! 항상 반복되는 코드를 매번 작성하는 것보다 그것들을 묶어서 함수로 만들면 쉽고 편하게 재활용 할 수 있습니다!

문법은

기본형

def 함수명(변수): 수행 수행 수행 return 값

def add(d,b): return a+b

이 함수의 이름은 add이고 입력으로 2개의 값을 받아서 더해주는 함수입니다. 함수에는 매개변수가 있을 수도, 없을 수도있습니다. 리턴값도 마찬가지로요.. 그러면 함수의 종류에는 4개가 있겠네요!

1
2
3
4
5
6
7
8
9
#입력이 몇개가 될지 모를 때!!

def add_many(*args):
  result =0
  for i in args:
    result = result +i
  return result

add_many(1,2,3,4,5)

입력이 몇개가 될지 모를때는 매개변수에 *를 앞에 붙여줍니다. 그러면 사용을 할때 인자의 개수를 여러개를 넣을 수 있습니다.

1
2
3
4
5
6
7
8
#함수의 결과값은 언제나 함수이다.

def add_mul(a,b):
  return a+b, a*b 
  return a*b

result =add_mul(3,4)
print(result)

함수의 결과값은 언제나 한개입니다. 그런데 왜 첫번째 return엔 식이 2개고 그 밑엔 2번째 return이 있을까요? 먼저 return에 식이 2개면 두 결과값이 (7,12)로 하나의 튜플값으로 나오게 됩니다. 그리고 함수는 리턴값을 만나면 break처럼 함수를 종료하기 때문에 첫번째 그 밑으로의 return은 의미가 없죠.. 만약 조건문이 따로없다면..ㅎ

1
2
3
4
result1, result2 = add_mul(3,4)

print(result1)
print(result2)

같은 함수에 저렇게 2개의 변수로 받으면 한쌍으로 나온 튜플값이 아니라 그 안에 값 1개씩을 순서대로 가져갑니다!

1
2
3
4
5
6
7
8
#함수에서 선언한 변수의 효력 범위...

a =1
def vartest(a):
  a =a+1

vartest(a)
print(a)

매개변수는 그 함수에만 쓰이는 다른 녀석입니다. 자바에서도 같은 원리죠?

1
2
3
4
5
6
a=1
def vartest():
  global a
  a = a+1
  return a
print(vartest())

따라서 저렇게 global을 앞에붙여주면 마치 자바에서 this. 를 한것처럼 사용할 수 있습니다.

lambda

1
2
3
add = lambda a,b : a+b
r = add(3,4)
print(r)

람다는 함수를 더 간단히 만든것입니다. add라는 함수를 만들 때 람다를 쓰고 매개변수와 변수를 이용한 식만 적으면 끝.. 엄청 간단하네요ㅎㅎ

사용자 입력

사용자 입력은 input()메서드를 사용합니다. 그리고 이 input()메서드는 str, 즉 문자열 값만 반환하기 때문에 숫자를 반환하려면 int(input())으로 해주어야 합니다!

1
2
3
4
5
6
7
8
9
def num(a):
  
  if a%2==1:
   print("홀수입니다.")

  else:
   print('짝수입니다')  

num(int(input()))

값을 넣으면 홀수인지 짝수인지 판별해주는 함수를 만들었습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
def add_mul(choice, *args):
  if choice =="add":
    result =0
    for i in args:
      result +=i
    
  elif choice=="mul":
    result=1
    for i in args:
      result *=i
  return result

print(add_mul('mul',1,2,3,5))

매개변수를 2종류로 두었습니다. choice에 들어온 값을 판단하여 다른 로직을 수행하도록 하였습니다!

파일입출력

자바에서와 같이 파일입출력인데 파이썬에서는 상상이상으로 간단합니다.

1
2
3
4
# 파일 생성

f = open("파일이름.txt",'w')
f.close()

이게 끝.. ㅋㅋㅋ 방금 하나 생성했습니다.

1
2
3
4
5
f = open("새파일.txt", 'w')
for i in range(1,11):
  data = "%d번째 줄입니다.\n" %i
  f.write(data)
f.close()

또 write()함수로 그 안에 내용을 작성할 수 있습니다. 그리고 항상 파일을 열면 close()로 닫는것까지 해주어야 합니다.

1
2
3
4
5
6
7
8
9
f = open("새파일.txt", 'r')

while True:
  line = f.readline()
  if not line:
    break
  print(line)

f.close()

‘r’은 있는 파일을 읽을 때 사용합니다. line이라는 변수를 만들고 한 라인씩 담아옵니다. 그리고 더이상 line이 없으면 break로 빠져나옵니다.

1
2
3
4
5
6
7
#read()

f = open("새파일.txt",'r')
lines = f.read()

print(lines)
f.close()

여기는 그냥 read()를 썼네요. read()는 전체 내용을 하나의 문자열로 처리해줍니다!

1
2
3
4
5
6
f = open('새파일.txt' ,'a')
for i in range(11,21):
  data = " %d번째 줄입니다.\n" %i
  f.write(data)

f.close()

‘a’는 수정입니다. 원래 있던 데이터에 추가를 합니다 아마 append의 a가 아닐까..함수는 똑같이 write()를 씁니다.

1
2
3
with open("새파일.txt", 'w') as f:

  f.write("No pain No gain")

with는 자동으로 닫아줍니다. 더 간단하게 파일입출력을 할 수가 있죠

클래스살짝!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Calculator:
  def __init__(self):  #생성자
    self.result=0
  

  def add(self,num):
    self.result +=num
    return self.result

cal1 = Calculator()

print(cal1.add(3))
print(cal1.add(3))
print(cal1.add(3))

Calculator라는 클래스를 만들었는데요 def로 __init__(self)를 만들었습니다. 생성자인데요 자세한 설명은 다음에 하겠습니다. ㅎㅎ 로직은 이 클래스가 갖고있는 함수중 add()를 사용하여 매개변수에 들어간 인자를 num에 넣어줍니다. 그리고 self의 result에 넣어준답니다!

이번시간엔 여기까지 하겠습니다!

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.