본문 바로가기
Study/CODE 3기 [Jump to python]

[4조 불사조] Python Study (2)

by jinni45 (임은진) 2024. 3. 18.

팀원: 김승혁, 류건희, 박지현, 이예주, 임은진, 조준혁
2주차 학습내용은 이전 글에 이어서 작성했습니다. (링크참고)
2024.03.10 - [Study/CODE 3기 [Jump to python]] - [4조 불사조] Python Study

 

[4조 불사조] Python Study

01장 파이썬이란 무엇인가? 담당자:임은진 01-1 파이썬이란? 1990년 암스테르담의 귀도반로섬이 개발한 인터프리터언어 *인터프리터언어: 소스코드를 한 줄씩 해석한 후 그때그때 실행해 결과를

khu-code.tistory.com

 

2주차 Python Study 퀴즈

2주차퀴즈_불4조_txt.ipynb
0.01MB

조준혁

함수란 무엇인가?

입력값을 가지고 어떤 일을 수행한 후 그 결과물을 내어 놓는 것이 바로 함수가 하는 일이라고 생각할 수 있다.

우리가 중고등학교에서 배운 함수와 같이 중간에서 입력값에 따라 결과값을 나타내는 하나의 도구이다.

밑은 함수를 시각화하여 단순하게 보여주는 책의 예시이다.

과일이라는 입력을 주스라는 출력으로 바꿔주는 역할을 하는 믹서기가 함수라고 생각할 수 있다.

 

함수를 사용하는 이유

반복적으로 사용되는 가치 있는 부분을 하나의 덩어리로 묶어서 하나의 함수로 약속함으로써 작성한다.

기능 단위의 함수로 분리해 놓으면 프로그램을 볼때 눈으로 쉽게 볼 수 있고 약속된 기호로 이루어져 있기 때문

 

함수 정의하기

def 함수_이름_ (매개 변수) :
      수행할_문장1
      수행할_문장2
      ....

 

*매개변수는 이 함수에  입력으로 전달되는 값을 받는 변수로 함수내에서 여러 인수로 들어올 수 있다.

 

def add(a,b):
	return a+b
    #a,b에 두개의 입력값을 받으며 출력값은 (리턴 값)은 입력값을 더한 것이 저장됨.

def 로 함수를 정의하고  return 값으로 값을 저장시키는 것!!
return 명령어로 저장하고 안 하고 차이가 분명하게 나타나기에 유의해서 사용하자.
 

매개변수와 인수

매개변수는 함수에 입력으로 전달된 값을 받는 변수, 인수는 함수를 호출할 때 전달하는 입력값을 의미한다.

def add(a,b):  #a b는 입력값을 받는 매개변수
	return a+b 

print(add(3,4))   # 3,4는 인수로 입력값으로 들어오는 것

>>> 7

 
파이썬에서 기본적으로 함수를 통해 리턴값을 나오게하는 구조, 즉 함수의 역할을 제대로 보여준다고 생각한다.

일반적인 함수

지금까지 설명한 함수 즉 입력값이 들어가면 리턴값이 나오는 함수를 정의하는 것이 일반적인 함수이다.

def mul(a,b):
	return a*b

c=mul(3,9) #리턴값으로 정의가 되기에 변수 c로 저장할 수 있음
print(c)

>>>>>27

입력값이 없는 함수

def hi():
	return "hi"
    
a= hi() 
print(hi())
>>>>hi

a라는 변수에 입력값이 없는 함수가 저장되면 그저 그냥 문자열 "hi"가 대입되어 출력된다.

리턴값이 없는 함수.

def mul(a,b):
	print(a*b) #호출되어도 저장되는 값이 없기에 그냥 값이 출력되는 방향으로 사용된다.

리턴값이 없는 함수와 있는 함수의 구분을 확실하게 해야 한다. 함수 내에서만 효력이 있는 매개변수일 수 있고 밖에서도 효력이 있는 변수로서 저장되어 코딩때 사용되는지. 구분을 잘 해보자.
이예주
p. 163~167(책 기준)
함수의 리턴값은 언제나 하나이다.
 

리턴값을 2개로 적어도 결과는 튜플값으로 result는 하나의 값만 출력한다.
 
그러나 return값을
return a+b
return a*b
라고 쓰면 두번째 줄은 실행되지 않는다.

결과값이 없는 return의 활용(return이 실행되어서 밖으로 나옴)

 
매개변수에 초깃값 미리 설정하기
 

man=True로 초깃값 설정되어서 지정하지 않아도 무조건 "남자입니다"출력

 

그러나 false라고 하면 "여자입니다" 출력

***초기화하고 싶은 매개변수는 항상 뒤쪽에 놓기!!
 
류건희

1)함수 안에서 선언한 변수의 효력 범위

함수 안에서 사용할 변수의 이름을 함수 밖에서도 동일하게 사용한다면 어떻게 될까?

a 라는 변수를 생성하고 1을 대입했다. 그리고 입력으로 들어온 값에 1을 더해주고 리턴하지 않는 vartest 함수를 선언했다. 그리고 vartest 함수에 a를 입력해주고 출력했다.

위와 같이 함수 안에서 사용하는 매개변수는 함수 안에서만 사용하는 변수이기 때문에 2가 아닌 1이 출력된다.
def vartest(a) 에서 입력값을 전달받는 매개변수 a는 함수 안에서만 사용할 뿐, 함수 밖의 변수 a와는 상관없다.
즉, 함수 안에서 사용하는 매개변수는 함수 밖의 변수 이름과는 전혀 상관없다.

vartest(3)을 수행하면 vartest 함수 안에서 a 는 4가 되지만, 함수를 호출하고 난 후 print(a) 문장은 오류가 발생한다.

위 내용과 동일하게 함수 내부가 아닌, print(a)에서 사용한 a변수는 어디에서도 선언되지 않았기 때문에 위 함수를 실행하면 오류가 발생한다.
 

2)함수 안에서 함수 밖의 변수를 변경하는 방법

1. return 사용하기

위와 같이 return을 사용하면 함수 밖의 변수를 변경할 수 있다.

첫번째 방법은 return를 사용하는 것이다. vartest 함수는 입력으로 들어온 값에 1을 더한 값을 리턴하도록 변경했다.
a = vartest(a)라고 작성하면 a에는 vartest 함수의 리턴값이 대입된다.
하지만 여기에서도 vartest 함수 안의 a 매개변수는 함수 밖의 a 와는 다른 것 이다.
2. global 명령어 사용하기

위와 같이 global 명령어를 사용하여 함수 밖의 변수를 변경할 수 있다.

두번째 방법은 global 명령어를 사용하는 방법이다. 
global a 문장은 함수 안에서 함수 밖의 a 변수를 직접 사용하겠다는 뜻이다. 즉 global 명령어는 외부 변수에 종속적인 함수다.
하지만 프로그래밍을 할 땐 함수가 독립적으로 존재하는 것이 좋기 때문에 global 명령어를 사용하지 않는 것이 좋다.
 

3)lambda 예약어

lambda 는 함수를 생성할 때 사용하는 예약어로, def와 동일한 역할을 한다.
보통 함수를 한 줄로 간결
하게 만들 때 사용하고, def를 사용해야 할 정도로 복잡하지 않거나 def를 사용할 수 없는 곳에 주로 쓴다.

lambda로 만든 함수는 return 명령어가 없어도 표현식의 결괏값을 리턴한다.

위와 같이 lambda 를 이용하면 함수를 한 줄로 간결하게 정리할 수 있다.
 

4)사용자 입출력

우리가 사용하는 대부분의 프로그램은 사용자의 입력에 따라 그에 맞는 출력을 내보낸다.
사용자 입력 활용하기
1. input 사용하기

input은 사용자가 키보드로 입력한 모든 것을 문자열로 저장한다.
2.프롬프트를 띄워 사용자 입력 받기
안내문구 또는 질문을 보여 주고 싶을 때는 input()의 괄호안에 문구를 입력하여 프롬프트를 띄워 주면 된다.

input은 입력되는 것을 문자열로 취급하기 때문에 number는 숫자가 아닌 문자열이라는 것에 주의하다.

 

 김승혁

print 자세히 알기

데이터를 출력하는 print 문의사용 예는 다음과 같다.

 

1) 큰따옴표로 둘러싸인 문자열은 + 연산과 동일하다

 

따옴표로 둘러싸인 문자열을 연속해서 쓴 것은 +연산을 한 것과 같다.
 

 

2) 문자열 띄어쓰기는 쉼표로 한다

쉼표를 사용하여 문자열을 띄어 쓸 수 있다.

 

 

3) 한 줄에 결괏값 출력하기

end 매개변수의 초깃값은 줄바꿈 (\n) 문자이다.

한 줄에 결괏값을 계속 이어서 출력하려면 매개변수 end 를 사용해 끝 문자를 지정해야 한다.

 

 

04‑3 파일 읽고 쓰기

파일을 새로 만든 다음 프로그램이 만든결괏값을 새 파일에 적어 본다. 
또 파일에 적은 내용을 읽고 새로운 내용을 추가하는 방법도 알아본다

 

1) 파일 생성하기

코드를 IDLE 에디터로 작성하여 실행하면 새로운 파일이 생성된다.

파일을 생성하기위해 파이썬 내장 함수 open 을 사용했다. open 함수는 다음과 같이
‘파일 이름’ 과 ‘파일 열기 모드’ 를 입력값으로 받고 결괏값으로 파일 객체를 리턴한다.
 

파일 모드 열기의 종류

디렉터리에 파일이 없는 상태에서 ‘새파일.txt’ 파일을쓰기 모드인’w’ 로
열었기 때문에‘새파일.txt’ 라는 이름의 새로운 파일이 현재 디렉터리에 생성되었다.
 

f.close() 는 열려 있는 파일 객체를 닫아 주는 역할을 한다.

만약 ‘새파일.txt’ 파일을 C:/doit 디렉터리에 생성하고 싶다면 다음과 같이 작성해야 한다.
 
 
 

2) 파일을 쓰기 모드로 열어 내용 쓰기

문자열 데이터를 파일에 직접 써 보도록 하자

둘은 data 를 출력하는 방법이  다르다. 첫 번째는 모니터 화면 대신 파일에 데이터를 적는방법, 두 번째는
모니터 화면에 데이터를 출력하는 방법이다. 차이점은 print 함수 대신 파일 객체 f 의 write 함수를 사용한 것 말고는 없다
 
명령 프롬프트 창에서 첫 번째 예제를 실행하면

이렇게 나온다.

 

3) 파일을 읽는 여러 가지 방법

 

readline 함수 이용하기

위는 ‘새파일.txt’ 파일을 읽기 모드로 연 후 readline() 을 사용해서 파일의 첫 번째 줄을 읽어 출력하는 
제이다. 위 프로그램을 실행했을 때 새파일.txt 파일의 가장 첫 번째 줄이 화면에 출력될 것이다.

모든 줄을 읽어 화면에 출력하고 싶다면 다음과 같이 작성하면 된다.

while True: 무한 루프 안에서 f.readline()을 사용해 파일을 계속 한 줄씩 읽어 들인다. 만약 더
이상 읽을 줄이 없으면 break 를 수행한다.
 

사용자의 입력을 받아 그 내용을 출력하는 경우

파일을 읽어서 출력하는 예제와 비교해 보면 입력을 받는 방식만 다르다는 것을 바로 알 수 있을 것이다.
두 번째 예는 키보드를 사용한 입력 방법 첫 번째 예는 파일을 사용한 입력 방법이다.

 

(2) readlines 함수 이용하기

readlines함쉬 파일의 모든 줄을 읽어서 각각의 줄을 요소로 가지는 리스트를 형성하는 함수
readline은 한줄만 읽는 다는 데에서 차이가 있으므로 구분에 유의해야 한다.(s주의!!)

 f = open("C:/doit/새 파일.txt", 'r')
 lines = f.readlines()    #readlines함수를 이용해 lines라는 새로운 리스트를 형성
 for line in lines:
 	#**
 	print(line)             
 f.close()
 
 '''위의 코드를 실행하면 리스트에 줄바꿈명령어인 \n까지 문자열로서 리스트에 저장되므로, 
  for문 안에 line= line.strip()을 추가하여 줄바꿈문자를 제거해 리스트에 저장할 수 있다.
  (#**위치)'''

 

(3) read함수 이용하기

read함수: 파일 전체를 문자열로 저장

 f = open("C:/doit/새 파일.txt", 'r')
 data = f.read()   #data라는 객체에 파일 전체내용을 '문자열로' 리턴한다.
 print(data)
 f.close()

 

(4) for문 이용

f = open("C:/doit/새 파일.txt", 'r')
for line in f:       #f객체안에 코드 한줄이 있으면 그 줄을 출력하는 함수
 	print(line)      #반복문을 통해 파일 전체를 출력하는 코드내용이다.
f.close()

 

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

이미 존재하는 파일을 열 때>>
쓰기모드 (w) :  파일의 내용이 모두 사라진다. (빈 파일이 됨)

f = open("C:/doit/새 파일.txt",'w')
for i in range(11, 20):
	data = "%d번째 줄입니다.\n" % i	
    f.write(data)
f.close()        #11번째 줄입니다~ 20번째 줄입니다 만 출력(1~10은 사라짐)


파일 추가모드 (a) : 파일의 내용이 유지된채 내용을 작성할 수 있다.

f = open("C:/doit/새 파일.txt",'a')
for i in range(11, 20):
	data = "%d번째 줄입니다.\n" % i
	f.write(data)
f.close()   #1번째 줄입니다~ 20번째 줄입니다 모두 출력(기존의 1~10에 11~20 추가됨)

 

(+) with 문 사용하기

파일 열고 닫는 과정을 자동화 시켜주는 기능

#with문을 사용하지 않은 경우: 직접 open,close 코드를 써서 열고 닫아야 함
f = open("foo.txt", 'w')
f.write("Life is too short, you need python")  #write는 print처럼 출력하는 기능을 하는 함수
f.close()

#with문을 사용한 경우: with문을 벗어난 순간 자동적으로 파일객체(아래 코드의 경우 f)을 닫음
with open("foo.txt", "w") as f:
	f.write("Life is too short, you need python")

 

04-4. 프로그램의 입출력

type함수: 바로 뒤에 적힌 파일 이름을 인수(함수의 입력값)로 받아 해당 파일의 내용을 출력함
ex) 명령어 [인수1 인수2 ...]

1) sys모듈 사용하기

import sys    #sys 모듈을 불러오는 명령어
args = sys.argv[1:]  #argv= 프로그램 실행시 전달된 인수
for i in args:
	print(i)
    
'''argv[0]= 파일이름
   argv[1]부터 argv의 요소가 된다.'''
#위의 코드 실행결과
C:\doit>python sys1.py aaa bbb ccc
aaa
bbb
ccc

 

2)sys 모듈을 이용한 예제 만들기

import sys
args = sys.argv[1:]
for i in args:
	print(i.upper(), end=' ')
#실행
C:\doit>python sys2.py hello kyunghee unuversity

#결과
HELLO KYUNGHEE UNIVERSITY
'''입력받은 문자열을 띄어쓰기를 기준으로 인수 하나로 인식한 후, 
순서대로 대문자로 바꾸어주는 프로그램이다.'''

'Study > CODE 3기 [Jump to python]' 카테고리의 다른 글

[ 비비빅 ] Python 스터디 #3  (0) 2024.03.21
[2조:ACE] Python 스터디 #3  (0) 2024.03.19
[ 비비빅 ] Python 스터디 # 2주차  (1) 2024.03.18
[5조 C5DE] Python Study #2  (1) 2024.03.18
[2조:ACE] Python 스터디 #2  (2) 2024.03.17