프로그래밍/파이썬🐍

(6)점프투파이썬_[4장 함수]

개발자 덕구🐾 2022. 1. 8. 19:01
728x90

4-1 함수

def는 함수를 만들때 사용하는 예약어이다. 

 

입력값이 몇 개가 될지 모를 때는?

입력 인수에 '*'를 붙인다. 

 

def 함수명(*입력변수) :

    수행할 문장

 

인수를 주는 대로 다 더하는 함수 

 

def sum_many(*args)  :
    sum =0
    for i in args:
        sum += i
    return sum
    
a =sum_many(3,4,3,5)
print(a)

 

입력 변수명 앞에 *을 붙이면 입력값들을 전부 모아서 튜플로 만들어준다!

 

 

함수의 결과값은 언제나 하나이다.

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

a = sum_many(3,4)
print(a)

 

return 으로 a+b, a*b를 하더라도 이들이 튜플로 묶여 반환된다. 

 

만약 각각 값을 가지고 싶다면

 

 

sum, mul = sum_many(3,4)

 

입력인수의 초기값

 

초기화시키고 싶은 입력변수들을 항상 뒤쪽에 위치시켜야한다. 

def say_intro(name,old,man=True) :
    print('이름은 %s 입니다.' %name)
    print('나이는 %d 입니다.' %old)
    if man :
        print('남성입니다.')
    else: print ('여성입니다')

세번째 인수 man에 아무것도 입력되지않는다면  

기본적으로 True가된다. 

 

 

함수 안에서 선언된 변수의 효력범위

 

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

출력은 어떻게 될까?

 

2가 나올것 같지만 1이 나온다. 

함수안에서 +1 이 되어서 함수내부에서는 2가 된다. 그러나 함수를 나오면서 그 효력은 사라지므로 

다시 1이 출력된다. 

 

 

함수안에서 연산한 결과로 함수 밖의 변수를 변경하는 방법은?

1. return 이용

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

a = vartest(a)
print(a)

 

2. global 이용

 

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

global a  는 함수 밖 a를 직접 사용하겠다는 의미를 나타낸다.

 

 

그러나 함수는 독립적인 것이 좋으므로

가급적 return을 사용하는 것을 권한다 .

 

 

4-2 사용자 입력과 출력

input()은 입력되는 모든 것을 문자열로 취급한다. 

 

입력을 받을 때 안내문구가 필요하다면 input("이 자리!") 에 넣어주면 프롬프트를 띄운다 .

 

print에 대하여

 

1. 큰 따옴표(") 또는 작은따옴표(') 로 둘러싸인 문자열은 + 연산과 동일하다.

 

print('python' 'is' 'cool')
print("python"+ "is" +"cool")

2. 문자열 띄어쓰기는 콤마(,)로 한다.

 

print('python','is', 'cool')

 

3. 한 줄에 결과값을 출력하려면 입력인수 end를 이용한다.  

 

for i in range(5):
    print(i, end =' ')

 

 

 

4-3 파일 읽고 쓰기

 

 

파일객체 = open(파일 이름, 파일 열기 모드)

 

파일 열기 모드에는 'w', 'r', 'a' 가 있다. 

'w'는 읽기모드, 'r'은 쓰기모드이다. 쓰기모드로 열면 해당 파일이 있었다면 원래 내용을 사라지고

원래 없었다면 파일 이름으로 새롭게 생성된다. 

'a'는 추가모드이다. 

 

f = open("newfile.txt",'w')
f.close()

이와 같이 코드를 작성하고 실행하면 

 

이처럼 지정한 이름으로 txt파일이 생성됨을 확인할 수 있다. 

 

 

 

f = open("newfile.txt",'w')
for i in range(1,11):
    data = '%d 번째 줄입니다.\n' %i
    f.write(data)
f.close()

 

 

이와 같이 잘 저장되었음을 알 수 있다. 

 

 

외부에 저장된 파일을 읽는 여러 방법

1. readline()

 

f = open("newfile.txt",'r')

while True : 
    line = f.readline()
    if not line : break # 다 읽었다면 
    print(line)

f.close()

위와 같은 코드를 이용해 출력할 수 있다. 

 

2. readlines()

 

파일의 모든 라인을 읽어서 각각의 줄을 요소로 갖는 리스트로 반환한다.

 

3. read()

 

파일 내용 전체를 문자열로 반환한다. 

 

파일에 새로운 내용 추가하기

추가모드 'a'

> 원래 있던 값을 유지하면서 새로운 값을 추가해야 할 경우

 

f = open("newfile.txt",'a')

for i in range(11,20):
    data = '%d 번째 줄입니다.\n' %i
    f.write(data)

f.close()

 

 

 

with 문과 함께라면

open 과 close를 하는 것이 하는 것이 귀찮다면 한번에 처리 할 수 있는 방법이 있다. 

 

with open("newfile.txt",'r') as f:
    line= f.readline()
    print(line)

close를 작성하지않아도 된다. 

with 을 벗어나면 자동으로 close 된다. 

 

 

4장 연습문제

Q1. 

 

def fib(n):
    if n==0 : return 0
    if n==1 : return 1
    return fib(n-1) + fib(n-2)

 

 

Q2. 

 

sp= open('sample.txt','r')
r= open('result.txt','w') 
lines = sp.readlines()

sum =0
for i in lines :
    sum += int(i)

average = sum / len(lines)
r.write(str(average))

sp.close()  
r.close()

 

숫자값은 write으로 바로 쓸 수 없음 str()을 이용해 문자열로 변경 후 적어주기

 

 

 

 

 

반응형